如何转换 wav 文件-> 类似字节的对象?

Posted

技术标签:

【中文标题】如何转换 wav 文件-> 类似字节的对象?【英文标题】:How to convert a wav file -> bytes-like object? 【发布时间】:2016-02-20 21:54:03 【问题描述】:

我正在尝试使用 Python 3.5.1 的 audioop 模块以编程方式分析 wav 文件,以获取通道、持续时间、采样率、音量等。但是我找不到任何文档来描述如何将 wav 文件转换为“ fragment' 参数,必须是字节类对象。

有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

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 文件上得到了预期的结果,但在其他文件上却没有。我收到以下错误:_read_fmt_chunk 中的文件“C:\Program Files (x86)\Python35-32\lib\wave.py”,第 260 行引发错误('unknown format: %r' % (wFormatTag,)) wave.Error:未知格式:6 以及:文件“C:\Program Files (x86)\Python35-32\lib\chunk.py”,第 63 行,在 init 中引发 EOFError EOFError 我猜未知格式错误是因为文件类型或压缩不兼容,但 EOF 错误对我来说没有意义。有什么想法吗? Python 的 wave 模块只支持未压缩的 WAV。 “未知格式”错误可能是由读取压缩的 WAV 引起的。至于 EOFError,可能是 WAV 文件为空或被截断(“截断”)?

以上是关于如何转换 wav 文件-> 类似字节的对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何将声音字节转换为可以在变量中访问的 .wav 文件?

将字节数组转换为 wav 文件

将字节数组转换为 Wav 文件 [重复]

如何在 Javascript/Node 中从 blob 写入 .wav 文件

如何将 8 位无符号 wav 文件转换为 8 位有符号 wav 文件?

即时将原始音频字节从 NAudio 转换为 wav 字节