1

mp3プレーヤー用に16バンドのグラフィックイコライザーを作りたいです。

ただ、音声処理の経験がないのでどこから始めたらいいのかわかりません。

だから、mp3形式から周波数帯(?)をどこから抽出し始めるのか本当にわかりません。

誰かが私にこれを行うための簡単な解決策を提案してくれませんか?

ああ、また、変更やWindowsアプリケーションとしての構築が簡単なオープンソースのmp3プレーヤーはありますか?

4

1 に答える 1

8

あなたが探しているのはスペクトラムアナライザだと思います。オーディオスペクトル全体のさまざまな周波数範囲での瞬間的なエネルギーレベルを示します。ほとんどの人にとって、それは基本的に目の保養です。信号は変更されません。

一方、グラフィックイコライザーを使用すると、さまざまな周波数帯域でオーディオのエネルギーをブーストまたは減衰させることができます。それは間違いなく信号を変更します。ほとんどの人は、低音をブーストするなど、効果を得るためにスペクトルの一部をブーストするためにグラフィックイコライザーを使用します。

オーディオファンは通常、マイク(アンプではなく)に接続されたスペクトラムアナライザーを使用して、グラフィックイコライザーを介してホワイトノイズが再生されている部屋の応答を監視します。次に、イコライザーを調整して周波数応答をフラットにし、それによって部屋の音響を補正して、録音されたオーディオをより純粋に聞くことができます。これらの人々は通常、イコライザーの設定を台無しにすると非常に腹を立てます。:)

RhythmBox、Banshee、VLC、さらにはAudacityなどの人気のあるLinuxmp3プレーヤーを見ることができます。あなたがあなた自身を書きたいならば、ここにいくつかの指示があります。WindowsでGUIプログラムを作成する方法を知っていて、優れたスペクトラムアナライザが必要な場合、実際に行う必要があるのは次のとおりです。

  1. デコード段階の後、信号パスをタップします。

  2. オーディオをモノラルにダウンミックスします。これは通常、左右のサンプルを足し合わせるだけです。ショートを追加するときのオーバーフローを避けるために、オーディオにフロートを使用するか(+/- 1にスケーリングする必要があります)、追加する前に(おそらく16ビット)サンプルを32ビット整数にキャストするように注意してください。

  3. いくつかのサンプル(ウィンドウと呼ばれる)、通常は512、1024、または2048(常に2の累乗を選択)を測定します。ここでは、解像度(ウィンドウが大きいほど解像度が高くなる)、コスト(サンプルが多いほど処理に時間がかかる)、応答性(ウィンドウが大きいほど蓄積に時間がかかり、アナライザーのフレームレートが低下する)の間にはトレードオフがあります。

  4. これらのサンプルを高速フーリエ変換(FFT)で実行します。使用するFFTライブラリのドキュメントを参照してください(FFTWが適しています)が、出力は通常、真ん中を対称にした複素数の配列です。

  5. 出力が対称である場合は、前半のみを使用してください。対称でない場合は、すべてを使用します。最初から最後(または中央)までの各複素数は、0Hzからオーディオのサンプルレートの半分までの線形間隔の周波数で正弦波のエネルギーと位相をエンコードします。オーディオが44.1kHzで、FFTで1024サンプルを選択した場合、各数値は22050 Hz / 512 =43Hzを表します。

  6. それぞれの複素数を取り、その実数部と虚数部を二乗し、それらの数を加算します。最終的に、各ビンの電力(つまり、エネルギーの2乗)が得られます。これは、実数で正の数です。

  7. FFTビンを合計して、周波数帯域にグループ化します。たとえば、上記の例で512個のビンを取得し、それらを51個でグループ化した場合、2196Hzのバンドが10個あります。これは低周波数での解像度が少なすぎるため、人々は通常、対数間隔の帯域を使用します:0(0-43 Hz)、1(43-86 Hz)、2-3(86-172 Hz)、4-7(172- 344 Hz)、8-15(344-688 Hz)など。

  8. これで、電力の合計を直接表示するか、各帯域の平均を計算してから、その平方根(RMSエネルギー)を取得してプロットすることができます。デシベルで値を表示するには、RMSエネルギーを計算してから、次のようにプロットします20 * log10(RMS / 32768)。値は、16ビットオーディオの場合、0 dB(フルスケール)から-90 dB(サイレント)になります。

  9. 手順2〜8を継続的に繰り返し、毎回表示を更新します。

  10. 友達に感動を与えましょう。

これで頑張ってください。また、16 kHzを超えるエネルギーがあまり見られない場合でも、心配する必要はありません。mp3エンコーディングアルゴリズムは、圧縮を支援するために16kHzを超えるすべてのものを除外します。

ps本当に上手で、デコーダーのソースがある場合は、デコーダーの周波数領域にあるときにオーディオにアクセスし、それをスペクトラムアナライザーに使用できます。ウィンドウサイズに関してデコーダーが提供するものを採用する必要がありますが、計算コストは​​ほぼゼロになります。また、mp3はフーリエ変換ではなく離散コサイン変換を使用してオーディオを周波数領域との間で移動するため、エネルギー値は適切なFFTの場合とは異なることに注意してください。

于 2012-04-16T07:47:18.703 に答える