22.4. wave - 读取和写入WAV文件

源代码: Lib / wave.py

wave 模块为 WAV 声音格式提供了一个方便的接口。它不支持压缩/解压缩,但它支持单声道/立体声。

wave 模块定义了以下函数和异常:

wave.open(file, mode=None)

如果 file 是一个字符串,则按该名称打开该文件,否则将其视为类文件对象。mode 可以是:

'rb'
只读模式。
'wb'
只写模式。

注意,它不允许读/写WAV文件。

A mode of 'rb' returns a Wave_read object, while a mode of 'wb' returns a Wave_write object. 如果省略模式且类似文件的对象作为文件传递,则file.mode用作模式的默认值

如果传入类似文件的对象,当调用close()方法时,wave对象不会关闭它;它是调用者的责任关闭文件对象。

open()函数可以在with语句中使用。with块完成时,调用Wave_read.close()Wave_write.close()方法。

在版本3.4中更改:添加了对不可查看文件的支持。

wave.openfp(file, mode)

为维持向后兼容性的open()的同义词。

exception wave.Error

当某些内容不可能因为它违反了WAV规范或者遇到实现缺陷时出现的错误。

22.4.1. Wave_read Objects

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()的人类可读版本。通常'不是 压缩的 parallels 'NONE'

Wave_read.getparams()

返回一个 namedtuple() (nchannels, sampwidth, framerate, nframes, comptype, compname),等同于 get*() 方法的输出。

Wave_read.readframes(n)

读取并返回最多n个音频帧,以字节为单位。

Wave_read.rewind()

将文件指针回滚到音频流的开头。

为了与aifc模块兼容,定义了以下两种方法,并且不执行任何有趣的操作。

Wave_read.getmarkers()

返回None

Wave_read.getmark(id)

引发错误。

以下两种方法定义术语“位置”,它们之间是兼容的,否则是实现相关的。

Wave_read.setpos(pos)

将文件指针设置为指定位置。

Wave_read.tell()

返回当前文件指针位置。

22.4.2. Wave_write Objects

对于可寻找的输出流,wave头将自动更新以反映实际写入的帧数。对于不可搜索的流,在写入第一帧数据时,nframes值必须准确。通过调用setnframes()setparams()可以实现精确的nframes值与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, t5 > 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正确。如果输出流不可查找,并且在写入数据后已写入的帧总数与nframe的先前设置的值不匹配,则将引发错误。 。

在版本3.4中更改:现在接受任何bytes-like object

请注意,在调用writeframes()writeframesraw()之后设置任何参数是无效的,任何尝试都会引发wave.Error