Shazamの仕組み

Shazamでは、携帯電話で録音したほぼすべての曲を送信すると、曲名、アーティスト名、その曲に関するその他のデータが表示されます。 このデータには、その曲を購入できる場所へのリンクや、そのアーティストの今後のツアー日程が含まれていることが多い。 近年、Shazamは広告やテレビにもライブラリーを拡張しています。 例えば、CMをシャザムすると、その商品を購入するためのリンクなど、その商品に関する追加情報が得られます。

1999年に設立されたShazamは、スマートフォンよりも古い存在です。 Shazam の初期には、ユーザーはこのようなデバイスで電話をかけていました

Shazam 検索は、その曲がすでに Shazam のデータベースにある限り、バーやナイトクラブなどの騒がしい環境でも一致を見つけることができるのです。 少なくとも5秒間の録音が最良の結果をもたらします。 曲のどの部分からでも録音を開始でき、数秒後にマッチした曲が送信されます。 このサービスがうまく機能するために、Shazamは800万以上の曲/オーディオファイルのデータベースを増やしています。 平均的なオーディオファイルが3分だと仮定すると、それぞれを再生するには45年以上かかることになります!

この規模のデータベースがあれば、素晴らしいカバレッジを発揮しますが、Shazamはどのようにしてこのように大きなデータベースからすばやく一致するものを見つけているのでしょうか? まず、Shazamで曲を検索する際、実際のオーディオファイルは検索対象ではありません。 その代わり、Shazamはデータベース内の各オーディオファイルのオーディオフィンガープリントを持っています。 Shazamのユーザーが送信した録音もオーディオフィンガープリントにされ、正確かつ迅速に比較できるようになる。 このオーディオフィンガープリントは、数値データの集合体から構成されています。

音の仕組み

最も基本的な定義として、音は粒子が振動しているものです。 それぞれの音をユニークなものにしている3つの要素があります。 振幅、周波数、および時間です。 振幅は振動の大きさであり、私たちは音の大きさとして認識しています。 周波数とは、振動が発生する速度のことである。 音の周波数は、私たちが音高として認識するものです。 周波数は、音波が1秒間に何回繰り返されるかを示すヘルツ(Hz)で測定されます。 人間の耳は、20Hzから20,000Hzまでの音を聞き分けることができます。 例えば、88鍵のピアノの最低音A0の周波数は27.5Hzである。 オクターブごとの音域の周波数は、対数的に増加する。 つまり、各オクターブの周波数は、その下のオクターブの周波数の2倍になる。 例えば、A1の周波数は55Hz、A2の周波数は110Hz、A3の周波数は220Hzです。

上の表で、多くの楽器は同じ音を出すことができますが、バイオリンの音とピアノで同じ音の響きは異なることがわかると思います。 この音色の違いを「音色」と呼びます。 音の音色は、音の中にある、知覚される音の高さよりも高い(速い速度で繰り返される)周波数によって作られます。 このような周波数は「倍音」と呼ばれます。

これらの倍音の周波数は、楽器に特徴的な音色を与えます。

時間は、音の発生する時間の長さを示すだけでなく、他の音との関係でどの時間に発生するかも示すため、重要なものです。 ある曲は、周波数と振幅が異なる多くの楽器で構成され、それらが互いに関連して時間内に移動する。

フィンガープリントの作成方法

オーディオ フィンガープリントを作成するには、オーディオ ファイルを、Y 軸が周波数、X 軸が時間、陰影の密度が振幅を表すスペクトログラムに変換します(図 1A)。

オーディオファイルの各セクションについて、強いピークを選び、スペクトログラムは散布図に縮小される。 この時点で、振幅はもはや必要ありません (図 1B)。

さて、フィンガープリントのプロセスを経た 2 つのファイルを照合する基本データがすべて揃いました。 しかし、Shazam ユーザーが曲が始まる正確なミリ秒に録音を開始した場合にのみ、それらを一致させることができます。 このようなケースはほとんどないため、オーディオフィンガープリントにはさらなるステップがある。 コンビナトリアルハッシングと呼ばれるプロセスにより,散布図上の点がアンカーとして選ばれ,ターゲットゾーンと呼ばれる時間および周波数のウィンドウの中でアンカー点の後に発生するプロット上の他の点とリンクされます(図1C).

各アンカー点のペアは、アンカーの周波数、点の周波数、アンカーとハッシュとして知られる点の間の時間を含むテーブルに格納される。 このデータは、アンカーとオーディオファイルの開始点の間の時間を含むテーブルにリンクされています。 データベース内のファイルには、曲名やアーティスト名など、ファイルに関する詳細情報を取得するために使用される固有の ID もあります。

一致を見つける方法

両方のオーディオ ファイルのフィンガープリントを作成したので、Shazam ユーザーの録音からのアンカー ポイント ペアをそれぞれ Shazam のデータベースに送信して一致するアンカー ポイントのペアを探します。 この検索は、任意のハッシュの一致を含むすべての曲のオーディオのフィンガープリントを返します。 Shazamユーザーの録音にマッチする可能性のあるものがすべて揃ったら、Shazamユーザーの録音の始まりと、データベースからマッチする可能性のあるものの始まりの間の時間オフセットを見つける必要があります。 このタイミングのオフセットは、Shazam ユーザーの録音におけるアンカーポイントのペアの発生時刻を、Shazam のデータベースからのオーディオファイルにおけるマッチングハッシュの発生時刻から差し引くことによって計算することができます。 一致するハッシュのかなりの量が同じ時間オフセットを持つ場合、その曲は一致すると判断されます!

Y軸がShazamユーザーの録音でハッシュが発生する時間、X軸がShazamのデータベースからのオーディオファイルでハッシュが発生する時間を表す散布図にマッピングすると、一致するハッシュは対角線を形成します(図3A)。 同じデータのヒストグラムでは、Y軸がオフセット時間、X軸が一致量を表し、正しいオフセット時間で大きなスパイクを形成します(図3B)。

この音声検索方法は、Shazamユーザーの録音に人の話し声やロードノイズ、他の曲などの雑音が含まれていても、十分に正確に一致するものを見つけることができる。 オーディオ フィンガープリントによって作成されるアンカーポイント ハッシュの数は、肯定的な検索結果を返すために必要なアンカーポイント一致の量よりもはるかに多いため、外部ノイズによってマスクされたアンカーポイント ハッシュは、Shazam がデータベースからオーディオ ファイルの一致を常に見つけるのを妨げるほど十分ではありません。 検索アルゴリズムは、Shazamのデータベースにある録音された音声との一致を見つけるために構築されているので、もしあなたがコンサート会場で曲をShazamしたときに一致した場合、その演奏者はバックトラックやリップシンクを使っている可能性が高いのです。 もう1つの副次的な効果は、アーティストがサンプルを他の音と組み合わせておらず、サンプルを変更していない場合、Shazamはサンプルが由来するオリジナルの録音を返すということです

Leave a Reply