在Python中进行Mp3解析

时间:2013-08-28 17:58:18

标签: 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 个答案:

答案 0 :(得分:1)

看看:

http://lightshowpi.org/

嗅探源代码,看看他们是如何做到的。

他们还在波形输出上实时使用FFT,并且它并不慢,因为你认为它在Raspberry Pi上工作正常。

它们可能会切换到余弦变换,因为它更快,如果正确检查MP3帧,这就是你要做的事情,因为MP3是余弦变换编码的。

因此,您首先必须知道哪个bin类似于现实世界中的哪个频率。

在pypi.python.org上有AV或ffmpeg直接绑定现在允许你逐帧解码,但我不知道你是否可以从代表帧的对象中提取频率,或者你必须首先转换也是原始的。

如果我是你,我会使用你发现的纯Python MP3代码来提取我需要的东西,并在此过程中对其进行优化。如果需要,使用cython。

但这种方法仅限于MP3。 Lightshow Pi适用于几乎所有压缩类型。