2012-02-13 12 views
2

私は、アップロードされたmp3を解析し、波形グラフィックを構築するために必要なデータを生成することができる、Pythonで何かを構築しようとしています。私が見つけたものは、私が必要とするものよりずっと複雑です。最終的に、私はあなたがSoundCloudで見るようなものを構築しようとしています。mp3からボリュームカーブを生成する

私はnumpyfft'sを探していましたが、すべてが必要以上に複雑に見えます。これには最高のアプローチは何ですか?私はキャンバスを使って実際のグラフィックを作成しますので、その部分について心配しないでください。私はプロットするデータが必要です。

+1

fftはスペクトル用です。音量をプロットするには、文字通り波形自体を使用することができます(または、技術的に正確であるためには四角形です)。 – wim

+0

私の疑惑を確認するその種の。詳細についてもう少し詳しく説明できますか(優先モジュール、「正方形」など)? – Scott

+0

mp3ファイルをPCM波形にデコードする必要があります。これは 'numpy'配列に格納することができます。 – wim

答えて

1

MP3ファイルは、波形のエンコードされたバージョンです。波形を操作する前に、まずMP3データをPCM波形にデコードする必要があります。 PCMデータを取得すると、各サンプルはその時点の波形の振幅を表します。 MP3デコーダが符号付き16ビット値を出力すると仮定すると、振幅は-16384〜+16383の範囲になります。サンプルを16384で除算してサンプルを正規化すると、波形サンプルは+/- 1.0の範囲になります。

問題は、実際には、PCMへのMP3デコードの1つです。私の知る限り、ネイティブのPythonデコーダはありません。しかし、Pythonからサブプロセスとして呼び出されたLAMEを使用することもできますし、LAMEライブラリをSWIGのようなPythonに直接接続することもできます。簡単な仕事ではありません。

このデータをプロットすると、読者の練習になります。

1

私はあなたがmp3ファイル形式の内部の仕組みに対処したくない場合は、Pygameを使用することをお勧めします。

Pygameは、「サウンド」オブジェクトとして.mp3や.oggなどの一般的なオーディオファイル形式を開くことができるマルチメディアライブラリです.Numpyがアンインストールされている場合は、非圧縮(したがって、ポストfft変換) pygame.sndarray.arrayコールを使用します。これはサウンドサンプルを含むnumpy配列オブジェクトを返します。

私はちょっとトリックを見つけました.mp3ファイルと同じパラメータ(周波数、ビットサンプルサイズ、チャンネル数など)でpygame.mixer.initを呼び出したり、sndarray .arrayはExceptionを発生させることがあります。

http://www.pygame.org/docs/