这是我一段时间以来一直在尝试的事情,并且更多是一个开放式问题。如果有人能帮助我对此有所了解,将不胜感激。
我想解码mp3中的音频流,并使用它来驱动动画,所有这些都使用python。据我了解,mp3中的音频数据存储在32个频率子带(或频率仓)的帧中,这对我来说非常理想-如果我可以使用mp3并提取每个帧中每个子带的幅度,那对我想做的事情很完美。
我在这里找到了https://bitbucket.org/portalfire/pymp3解决方案,其中所有处理似乎都是在python中完成的。这很慢,但是即使我可以使用它来提取我想要的东西,也很好-我正在努力了解该代码中发生了什么。我也有一个解决方案,我转换为wav,然后使用fft从wav提取频率。这非常嘈杂,似乎是一种愚蠢的方式,因为我想要的数据直接存储在mp3中-转换回声波似乎是不必要的。这实际上比第一个要快。这是我最终得到的结果:
http://www.youtube.com/watch?v=f_0FORxlK4A
好吧,如果有人对我有任何建议或经验,或者想分享一些关于图书馆的想法,我真的很想听听。
谢谢!
亨利
最佳答案
看一眼:
http://lightshowpi.org/
嗅探源代码,看看他们是如何做到的。
他们还对波形输出使用了FFT,但是是实时的,而且它并不慢,因为您认为它在Raspberry Pi上可以正常工作。
他们可能会改用余弦变换,因为它速度更快,而如果直接检查MP3帧(因为MP3是余弦变换编码),这就是您要执行的操作。
因此,您首先必须知道在现实世界中哪个bin类似于哪个频率。
在pypi.python.org上,现在可以使用AV或ffmpeg直接绑定(bind),使您可以逐帧解码,但是我不知道是否可以从代表帧的对象中提取频率,还是必须首先转换为原始图像。
如果您是我,我将使用您发现的纯Python MP3代码提取我所需的东西,并在此过程中对其进行优化。如果需要,请使用cython。
但是这种方法将您限制为仅MP3。 Lightshow Pi适用于几乎所有压缩类型。
关于python - Python中的MP3解析,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18495020/