wave — 读写 WAV 文件 — Python 文档

来自菜鸟教程
Python/docs/3.9/library/wave
跳转至:导航、​搜索

wave — 读写 WAV 文件

源代码: :source:`Lib/wave.py`



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