4

音声認識アプリを開発しています。電話が鳴っているときに単語を認識する必要がありますが、これを行うには、マイクへのスピーカーの寄与をキャンセルする必要があります。だから私はマイクがスピーカーから来るすべてのオーディオを無視したい.

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 でのみ動作し、すべてのデバイスで動作する必要があります...事前に感謝します

4

1 に答える 1