30

Talking Tom アプリと同様に、自動音声録音機能を実装しようとしています。次のコードを使用して、オーディオ レコーダーから入力を読み取り、バッファーを分析します。

 float totalAbsValue = 0.0f;
 short sample = 0;

 numberOfReadBytes = audioRecorder.read( audioBuffer, 0, bufferSizeInBytes);

 // Analyze Sound.
 for( int i=0; i<bufferSizeInBytes; i+=2 )
 {
     sample = (short)( (audioBuffer[i]) | audioBuffer[i + 1] << 8 );
     totalAbsValue += Math.abs( sample ) / (numberOfReadBytes/2);
 }

 // Analyze temp buffer.
 tempFloatBuffer[tempIndex%3] = totalAbsValue;
 float temp = 0.0f; 

 for( int i=0; i<3; ++i )
 temp += tempFloatBuffer[i];

これで、オーディオ レコーダーからの音声入力を検出し、オーディオ バッファーを分析できるようになりました。

バッファは float 値に変換され、一定量増加すると、バックグラウンドに何らかの音が存在すると見なされ、録音が開始されます。しかし問題は、アプリがファンや AC ダクトの音を含むすべてのバックグラウンド ノイズの録音を開始することです。

人間の声だけを検出するためにバッファを分析するのを手伝ってくれる人はいますか? または、オーディオ レコーダーの入力から人間の声を検出する別の方法はありますか?

前もって感謝します、

4

9 に答える 9

11

音声検出はそ​​れほど単純ではありません。いくつかのアルゴリズムがあり、そのうちのいくつかはGSM VADなど公開されています。いくつかのオープン ソース VAD ライブラリが利用可能です。そのうちのいくつかについては、ここで説明します。

于 2013-08-30T03:08:19.183 に答える
4

If you want to have a clean recording you can

  1. Filter noise from the voice, you can use FFT for that and apply filters such as lowpass, highpass and bandpass filters Filtering using FFT and Filters

2.After Filtration the noise would be decreased and you can use Voice recognition API's

API's

The more Filtering the better less noise More recognition, but be wary in filtering because it can also remove the Voice together with the noise.

Also read more about FFt

Fast Fourier Transform of Human Voice

Hope This Helps :)

于 2013-09-02T02:25:18.923 に答える
1

完全に一般的なケースでは、これは未解決の問題です。実用的な意味で...

最初のステップは、できるだけノイズのない録音を行うことです。他の人が指摘しているように、それは可能な限り維持したい音に焦点を合わせた指向性マイクから始まります.

2 番目のステップはフィルタリングです。前述のように、電話会社は、人間が音声を理解するために実際に必要な周波数範囲について多くの作業を行いました。その範囲外の周波数をフィルタリングすると、音声が電話のように聞こえますが、バックグラウンド ノイズはさらに取り除かれます。

それを超えようとすると、事態は非常に複雑になる可能性があります。その特定の録音でノイズと見なされるもののサンプルを彼らに見せることができれば、それを分析し、残したい音をあまり損なうことなくそれを差し引こうとするアルゴリズムがいくつかあります。これは単純なプログラミングではありません。もし私があなただったら、それを再発明/再実装しようとするのではなく、すでにそれを正しく理解している人から購入することを真剣に検討します. それらのいずれかが Android で利用できるかどうか、または典型的な Android ボックスにリアルタイムなどで実行するのに十分な計算能力があるかどうかはわかりません。(スタジオでSoundSoapを使用してエアコンのノイズを除去しましたが、非常にうまく機能しています。)

実際、私自身の傾向は、問題を解決したものに単純化することです。取得できる最も指向性が高く、最も近いマイクを使用し、Android に録音を任せます...しかし、信号処理を行って後でクリーンアップし、off を使用します。 -既製のツール。しかし、私はすでに後者に投資しているので、偏見があることを認めます.

于 2013-09-01T16:56:04.980 に答える
0

彼らのほとんどは質問を誤解しており、彼らの回答はあなたとは異なる問題を解決しています。

人間の声の範囲内の周波数を検索して、バッファ内のオーディオを解析する必要があります。それらを検出するとすぐに、誰かが話し始めたことを意味し、録音を開始できます (スピーチの最初の部分が含まれているため、バッファーも含めることを忘れないでください)。

生の音声ストリームで周波数のリストを出力するルーチンを検索します

于 2013-09-01T20:46:10.553 に答える