没有音频库,如何编辑原始PCM音频数据?

9
我想精确提取PCM WAV文件的部分内容,一直到样本级别。大多数音频模块似乎依赖于特定平台的音频库。我希望能够跨平台实现,并且速度不是问题,是否有任何原生Python音频模块可以做到这一点?
如果没有,我将不得不解释PCM二进制数据。虽然我确定我可以相当容易地找到PCM规范,而且原始格式也很容易处理,但我以前从未在Python中处理过二进制数据。有没有任何好的资源可以解释如何做到这一点?特别是与音频相关的资源会更好。

这在Python中应该非常有趣。如果你必须自己动手实现,那么你应该写一篇博客。 - Matthew Whited
5个回答

7

我阅读了问题和答案,感觉自己一定是漏掉了什么非常明显的东西,因为没有人提到以下两个模块:

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

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

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

PS 假设采样率为48kHz,24/1.001 == 23.976023976… fps的视频帧长为2002个音频样本,25fps的视频帧长为1920个音频样本。


1
我认为阅读手册已经成为一门被遗忘的艺术。 - tzot
哇,不确定我是怎么错过了那个,但我猜它只是被所有音频库包装器淹没了。希望这是跨平台和足够准确的,但看起来是这样的。 - Soviut

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) 但是根据您的读取方式,可能不需要。
尽管如此,我仍然倾向于采用David的方法。

1

您是否真的需要使用纯Python编写解决方案,或者您是否能接受一些可以与不同平台的本地音频库一起使用的解决方案(因此它实际上是跨平台的)? http://wiki.python.org/moin/PythonInMusic 上有几个后者的例子。


1

看起来结合使用 open(..., "rb")、struct module 和一些关于 wav/riff 文件格式 的细节(可能有更好的参考资料)就可以完成任务了。

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


我需要将一段长的wav音频文件切割成对应于一系列进出点的片段。这必须是准确的,以便可以精确地匹配任何帧速率下的视频。大多数库只有1/10秒的准确度,而我们最低的帧速率甚至达到12fps。我更希望有44,000分之一秒的准确度。 - Soviut

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接