捕獲和丟棄音訊焦點詳細講解

2021-08-15 10:24:57 字數 1655 閱讀 1127

目錄介紹

如果覺得好,可以star一下,謝謝!當然也歡迎提出建議,萬事起於忽微,量變引起質變!

部落格大彙總,持續更新目錄說明,記錄所有開源專案和部落格

1.1 發現問題說明

別矇圈,這個就叫做音訊捕獲和丟棄焦點。

至於如何處理,可以看我的原始碼案例:

還可以看我的部落格,瀟湘劍雨,部落格大彙總:

1.2 為什麼要處理音訊焦點問題

2.1 偽**邏輯思路

2.2 請求和放棄音訊焦點

當瞬間丟失焦點,比如手機來了通知。前提是你的通知是震動或者聲音時,會短暫地將音量減小一半。當然你也可以減小三分之一,哈哈!

2.2.1 首先獲取audiomanager物件

maudiomanager = (audiomanager) content.getsystemservice(audio_service);
/**

* @return

*/public boolean requestaudiofocus()

/** */

public void abandonaudiofocus()

2.3 當音訊焦點發生變化處理邏輯
/**

* 當音訊焦點發生變化的時候呼叫這個方法,在這裡可以處理邏輯

* 如果可以的話,請star吧

* @param focuschange 焦點改變

*/@override

public void onaudiofocuschange(int focuschange)

//獲取音量

volume = maudiomanager.getstreamvolume(audiomanager.stream_music);

if (mvolumewhenfocuslosstransientcanduck > 0 && volume ==

mvolumewhenfocuslosstransientcanduck / 2)

ispausedbyfocuslosstransient = false;

mvolumewhenfocuslosstransientcanduck = 0;

break;

case audiomanager.audiofocus_loss:

if (willplay())

break;

case audiomanager.audiofocus_loss_transient:

if (willplay())

break;

// 瞬間丟失焦點,如通知

case audiomanager.audiofocus_loss_transient_can_duck:

// 音量減小為一半

volume = maudiomanager.getstreamvolume(audiomanager.stream_music);

if (willplay() && volume > 0)

break;

default:

break;

}}

3.1 版本更新情況

3.2 個人部落格

關於音訊焦點和音訊競爭通道的問題

import android.media.audiomanager audiomanager am audiomanager this.getsystemservice context.audio service 申請的時候 am.requestaudiofocus null,audiomanage...

Directshow的音訊捕獲和回放測試1

dllregisterserver stdapi dllunregisterserver dllunregisterserver extern c bool winapi dllentrypoint hinstance,ulong,lpvoid bool apientry dllmain handl...

void 和Void 的詳細講解

一 void的含義,首先單詞void的常見中文意思為 空的 c語言中 void指 無型別 二 void的作用 1.用在函式當中 對函式返回值的限定。對函式引數的限定。如 void func void 表示func 這個函式沒有返回,輸入引數為空。一般省略出入的空引數寫為,void func 與之對應...