使用Android的内置声学回声消除功能

问题描述 投票:7回答:4

有人知道如何使用Android设备的内置回声消除功能吗?它位于硅中的某处,用于GSM / CDMA扬声器电话。我们真的很想在VoIP应用程序中使用它,而不是自己开发。

android echo voip cancellation
4个回答
5
投票

我终于能够获得回声消除,以在我的Arm5(WM8650)处理器(Android 2.2)上工作。以下是我采取的步骤。

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

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

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

  4. 我应用了P2中描述的缓冲技术,终于开始起作用。但是,需要为每个设备调整延迟。还请注意,WebRtc具有回声消除的移动版和完整版。完整版会大大减慢处理器的速度,因此可能只能在ARM7上运行。移动版本有效,但质量较低]]

  5. 我希望这会对某人有所帮助。


0
投票

我去过同一地方,已成功将Speex AEC移植到Android,并在2个不同的Android VoIP客户端中使用了它。当在免提电话上以最大音量收听时,大多数回声将被消除-在各种设备上进行了测试。Speex官方文档和Google搜索应足以使其正常工作。


0
投票

自API级别11起,MediaRecorder.AudioSource有一个新值,即VOICE_COMMUNICATION。 Android docs say:“已针对语音通信(如VoIP)调整了麦克风音频源。例如,它将利用回声消除或自动增益控制(如果可用)。如果未应用语音处理,则其行为类似于DEFAULT。”我试过了,但是没用。问题可能出在我使用的设备上,这是Sony TabletS。不过,值得尝试。


0
投票

我尝试了这里描述的所有方法,但发现它们没有效率。

© www.soinside.com 2019 - 2024. All rights reserved.