背景需求
做语音识别和答录功能的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 是同一个