Audio HAL 通话录音上下行分离
背景需求
做語音識別和答錄功能的app大都需要將通話錄音上下行VOICE_DOWNLINK/VOICE_UPLINK單獨分離實時轉義識別。
兩個解決方向:
1、AudioRecord 方法的立體聲錄制PCM數據混合音源了,二進制文件無法區分哪些數據是左聲道,哪些是右聲道。
通過修改AudioRecord立體聲PCM錄制方案,每8位一組數據,左聲道8位在前,右聲道8位在后。
2、使用兩個實例同時運行MediaRecorder的VOICE_UPLINK,VOICE_DOWNLINK錄制上行或下行數據,且數據不重用。
基于這兩個方向我們都需要去看 Audio HAL 代碼。
最終結論
一開始從方向二出發,由于安卓本身的錄音機制同一時間只允許一個應用錄音,首先需要破解這個機制,
Android Audio - 支持多應用同時錄音_Android8.1修改方法 參考這個修改后,確實可以同時 start 兩個 MediaRecorder。但最終問題是不管如何設置 AudioSource
VOICE_DOWNLINK 和 VOICE_UPLINK,保存錄音文件內容都是一樣的,依舊是上下行混在一起。最終發現底層 buffer 是同一個,所以
保存的數據一樣,這塊嘗試改了好幾天,沒啥進展,具體分析過程看下文。
再嘗試方向一,通過 AudioRecord 獲取原始 pcm 數據按 8 位分離,最終通過這個搞定了!
分析過程
主要的代碼目
總結
以上是生活随笔為你收集整理的Audio HAL 通话录音上下行分离的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: homework7_ZhankunLuo
- 下一篇: 建造者模式(生成器模式)