如何在没有音频库的情况下编辑原始PCM音频数据?

时间:2009-05-08 17:57:25

标签: python audio binary wav

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

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

5 个答案:

答案 0 :(得分:6)

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

  • audioop:操纵原始音频数据
  • wave:读取和写入WAV文件

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

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

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

答案 1 :(得分: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),但根据您的读取方式,您可能不需要。

所有这些都说,我仍然倾向于大卫的方法。

答案 2 :(得分:1)

您的解决方案是纯Python是非常重要的,或者您是否接受可以在各种平台上使用本机音频库的东西(因此它实际上是跨平台的)?后者在http://wiki.python.org/moin/PythonInMusic

有几个例子

答案 3 :(得分:1)

似乎是open(...,“rb”),struct module的组合,有关wav/riff file format的一些细节(可能更好的参考)将完成这项工作。

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

答案 4 :(得分: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

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