亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

關于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

凌云县| 汽车| 常熟市| 于田县| 会东县| 延庆县| 托克逊县| 中宁县| 衡阳市| 金坛市| 达日县| 诏安县| 仁布县| 石首市| 宜阳县| 潼关县| 金昌市| 虹口区| 宜宾县| 尖扎县| 江达县| 剑阁县| 昌宁县| 循化| 宁武县| 马公市| 广平县| 浦东新区| 商都县| 鸡西市| 客服| 永福县| 漳州市| 镇沅| 新蔡县| 平乡县| 越西县| 商水县| 临江市| 天全县| 丁青县|