1

Android アプリケーションで叫び声と笛の検出器を作成しようとしています。ここで musicg Android ライブラリを使用して、ユーザーの口笛を検出できるようになりました。利用可能なライブラリがないため、悲鳴検出器を自分で実装する必要があります。

musicg では、オーディオ データを読み取り、バイトのバッファーに格納します。ホイッスル検出器の入力としてバッファを使用します。これらのバイトを LogCat に出力して、これらのバイトがどのように見えるかを理解しようとしています。ただし、それらが何であるか、musicgライブラリがこの入力を使用してユーザーがいつ口笛を吹いているかを検出する方法についてはわかりません。

オーディオ データ バイトは次のようになります。buffer[i] + "" を使用してそれらを印刷します

10-25 23:43:54.412: E/1115(7542): 71 
10-25 23:43:54.412: E/1116(7542): 22
10-25 23:43:54.412: E/1117(7542): 58
10-25 23:43:54.412: E/1118(7542): -14
10-25 23:43:54.412: E/1119(7542): 36
10-25 23:43:54.412: E/1120(7542): 88
10-25 23:43:54.412: E/1121(7542): 8
10-25 23:43:54.413: E/1122(7542): -98
10-25 23:43:54.413: E/1123(7542): -24
10-25 23:43:54.413: E/1124(7542): 66
10-25 23:43:54.413: E/1125(7542): -51
10-25 23:43:54.413: E/1126(7542): 111
10-25 23:43:54.413: E/1127(7542): -67
10-25 23:43:54.413: E/1128(7542): 43
10-25 23:43:54.413: E/1129(7542): -68
10-25 23:43:54.413: E/1130(7542): 36
10-25 23:43:54.415: E/1131(7542): -58
10-25 23:43:54.415: E/1132(7542): -85
10-25 23:43:54.415: E/1133(7542): -46
10-25 23:43:54.415: E/1134(7542): 78
10-25 23:43:54.415: E/1135(7542): -40

では、この入力を使用してユーザーの口笛を検出する方法を教えてください。

アイデアを教えてください

ありがとうございました

4

1 に答える 1

3

バイトのストリームは PCM オーディオです。配列内の各バイトは、特定の瞬間におけるサウンドの大きさです。オーディオ処理は通常、チャンクで行われます。たとえば、使用しているライブラリでは、WaveTypeDetector クラスがバイトのチャンクをループし、各チャンクで FFT を実行してピッチを決定しています。

オーディオの 1 つの瞬間では、音の周波数 (ピッチ) については何もわかりません。有効なサウンド分析を行うには、この配列のようなオーディオのチャンクが必要です。

FFT は、バイト配列で表される時間のチャンクのサウンド レベル対周波数の関数を出力します。これは、たとえば、音のどのピッチが最も大きいかを検出するために使用できます。

また、一連の音のチャンクに対してこの方法を繰り返し実行すると、ライブラリは時間の経過とともにピッチがどのように変化するかを比較して、これらのタイプの音のピッチの既知のパターンに基づいて、どのような種類のサウンド (口笛または手拍子) が再生されているかを判断できます。作る。

このライブラリは、一連の音のチャンクに対して分析を実行しています。チャンクごとに、サウンドが特定の一連の基準に適合するかどうかを判断します (たとえば、特定の範囲の周波数と特定の強度の範囲内にあるかどうか)。次に、これをサウンド ファイル全体で繰り返し、WhistleApi クラスのブール値の応答を分割して、サウンド ファイル全体がホイッスルである確率を出力します。

悲鳴検出を作成するには、WhistleApi クラスを例として、DetectionApi クラスを拡張して ScreamApi クラスを作成する必要があると思います。次に、WhistleApi で使用されるものを置き換える独自の基準値を考え出す必要があります。

独自の悲鳴の基準を考え出すために、許容できると思われるさまざまな種類の悲鳴を数十回録音することができます。ファイルの最初と最後を切り取って、無音にならないようにします。次に、DetectionApi クラスを一時的に変更して、これらの基準ごとに読み取る最大値と最小値をログに記録します。ファイルごとに長い一連の値が得られるので、それらを Excel に入力して平均と標準偏差を取得できます。各基準について、その基準の最小値と最大値の平均 +/- 3 標準偏差のようなものを使用します。すべてのサウンド ファイルでこれらの値を比較して調整し、外れ値のファイルを除外する可能性があります。

于 2013-10-25T18:18:08.160 に答える