9

我对精确提取 PCM WAV 文件的部分感兴趣,直到样本级别。大多数音频模块似乎都依赖于特定于平台的音频库。我想让这个跨平台和速度不是问题,有没有可以做到这一点的本机 python 音频模块?

如果没有,我将不得不解释 PCM 二进制文件。虽然我确信我可以相当容易地挖掘 PCM 规范,并且原始格式很容易理解,但我以前从未真正处理过 Python 中的二进制数据。有没有很好的资源可以解释如何做到这一点?特别与音频有关的只是结冰。

4

5 回答 5

7

我阅读了问题和答案,我觉得我一定遗漏了一些完全明显的东西,因为没有人提到以下两个模块:

  • audioop : 操作原始音频数据
  • wave : 读写WAV文件

也许我来自平行宇宙,Guido 的时间机器实际上是一个时空机器 :)

如果您需要示例代码,请随时询问。

PS 假设 48kHz 采样率,24/1.001==23.976023976... fps 的视频帧是 2002 个音频样本长,而在 25fps 时它是 1920 个音频样本长。

于 2009-05-08T19:15:37.147 回答
5

我只用 C++ 和 Java 编写了一个 PCM 阅读器,但格式本身相当简单。可以在这里找到一个不错的描述:http: //ccrma.stanford.edu/courses/422/projects/WaveFormat/

过去,您应该能够将其读取(二进制文件读取,http://www.johnny-lin.com/cdat_tips/tips_fileio/bin_array.html)并处理生成的数组。您可能需要使用一些位移来获得正确的对齐方式(https://docs.python.org/reference/expressions.html#shifting-operations),但根据您的阅读方式,您可能不需要。

综上所述,我仍然倾向于大卫的方法。

于 2009-05-08T18:28:15.123 回答
1

你的解决方案是纯 Python 真的很重要,还是你会接受可以在各种平台上使用原生音频库的东西(所以它实际上是跨平台的)?在http://wiki.python.org/moin/PythonInMusic有后者的几个例子

于 2009-05-08T18:11:09.517 回答
1

似乎 open(..., "rb")、struct module和有关wav/riff 文件格式的一些细节(可能是更好的参考)的组合可以完成这项工作。

只是好奇,您打算如何处理原始样本数据?

于 2009-05-08T18:20:07.873 回答
0

我正在查找这个,我发现了这个:http : //www.swharden.com/blog/2009-06-19-reading-pcm-audio-with-python/ 它需要 Numpy(如果你想绘制它,还需要 matplotlib )

import numpy
data = numpy.memmap("test.pcm", dtype='h', mode='r')
print "VALUES:",data

查看原作者的网站了解更多详情。

于 2015-07-28T18:46:59.543 回答