2017-08-20 2 views
1

私はオーディオについて取り組んでいますが、私はこのエリアの初心者です。私はマイクから私のソースオーディオ(ちょうど1つの音)に一致するサウンドは、Shazamのコークス広告が好きです。 Example Video(0.45分)ただし、JavaScriptでウェブサイトに掲載したいと思います。ありがとうございました。JavaScriptのソースとマイクのサウンドを比較します

答えて

0

Shazamのバックエンドと同様のものを構築するのは簡単な作業ではありません。我々は行う必要があります。ユーザーのマイクから

  1. 獲得オーディオ(簡単に)
  2. がソースにそれを比較し、一致を識別する(うーん...どのように行う...)

どのようにすることができます私たちはそれぞれのステップを実行しますか?

アクアイヤーオーディオ

この1つは決して大きなものではありません。これにはWeb Audio APIを使用できます。あなたはそれを使用する方法について良いチュートリアルのために周りにGoogleをすることができます。 This linkは、あなたがそれを使用するときに理解しておくべきかもしれないいくつかの良い基礎知識を提供します。

は、オーディオソースのサンプルが

は明らかにこの作品は、このようなプロジェクトでは、アルゴリズムの挑戦になるだろうファイルの比較します。おそらく、この部分にはさまざまな方法がありますが、ここでそれらをすべて記述するのに十分な時間ではありませんが、実現可能な手法(Shazamが実際に使用しているものです)と、さらに詳細には hereで説明されています。 FFT分析を使用して生成することができる、ソース材料のより小さな部分のための一種の指紋に対して。

次のようにこれは動作します:

  • 時に長い数秒を超えないサンプルの小さなセクションで

    1. ルック(ディスクリートパーティショニング、これはスライディングウィンドウを使用して行われていることではないに注意してください)オーディオ選択のフーリエ変換を計算します。これは私たちの選択を異なる周波数の多くの信号に分解します。サンプルの周波数領域を分析して、私たちが聞いていることに関する有益な結論を引き出すことができます。
    2. FFTの重要な値(ピークの頻度や大きさなど)を特定して選択用の指紋を作成する
    3. Shazamのように複数のサンプルを照合できるようにするには、指紋辞書を維持する必要があります1つのソースマテリアルに一致する必要があるだけで、リストでそれらを維持することができます。あなたのキーは数値の配列になるので、データセットをすばやく検索するための別のデータ構造がk-d treeであることを提案します。私はShazamが1つを使用しているとは思わないが、重要なポイントの量を一定に保つことができれば、システムはn次元の最寄りの探索に近いように思える。今のところ、単純なままで、リストを使用してください。

    ここでは、指紋のデータベースを用意して使用できる状態になっています。今はマイク入力と比較する必要があります。

    1. マイク入力は、ソースを作成したのと同じ方法で、スライドウィンドウ付きの小さなセグメントでサンプルします。
    2. 各セグメントについて、フィンガープリントを計算し、そのフィンガープリントがストレージに近いものと一致するかどうかを確認します。あなたはここで部分一致を探すことができます。試してみることができる調整や最適化がたくさんあります。
    3. これはノイズの多い不正確な信号になるので、すべてのセグメントが一致するとは思わない。彼らの多くが試合をしている場合(あなたは何が実験的に何を意味するのか把握しなければならないでしょう)、それを持っていると仮定します。比較的少数のマッチがある場合、あなたはそうしないと考えます。

    結論

    は、これがうまく行うための超簡単プロジェクトであることを行っていません。必要なチューニングと最適化の量は難しいことが分かります。いくつかのマイクは不正確ですが、ほとんどの環境では他の音があり、そのすべてが結果を乱すことになりますが、音が悪いほどではないでしょう。つまり、外部からは不可解に複雑なシステムであり、それを比較的単純なステップに分割したシステムです。

    あなたのポストには何度もJavascriptが書かれていますが、今まで私の答えでゼロに言及していたことに気付くかもしれません。それは実装言語が重要な要素ではないからです。このシステムは複雑で、パズルの最も難しい部分は紙で解決するものになるので、「どのようにXをYで実行できますか」という考え方を考える必要はありません。 XとYは自然に来るはずです。

  • 関連する問題