0

非常に小さな (長さ 1 ~ 3 秒) の効果音を検出しようとしています。現在、FMod を使用して、ループバック手法を使用して (別のプログラムで再生される) 音をキャプチャしています。

私は過去数日間、キャプチャした効果音を保存した約50のデータベースと比較する方法を研究してきました.各バイナリバイトを比較すると、わずかな干渉が発生して変更されることがわかっています. サウンドは、毎回キャプチャされる正確なオーディオ ファイルです。したがって、特性は毎回ほとんど死んでいるはずです。

少なくとも 10 ~ 90 秒のオーディオを録音する必要があるため、既に公開されているフィンガープリンティング ライブラリは使用できません。

音は非常に小さく、数も少ないので、そこにいる専門家の 1 人が簡単な解決策を知っていると思います。私は FFT を使用していくつかの周波数などを比較したかったのですが、Kiss FFT ライブラリをそのまま動作させることはできません。絶対にDOCSではありません。

また、チャネルを分割する関数を作成しました。ここ

int SeperateChannels(FMOD::Sound *sound)
{
    byte *ptr1, *ptr2;
    unsigned int lenbytes, len1, len2;

    sound->getLength(&lenbytes, FMOD_TIMEUNIT_PCMBYTES);
    sound->lock(0, lenbytes, (void**)&ptr1, (void**)&ptr2, &len1, &len2);

    byte *bufferLeft  = new byte[(lenbytes/2)];
    byte *bufferRight = new byte[(lenbytes/2)];

    for(int i = 0; i < lenbytes; i += 4)
    {
        bufferLeft[i]   = ptr1[i];
        bufferLeft[i+1] = ptr1[i+1];

        bufferRight[i]   = ptr1[i+2];
        bufferRight[i+1] = ptr1[i+3];
    }

    // Kiss FFT????

    return 1;
}

どんな助けでも大いに感謝します。-キュー

4

1 に答える 1

2

問題が事前に定義された一連のサウンドのどれが録音されているかを判断することである場合、2 つのオプションを考えることができます。録音をデータベース内のすべてのサウンドと「比較」するか、一般的な特性に基づいて「ルックアップ」を実行します。音の (通常、オーディオ分析の文献では「記述子」と呼ばれます)。記述子については、スペクトル重心などを考えています。

「比較」の場合、相関を使用して時間領域でこれを行うか、スペクトルの大きさの差を計算して周波数領域でこれを行うことができます。時間領域の比較では、サウンドの開始位置がわからないため、複数のオフセットで相関を実行する必要があります。周波数領域の場合、生の FFT データをある種のスペクトル エンベロープに変換する必要があります。たとえば、一連の (ウィンドウ化された) 重なり合うフレームのマグニチュード スペクトルの平均を取ります。

「ルックアップ」の場合、一連の記述子を計算し、コーパスと候補入力でそれらを計算してから、入力に対して計算した記述子に最も近いコーパスの要素を検索します。フレームのシーケンスに対してこれを行うこともできます。時間領域の「比較」の場合と同じ種類の相関分析を実行しますが、各サンプルの差を計算する代わりに、各記述子の差を計算します-これは、単一の記述子を使用するよりも、進化するサウンドを比較するのに適しています。

FFT を使用する場合は、FFT を適用する方法だけでなく、マグニチュード スペクトルを計算する方法と、扱っているデータ構造について何らかの考えを持っている必要があります。結果を得るには、FFT を実行するだけでなく、いくつかの手順が必要です。特にサウンドセットが固定されている場合は、マッチングを最適化する方法がたくさんあります (たとえば、グループテストのアプローチを考えています)。

より簡単なアプローチとして、 DTMF タッチ トーンのデコードが行われる方法を調べることができます。ソース サウンドの事前分析を実行することで、各サウンドのフィンガープリントに使用できる重複しない周波数のセットを特定できる場合があります。

いずれの場合も、左右のチャンネルを合計してモノラルで行います。入力が出力と同じパンニングを持っていることが確実でない限り、ステレオはあまり役に立ちません。

于 2013-08-10T04:40:00.130 に答える