如何同步AudioRecord和AudioTrack

问题描述:

有什么方法可以同步Android中音频数据的捕获和回放?如何同步AudioRecord和AudioTrack

我需要做一些信号处理(回声消除等),需要在采样级同步。

I.e.硬件捕捉音频帧的时间很短,我需要高精度地通过扬声器播放的相应帧。

任何帮助或暗示真的很感激。提前致谢。

-flesym

我能得到回音消除对我的Arm5(WM8650)处理器工作。下面是我采取的步骤:

  1. 我用JNI包装Speex并在发送PCM帧到编码器之前调用回声处理例程。无论我尝试过哪些Speex设置,都不会取消回声。

  2. 由于Speex对播放和回声帧之间的延迟非常敏感,我实现了一个队列并将发送到AudioTrack的所有数据包排队。队列的大小应该大致等于内部AudioTrack缓冲区的大小。大致在AudioTrack从其内部缓冲区向声卡发送数据包时,这种方式发送到echo_playback。这种方法消除了延迟,但回声仍未取消

  3. 我用JNI封装了WebRtc回声消除部分,并在将数据包发送到编码器之前调用了它的方法。回声仍然存在,但图书馆显然试图取消它。

  4. 我应用了P2中描述的缓冲技术,它终于开始工作。虽然需要为每个设备调整延迟。另请注意,WebRtc具有移动和完整版本的回音消除功能。完整版显着降低了处理器速度,应该只能在ARM7上运行。移动版本工作,但质量较差

我希望这会帮助某人。