音声認識アプリを開発しています。電話が鳴っているときに単語を認識する必要がありますが、これを行うには、マイクへのスピーカーの寄与をキャンセルする必要があります。だから私はマイクがスピーカーから来るすべてのオーディオを無視したい.
AcousticEchoCanceler は VoIP アプリでエコーをキャンセルするために使用されていることがわかりましたが、使用してみましたが、電話でトーンが鳴っているときに違いはありません。
「レコーダー」と呼ばれる 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 でのみ動作し、すべてのデバイスで動作する必要があります...事前に感謝します