私はインターネットから毎日2分間のラジオ放送を録音しています。開始時と終了時のジングルは常に同じです。ラジオ放送の正確な時間は多かれ少なかれ6分と異なるかもしれないので、私は約15分のラジオを録音しなければなりません。
これらのジングルが15分のレコードにある正確な時間を特定したいので、必要なオーディオの部分を抽出できます。
MP3をPCMデータにデコードし、PCMデータをhttp://www.codeproject.com/KB/audio-video/SoundCatcher.aspxに基づくスペクトログラムに変換するC#アプリケーションを既に開始しました。
PCMデータで相互相関アルゴリズムを使用しようとしましたが、アルゴリズムは10msのステップで約6分と非常に遅く、ジングルの開始時刻が見つからない場合があります。
2つのスペクトログラムを比較して一致させるアルゴリズムのアイデアはありますか?または、そのジングルの開始時間を見つけるためのより良い方法はありますか?
ありがとう、
更新、遅れてすみません
まず、すべての回答者に感謝します。それらのほとんどは、関連性のある、または興味深いアイデアでした。
fonzoが提案したShazamアルゴリズムを実装してみました。しかし、スペクトログラムのピークを検出できませんでした。これは、3つの異なるレコードからの開始ジングルの3つのスペクトログラムです。ブロブフィルターを使用してAForge.NETを試しました(ただし、ピークを特定できませんでした)。画像をぼかし、高さの違いを確認し、ラプラス変換、勾配分析を行って、一連の垂直バーを検出しました(ただし、偽が多すぎました)。ポジティブ)...
その間、私はDaveAaronSmithによって提案されたHoughアルゴリズムを試しました。ここで、各列のRMSを計算します。はいはい各列、それはO(N * M)ですが、M << Nです(列が約8kのサンプルであることに注意してください)。したがって、全体としてはそれほど悪くはありませんが、アルゴリズムには約3分かかりますが、失敗することはありません。
私はその解決策を採用することもできますが、可能であれば、ShazamがO(N)であり、おそらくはるかに高速(そしてより低温)であるため、Shazamを使用することをお勧めします。コメントを追加することで、これらのスペクトログラムで常に同じポイントを検出するアルゴリズム(ピークである必要はありません)を知っている人はいますか?
新しいアップデート
最後に、上記で説明したアルゴリズムを使用して、Shazamアルゴリズムを実装しようとしましたが、スペクトログラムで適切なピークを見つけることができませんでした。特定されたポイントは、サウンドファイル間で一定ではありません。理論的には、Shazamアルゴリズムはその種の問題の解決策です。Dave Aaron Smithによって提案されたハフアルゴリズムは、より安定していて効果的でした。約400個のファイルを分割しましたが、正しく分割できないのはそのうちの20個だけです。8GBから1GBの場合のディスク容量。
ご協力いただきありがとうございます。