2

私は、オンラインの視覚的な中国語のトーン ヘルパーのようなものを開発しています。これには、 HPS アルゴリズムを使用したピッチ検出が含まれます。ただし、このアルゴリズムのパフォーマンスは、着信スペクトログラムの解像度によって制限されます。これまでアナライザー ノードを使用してきましたが、オーディオ コンテキストのサンプル レートを設定できないため、不必要に高い最高周波数 (サンプルレート/2 = 約 24 kHz であり、人間の音声は約 3.4 kHz までしか上がりません) を取得します。スペクトログラム。したがって、スペクトログラムの解像度が 1024 の場合 (Web オーディオ API で許可されている最大の fft サイズは 2048 であるため)、音声入力を分析するときにダイナミック レンジのごく一部しか使用しません。

これを解決するために、scriptProcessorNode を使用してバッファーを収集し、DSP.js にある FFT で分析してより多くの制御を得ようとしましたが、これはアナライザーを使用する場合に比べてパフォーマンスがはるかに悪いアプローチのようです。 -ノード。この問題を解決する方法について何か提案はありますか? 私のセットアップの詳細については、開発ブログを参照してください。

4

1 に答える 1

1

asm.js で FFT コードを実装してみてください。Chrome と Firefox の両方でかなりのパフォーマンスの向上が見られると思います。これはまさに asm が得意とする種類のものだからです。

最終的には、これをプロファイリングする必要があると思います。必要なビンのみを使用して FFT を自分で実装する方が良いですか、それとも超高解像度の AnalyserNode を使用して必要のないものを捨てるべきですか? 答えは測定値にあります。

そうは言っても、かなり最適ではない FFT 実装でも、単一入力のリアルタイム分析には十分に高速であるはずです。ショーストッパーのパフォーマンスの問題が発生した場合は、ちょっと驚かれることでしょう。

于 2013-07-30T14:17:57.400 に答える