1

私はJavaScriptで音声録音を行っており、録音を署名付き浮動小数点数の配列として保存しています。アレイのピッチを決定 (および最終的に調整) するには何が必要ですか? C++ のさまざまなアルゴリズムを見てきましたが、私の状況ではあまり役に立たないようです。これをダウンロードして試してみて、その一部をjavascriptに変換できるかどうかを確認しました。

http://voicerecorder.codeplex.com/SourceControl/latest

しかし、実際に行ったのは、選択した設定に関係なく、録音を大きくしたことだけでした.

4

1 に答える 1

2

ここで網羅的な回答を提供しようとするつもりはありませんが、オーディオ プログラミングで同様の問題に取り組んできた旅の中で発見した私自身の発見について説明します。

ピッチ検出

サウンドがモノフォニックである場合 (ジェフへのコメントに基づいているように聞こえるため)、他のピッチ検出アルゴリズムと比較して比較的単純であるため、主に自己相関手法を使用してピッチ検出を実装しました。

慣れていない場合、アイデアは次のとおりです。

  1. サンプルをそれ自体の上にスライドさせます (所定のウィンドウ サイズで、1 サンプル単位で)
  2. 各ステップで、元の波とスライド ウィンドウの絶対差を計算します (口頭で説明するのは難しい)。
    • ウィンドウをスライドさせながら、(2)で計算したスコアを記録する
    • 波がそれ自体と相関すると、スコアは最小値に達し、この最小値の時間位置が信号の周期性を指定します。

私の実装では、これがうまく機能した唯一のアルゴリズムでした (私の声のサンプルを与えたとき; ただし、さまざまなサンプルは試しませんでした)。

これは、自己相関がどのように機能するかについての大まかな説明でした。この記事では、さまざまなピッチ検出アルゴリズムの非常に優れた比較を提供しています。

https://ccrma.stanford.edu/~pdelac/154/m154paper.htm

ピッチシフト

もちろん、リサンプリングするだけで非常に安価なピッチ シフトを実現できますが、それはレコードの再生速度が速すぎるのと同じように聞こえ、多くの状況では受け入れられません。

ピッチシフトに関する限り、私の実装はまだそこまで進んでいませんが、最後に中断したのは、可能な解決策としてフェーズボコーダーを検討していたことです。難しいのは、これらのアルゴリズムがどのように機能するかについての適切な説明を見つけて、単に抽象的な数学方程式を提供するだけでなく、なぜそのように機能するのかについての直感を提供することです.

于 2013-08-12T16:38:59.557 に答える