私は音声認識プログラムをプログラムしましたが、音楽を再生しているコンピューターでマイクが私を聞くのに問題があります。マイクに入る音からスピーカーから出る音をフィルターで除去できるソフトウェアが必要です。
私の問題を解決するソフトウェアまたはコンポーネント(Delphi用)はありますか?
私は音声認識プログラムをプログラムしましたが、音楽を再生しているコンピューターでマイクが私を聞くのに問題があります。マイクに入る音からスピーカーから出る音をフィルターで除去できるソフトウェアが必要です。
私の問題を解決するソフトウェアまたはコンポーネント(Delphi用)はありますか?
キャプチャする必要があります:
次に、マイクに応じて2つのパラメーターを見つける必要があります。場所とサウンドシステムの遅延。この2つのパラメーターは、n-delayとk-amplifyです。
Stream1[t+n]*k=Stream2[t]
ここで、t=時間。このパラメータを見つけたら、結果のストリーム、マイクのみを覗き見します。入力は
Stream2[t]-Stream1[t+n]*k=MusicReductionStream[t]
ノイズキャンセリングマイクと同じようにやりたいと思います。これらのシステムは、少なくとも1つの追加のマイクを使用して、「周囲のノイズ」とマイクに直接向けられたノイズ(登録する必要のある音声)の差を計算します。ソフトウェアのみのソリューションでは、同じ効果を確実に得ることができるとは思いません。
最初のステップは明らかに音楽を断ることです:-)
AsioVSTライブラリをチェックしてください。
その下Examples\Plugins\Crosstalk Cancellation\
には、おそらくあなたが探していることを実行するプラグインのソースコードがあります。
魔法はDAV_DspCrosstalkCancellation.pasで発生します。
speexプリプロセッサにはエコーキャンセレーション機能があると思います。録音したオーディオデータとキャンセルしたいオーディオをフィードする必要があり、それを削除しようとします。
主な問題は、コンピュータが再生するオーディオを見つけることです。そのための優れたAPIがあるかどうかはわかりません。
また、ノイズリダクション機能と音声アクティビティ検出機能も備えています。dllとしてコンパイルしてから、delphiヘッダーを書き込むことができます。
スピーカーやマイクの正確な位置や部屋の大きさや内容などによって変化する可能性のあるスピーカーや部屋などのインパルス応答を推定する必要があります。また、システムの遅延を把握/推定する必要があります。
人またはマイクが移動可能な場合、インパルス応答と遅延を継続的に再推定する必要があります。
インパルス応答を推定したら、それを出力信号と畳み込み、音声入力の無音部分を無効にすることができるまで、マイク入力から結果の遅延バージョンを差し引くことを試みることができます。相互相関は、遅延の推定に役立つ場合があります。