【问题标题】:Mp3 parsing in PythonPython 中的 Mp3 解析
【发布时间】:2013-08-28 17:58:18
【问题描述】:

这是我一段时间以来一直在尝试做的事情,而且更像是一个开放式问题。如果有人有任何知识可以帮助我对此有所了解,将不胜感激。

我想解码 mp3 中的音频流并使用它来驱动动画,全部使用 python。据我了解,mp3 中的音频数据存储在 32 个频率子带(或频率箱)的帧中,这对我来说是理想的 - 如果我可以使用 mp3 并为每个帧上的每个子带提取幅度,那将完美地完成我想做的事情。

我在这里找到了解决方案https://bitbucket.org/portalfire/pymp3,所有处理似乎都是在 python 中完成的。这很慢,但即使我可以用它来提取我想要的东西,它也会很好 - 我正在努力理解该代码中发生的事情。我还有一个解决方案,我转换为 wav,然后使用 fft 从 wav 中提取频率。这非常嘈杂,似乎是一种愚蠢的方法,因为我想要的数据直接存储在 mp3 中 - 转换回声波似乎没有必要。这实际上比第一个更快。这是我最终得到的结果:

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

如果有人有任何建议,或者他们想分享的经验,或者我应该关注的图书馆的想法,我真的很想听听。

谢谢!

亨利

【问题讨论】:

  • 您可能需要通过wiki.python.org/moin/PythonInMusic 来查看大量可用的库
  • 市面上有许多 MP3 库,而就使用哪一个库寻求建议正是像 SO 这样的问答论坛不擅长处理的事情。跨度>
  • 我可以给出一条建议:如果您知道如何使用 cython、ctypes 或任何其他此类机制,那么值得看看像 mpg123 这样没有任何 Python 绑定的 C 库,并且仅包装您需要的位。这样你有更多的选择。
  • 我想在我的一个爱好项目中做同样的事情。我曾经尝试过abanert的方法,进步到一定程度,但是时间和精力都用完了……

标签: python mp3


【解决方案1】:

看看:

http://lightshowpi.org/

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

他们还在波形输出上使用了 FFT,但它是实时的,它并没有您认为它在 Raspberry Pi 上运行良好的那么慢。

他们可能会改用余弦变换,因为它更快,如果直接检查 MP3 帧,您会这样做,因为 MP3 是余弦变换编码的。

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

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

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

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

【讨论】:

    猜你喜欢
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 2021-06-29
    • 2014-04-22
    • 1970-01-01
    相关资源
    最近更新 更多