2013-08-28 21 views
6

これは私がしばらくの間行ってきたことであり、未解決の問題です。もし誰かが私にこれについて少しの光を当てるのに役立つ知識を持っているなら、非常に感謝しています。PythonでのMp3解析

私はmp3のオーディオストリームをデコードし、アニメーションを駆動するために、すべてpythonを使用したいと思っています。私が理解しているように、mp3のオーディオデータは32個の周波数サブバンド(または周波数ビン)のフレームに格納されています。これは私にとって理想的です - mp3を取って各フレームの各サブバンドの振幅を抽出できれば私がしたいことにぴったりなのです。

ここで解決策が見つかりましたhttps://bitbucket.org/portalfire/pymp3すべての処理はPythonで行われているようです。それはかなり遅いですが、たとえそれを使って私が望むものを抽出することができたとしても、それは良いでしょう - 私はそのコードで何が起こっているのか理解するのに苦労しています。私はwavに変換した後、fftを使ってwavから周波数を抽出するという解決法もありました。これは非常に騒々しいし、私が欲しいデータはmp3に直接格納されているので、それを行うための愚かな方法のように思える - 音波に変換する必要はないようです。これは実際には最初のものより速かったです。ここに私がなってしまったものです:

http://www.youtube.com/watch?v=f_0FORxlK4A

まあ、誰もが何かアドバイス、または経験彼らが共有したい、または私が見なければならないライブラリのためのアイデアを持っている場合、私は本当に聞きしたいと思います。

ありがとうございます!

ヘンリー

+1

http://wiki.python.org/moin/PythonInMusicにアクセスして、利用可能な膨大なライブラリがあるかどうか確認してください。 –

+0

多くのMP3ライブラリがあり、推奨事項を尋ねています使用する人はまさにSOのような質疑応答フォーラムが扱いに悪いものです。 – abarnert

+2

私が与えることができるアドバイスのひとつ:cythonやctypesなどのメカニズムを知っているなら、Pythonバインディングを持たないmpg123のようなCライブラリを見て、必要なビットだけをラップする価値があります。あなたにはもっと多くの選択肢があります。 – abarnert

答えて

1

を見てください:

http://lightshowpi.org/

は、ソースコードをスニフし、彼らはそれをやった方法を参照してください。

彼らはまた、波出力ではなくリアルタイムでFFTを使用しました。ラズベリーパイでうまく動作すると考えると、それほど遅くはありません。

より速いので、代わりに余弦変換に切り替える可能性があります。これは、MP3フレームが正しくコサイン変換されているかのように、MP3フレームを正しく確認する場合に実行されます。

したがって、まず実際にどの周波数のビンがどのビンに似ているかを知る必要があります。

pypi.python.orgには、フレームごとにデコードできるAVまたはffmpegの直接バインディングがありますが、フレームを表すオブジェクトからフリークを抽出できるかどうかわからない、または最初に変換する必要があります生も同様です。

私があなただったら、私が必要とするものを抽出し、その過程で最適化した純粋なPython MP3コードを使用します。必要に応じてcythonを使用する。

しかし、この方法ではMP3に限定されます。 Lightshow Piはほぼすべての圧縮タイプで動作します。