2つのサウンドファイルをプログラムで比較して、それらが同一であるか、ほぼ同一であるかを判断する方法はありますか?これらはmp3ファイルではなく、ID3やその他のメタデータはありませんが、プレーンなwavファイルがあります。チェックサム値の比較は、完全に同一ではない可能性があるため、機能しない場合があります。
音響指紋に関するウィキペディアの記事 は、オープンソースのlibfooidを含む多くの製品に言及しています。基本的には、周波数領域に入り、比較的少数の帯域(たとえば、32)で大まかなレベルを取得して、25ミリ秒の音のようなものを表す文字列を作成し、ファイル全体に対してそれを実行してから、さまざまなファイルのこれらの文字列のあいまいな比較。かなり複雑ですが、実行する必要があります。実際のサンプルを比較しても、ボリュームを数パーセントシフトすると一致全体が破棄されるほど単純なものにはなりません。
コンピュータサイエンスの研究では、一連のサウンドの類似性を比較するプロセスは、コンテンツベースのオーディオ インデックス作成 、 検索 、および フィンガープリント と呼ばれます。
これを行う1つの方法は、次のとおりです。
1)各オーディオファイルで数ビットの信号処理を実行して、時間の経過に伴うピッチ、周波数スペクトル、自己相関、ダイナミックレンジ、トランジェントなどの特徴を抽出します。
2)各オーディオファイルのすべての機能を多次元配列に入れ、各多次元配列をデータベースにダンプします
3)最適化手法( 勾配降下 など)を使用して、多次元データのデータベース内の特定のオーディオファイルに最適なものを見つけます。
これをうまく機能させる秘訣は、どの機能かです
MusicBrainz 、 EchoNest など、このようなことを行うプロジェクトがいくつかあります。
Echonestには 最も単純なAPI の1つがあります。私はこのスペースで見ました。始めるのはとても簡単です。
P.S.いいえ、私はEchonestで働いていませんし、そこで働いている人も知りません。
ファイルのかなりまともなフィンガープリントを取得するために試すことができることの1つは、 フーリエ変換 を取得し、ファイルに存在するさまざまな頻度の分布を調べることです。同じフーリエ変換を持つ2つの非常に異なるサウンドファイルを作成することはまだ非常に可能ですが、ファイルが不自然なソースからのものである場合、それはややありそうにありません...
2つのWAVファイルをサンプルごとに比較し、サンプルごとの平均差を計算できます。速度を上げるには、同じ方法を使用しますが、10番目のサンプルごと、または100番目のサンプルごとに比較して、本質的に同じ値を考え出します(2つのファイルが同じでないか、近くにない場合、サンプルごとの平均の差が大きくなります)。