我正在开发一些语音识别应用程序。当电话响起时,我需要识别单词,但要做到这一点,我必须取消扬声器对麦克风的贡献。所以我希望麦克风忽略来自扬声器的所有音频。
我发现 AcousticEchoCanceler 用于 VoIP 应用程序来消除回声,但我尝试使用它,当我的手机响起铃声时没有区别。
我正在从名为“recorder”的 AudioRecord 对象中读取音频,然后应用 AcousticAudioCanceler
boolean isAvailable = AcousticEchoCanceler.isAvailable();
if (isAvailable) {
AcousticEchoCanceler aec = AcousticEchoCanceler.create(recorder.getAudioSessionId());
if(!aec.getEnabled())
aec.setEnabled(true);
Log.d("AEC", " AEC enabled : " + aec.getEnabled() + " . Has control: " + aec.hasControl());
}
else
Log.d("AEC", " AEC is not available");
应用 AcousticCanceler 和不应用它时,我得到相同的输入。为什么?当来自另一个应用程序时,它可能不控制音频?我需要它来取消扬声器的任何输出,与它们来自哪个应用程序无关。
此外,AcousticAudioCanceler 是唯一的方法吗?我的意思是,它只适用于 Android Jelly Bean,我需要它适用于所有设备......提前致谢