如何将wav文件转换为类似字节的对象?

3
我试图使用Python 3.5.1的audioop模块来编程分析wav文件,以获取通道、持续时间、采样率和音量等信息。然而,我找不到任何文档描述如何将wav文件转换为必须是类似字节的“fragment”参数。
有人能帮忙吗?
1个回答

8

file.read() 返回一个 bytes 对象,因此如果您只想以bytes形式获取文件的内容,类似以下的代码就可以:

with open(filename, 'rb') as fd:
    contents = fd.read()

然而,由于您正在使用audioop,您需要的是原始的音频数据,而不是原始文件内容。虽然未压缩的WAV文件包含原始音频数据,但它们还包含头文件,其中包含有关原始音频的重要参数。此外,这些头文件不能被视为原始音频。
您可能想要使用wave模块来解析WAV文件并获取其原始音频数据。一个完整的将WAV文件中的音频反转的示例如下:
import wave
import audioop

with wave.open('intput.wav') as fd:
    params = fd.getparams()
    frames = fd.readframes(1000000) # 1 million frames max

print(params)

frames = audioop.reverse(frames, params.sampwidth)

with wave.open('output.wav', 'wb') as fd:
    fd.setparams(params)
    fd.writeframes(frames)

非常感谢您的帮助 - 问题已经得到解答!然而,我在一些wav文件上得到了预期的结果,但在其他文件上没有。我收到以下错误:File "C:\Program Files (x86)\Python35-32\lib\wave.py", line 260, in _read_fmt_chunk raise Error('unknown format: %r' % (wFormatTag,)) wave.Error: unknown format: 6还有:File "C:\Program Files (x86)\Python35-32\lib\chunk.py", line 63, in init raise EOFError EOFError我猜测未知格式错误是由于不兼容的文件类型或压缩引起的,但EOF错误对我来说没有意义。有什么想法吗? - user3535074
Python的wave模块仅支持未压缩的WAV文件。 "未知格式"错误可能是由于读取了压缩的WAV文件引起的。至于EOFError,也许WAV文件为空或被截断(“截断”)了? - marcelm

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