wave — 读写 WAV 文件 — Python 文档
wave — 读写 WAV 文件
wave 模块为 WAV 声音格式提供了方便的接口。 它不支持压缩/解压,但支持单声道/立体声。
wave 模块定义了以下函数和异常:
- wave.open(file, mode=None)
如果 file 是字符串,则按该名称打开文件,否则将其视为类文件对象。 模式可以是:
'rb'
只读模式。
'wb'
只写模式。
请注意,它不允许读/写 WAV 文件。
'rb'
的 mode 返回一个Wave_read
对象,而'wb'
的 mode 返回一个Wave_write
对象. 如果省略 mode 并且文件类对象作为 file 传递,则file.mode
用作 mode 的默认值。如果传入一个类文件对象,wave对象在调用其
close()
方法时不会关闭它; 关闭文件对象是调用者的责任。open() 函数可以用在 with 语句中。 当
with
块完成时,会调用 Wave_read.close() 或 Wave_write.close() 方法。3.4 版更改: 增加了对不可搜索文件的支持。
- exception wave.Error
- 当某事因违反 WAV 规范或遇到实现缺陷而无法实现时引发的错误。
Wave_read 对象
open() 返回的 Wave_read 对象具有以下方法:
- Wave_read.close()
- 如果流被 wave 打开,则关闭流,并使实例不可用。 这在对象集合上自动调用。
- Wave_read.getnchannels()
- 返回音频通道数(
1
表示单声道,2
表示立体声)。
- Wave_read.getsampwidth()
- 以字节为单位返回样本宽度。
- Wave_read.getframerate()
- 返回采样频率。
- Wave_read.getnframes()
- 返回音频帧数。
- Wave_read.getcomptype()
- 返回压缩类型(
'NONE'
是唯一支持的类型)。
- Wave_read.getcompname()
- getcomptype() 的人类可读版本。 通常
'not compressed'
与'NONE'
平行。
- Wave_read.getparams()
- 返回一个 namedtuple()
(nchannels, sampwidth, framerate, nframes, comptype, compname)
,相当于get*()
方法的输出。
- Wave_read.readframes(n)
- 读取并返回至多 n 帧音频,作为 bytes 对象。
- Wave_read.rewind()
- 将文件指针倒回到音频流的开头。
下面两个方法是为了兼容aifc模块而定义的,不做任何有趣的事情。
- Wave_read.getmarkers()
- 返回
None
。
- Wave_read.getmark(id)
- 提出错误。
以下两种方法定义了一个术语“位置”,它在它们之间是兼容的,否则取决于实现。
- Wave_read.setpos(pos)
- 将文件指针设置到指定位置。
- Wave_read.tell()
- 返回当前文件指针位置。
Wave_write 对象
对于可查找的输出流,wave
标头将自动更新以反映实际写入的帧数。 对于不可搜索流,写入第一帧数据时,nframes 值必须准确。 准确的 nframes 值可以通过调用 setnframes() 或 setparams() 以及将在 close( ) 被调用,然后使用 writeframesraw() 写入帧数据,或者通过调用 writeframes() 来写入所有要写入的帧数据。 在后一种情况下,writeframes() 将计算数据中的帧数并在写入帧数据之前相应地设置 nframes。
open() 返回的 Wave_write 对象具有以下方法:
3.4 版更改: 增加了对不可搜索文件的支持。
- Wave_write.close()
- 确保 nframes 正确,如果文件被 wave 打开,请关闭该文件。 此方法在对象集合时调用。 如果输出流不可搜索并且 nframes 与实际写入的帧数不匹配,它将引发异常。
- Wave_write.setnchannels(n)
- 设置通道数。
- Wave_write.setsampwidth(n)
- 将样本宽度设置为 n 字节。
- Wave_write.setframerate(n)
将帧速率设置为 n。
3.2 版更改: 此方法的非整数输入四舍五入为最接近的整数。
- Wave_write.setnframes(n)
- 将帧数设置为 n。 如果实际写入的帧数不同,这将在稍后更改(如果输出流不可搜索,则此更新尝试将引发错误)。
- Wave_write.setcomptype(type, name)
- 设置压缩类型和描述。 目前只支持压缩类型
NONE
,即不压缩。
- Wave_write.setparams(tuple)
- 元组应该是
(nchannels, sampwidth, framerate, nframes, comptype, compname)
,值对set*()
方法有效。 设置所有参数。
- Wave_write.tell()
- 返回文件中的当前位置,对 Wave_read.tell() 和 Wave_read.setpos() 方法具有相同的免责声明。
- Wave_write.writeframesraw(data)
写入音频帧,不修正 nframes。
在 3.4 版更改:现在接受任何 bytes-like object。
- Wave_write.writeframes(data)
写入音频帧并确保 nframes 正确。 如果输出流不可搜索,并且在写入 data 之后写入的总帧数与之前为 nframes 设置的值不匹配,则会引发错误。
在 3.4 版更改:现在接受任何 bytes-like object。
请注意,调用writeframes()
或writeframesraw()
后设置任何参数都是无效的,任何尝试这样做都会引发wave.Error。