中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于android audio路由策略的修改

發布時間:2020-06-09 10:44:19 來源:網絡 閱讀:2331 作者:GaoNeil 欄目:移動開發

關于android audio路由策略的修改

在工作時,往往有這樣一些需求:
1)希望針對不同的audio stream type(例如music、tts), 有輸出到不同的輸出設備(例如speaker、headset、BT、usb audio等)的需求,另外還有輸出設備的優先級的需求。例如AUX(headset) > BT > FMTX > speaker。即例如BT連接了,那么音頻就輸出到BT,而不是FM發射。
2)針對不同的audio stream type和不同的輸出設備,有不同的輸出音量值。
3)針對不同的audio stream type、不同的輸出設備、不同的應用的audio track,同時播放時,有不同的音量的需求。例如TTS、導航音、music聲音同時輸出時,TTS聲音要提高,導航聲音要中間,音樂聲音要壓低。
4)如果接上,一般HDMI輸出是音頻和視頻同時輸出到HDMI外設的,如何做到HDMI只輸出視頻到HDMI外設,例如顯示屏,但音頻留在本地speaker播放呢?

這些問題,其實修改起來,不同的android版本涉及到不同的函數。

Android KK:

AudioPolicyManagerBase.cpp
AudioPolicyManagerBase.cpp::getDeviceForStrategy() 決定音頻路由策略。
MTK的 AudioMTKPolicyManager.cpp

Android L:

AudioPolicyManager.cpp
AudioPolicyManager::getDeviceForStrategy() 決定音頻路由策略。
MTK的:
AudioPolicyManager::computeVolume() ? computeCustomVolume() 計算音量
AudioALSAHardware.cpp ::GetAudioCommonData() ::GetAudioCustomVol()

Android M:

AudioPolicyManager.cpp
AudioPolicyManager::getDeviceForStrategy()
還有Engine.cpp ::getDeviceForStrategy() ::getStrategyForUsage() ::getOutputForAttr()等。 決定音頻路由策略。

frameworks/av/services/audioflinger/Threads.cpp
AudioFlinger::MixerThread::prepareTracks_l() 關于各個audio track輸出音量的混音控制最終接口。

Android O:

與Android M類似。

一定要注意Audio Policy相關的文件,這些是實現音頻路由策略的核心。

另外要理解audio的 output device和 available output device。
支持熱插拔的輸出設備(例如AUX headset、HDMI),靠的是WiredAccessoryManager.java文件實現的。注意閱讀這個代碼。

關于音量控制需要注意:
1)根據音效,有一個masterVolume
2)系統針對不同的stream type和不同輸出設備,不同的音量level,有一個表格,表明輸出的音量值,此值,有來算出。此音量作為系統控制音量。叫做typevolume
3)應用針對自己的audio track,有個track音量
混音時,這些音量的乘積作為該track的最終音量。
上面是android framework針對audio stream流的音量數字放大倍數。混音把多個AudioTrack混音到特定輸出設備的mixerbuffer中。
Android的混音線程mixerthread是針對不同的輸出設備,不同的stream type,不同的音頻參數(例如不同采樣頻率)來創建和維護的。

對應驅動和硬件codec,還有一個模擬PA放大倍數,這個針對“輸出設備”,上層通過Kcontrol調用驅動接口設置到硬件,具體看linux ALSA架構。

最終的效果是數字放大和模擬放大的綜合結果。

參考我自己的文檔:
《MTK 6753 audio V3架構(音量設置參數的傳入和使用部分–根據streamtype、output device的類型、volume index第幾格音量來設置)2.jpg》
《android audio架構mixerthread的問題.jpg》
《MTK 6753 android L audio 路由策略架構1(這種分層決定的策略也是個架構的好方法).jpg》
《MTK 6753 android L audio 路由策略架構2.jpg》
《關于android和ios的audio音量設置的區別問題.txt》
《MTK 6753 audio V3架構(音量設置參數的傳入和使用部分–根據streamtype、output device的類型、volume index第幾格音量來設置–是個好架構).jpg》
《MTK 6753 audio V3架構(mic部分,包括頻率轉換、格式轉換、音量增強Bes處理等)1.jpg》
《MTK 6753 audio V3架構 audio captue client的創建.jpg》
《audio左右聲道的排列和處理.docx》
《mtk audio codec2.jpg》
《關于MTK的nv中的audio參數.txt》
《MTK audio 雙mic錄音問題.txt》
《關于audio不同stream type的音源在不同輸出設備上播放輸出的問題.txt》
《audio concept 概念 i2s等 AEC回聲消除.docx》
《關于MTK audio policy(Android M 6755)路由策略.JPG》
《關于MTK audio tuning tool 設置的speaker、headphone等使用情景下的低通濾波器參數配置文件(audio_hcf_default.h、audio_acf_default.h)的代碼調用方式.txt》
《關于audio設計需要注意的.txt》
《MTK audio.txt》

關于Android audio的整體框架,后面我會整理出來。但需要的整理時間比較長。

另外我的相關培訓視頻請看:
歡迎觀看我發布的各個課程: https://edu.51cto.com/lecturer/8896847.html

另外我的免費的linux各種驅動開發課程如下:
https://edu.51cto.com/course/17138.html

我的新的更多優惠的打包課程鏈接如下:
https://edu.51cto.com/sd/0a9d4

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

焦作市| 梁河县| 呼玛县| 莲花县| 五寨县| 商洛市| 石狮市| 香港| 来凤县| 翁牛特旗| 象州县| 尼木县| 逊克县| 铜鼓县| 荣昌县| 军事| 西乌| 镇安县| 略阳县| 贵定县| 金坛市| 巢湖市| 呼和浩特市| 高唐县| 孟州市| 长白| 惠水县| 高州市| 宁都县| 金乡县| 宝丰县| 松滋市| 赤峰市| 铜梁县| 襄樊市| 南江县| 藁城市| 吴桥县| 攀枝花市| 镶黄旗| 湘阴县|