有没有办法在Android中同步音频数据的捕捉和播放?
我需要做一些需要在样本级别进行同步的信号处理(回声消除等)。
即。硬件捕获音频帧的时间很长,我需要通过扬声器高精度播放相应的帧。
非常感谢任何帮助或提示。提前谢谢。
-flesym
答案 0 :(得分:1)
我能够在我的Arm5(WM8650)处理器上使用回音消除功能。以下是我采取的步骤:
我将Speex与JNI包装在一起,并在将PCM帧发送到编码器之前调用了回显处理例程。无论我尝试过何种Speex设置,都没有取消回音。
因为Speex对回放帧和回显帧之间的延迟非常敏感,所以我实现了一个队列并将发送到AudioTrack的所有数据包排队。队列的大小应大致等于内部AudioTrack缓冲区的大小。这样,当AudioTrack从内部缓冲区向声卡发送数据包时,数据包大致被发送到echo_playback。采用这种方法消除了延迟,但仍未取消回声
我用JNI包装了WebRtc回声消除部分,并在将数据包发送到编码器之前调用了它的方法。回声仍然存在,但图书馆显然试图取消它。
我应用了P2中描述的缓冲技术,它终于开始工作了。但是,需要针对每个设备调整延迟。另请注意,WebRtc具有移动和完整版本的回声消除功能。完整版本大大减慢了处理器速度,应该只能在ARM7上运行。移动版本可以使用,但质量较低
我希望这会对某人有所帮助。