22.4. wave
—读写WAV文件¶
源代码: Lib/wave.py
wave
模块为WAV声音格式提供了方便的界面。它不支持压缩/解压缩,但它支持单声道/立体声。
wave
模块定义了以下功能和异常:
-
wave.
open
(file, mode=None)¶ 如果 file 是字符串,请按该名称打开文件,否则将其视为类文件对象。 mode 可以是:
'rb'
只读模式。
'wb'
只写模式。
注意,它不允许读/写WAV文件。
'rb'
的 mode 返回Wave_read
对象,而'wb'
的 mode 返回Wave_write
对象。如果省略 mode 并且类文件对象作为 file 传递,则使用file.mode
作为 mode 的默认值。如果你传递一个类文件对象,当它的
close()
方法被调用时,wave对象不会关闭它;它是调用者的责任关闭文件对象。open()
函数可以在with
语句中使用。当with
块完成时,调用Wave_read.close()
或Wave_write.close()
方法。在 3.4 版更改: 添加对不可搜索文件的支持。
-
exception
wave.
Error
¶ 当某些内容不可能因为它违反了WAV规范或者遇到实现缺陷时出现的错误。
22.4.1. Wave_read对象¶
由 open()
返回的Wave_read对象有以下方法:
-
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.
rewind
()¶ 将文件指针回滚到音频流的开头。
为了与 aifc
模块兼容,定义了以下两种方法,并且不做任何有趣的事情。
-
Wave_read.
getmarkers
()¶ 返回
None
。
-
Wave_read.
getmark
(id)¶ 引发错误。
以下两种方法定义术语“位置”,它们之间是兼容的,否则是实现相关的。
-
Wave_read.
setpos
(pos)¶ 将文件指针设置为指定位置。
-
Wave_read.
tell
()¶ 返回当前文件指针位置。
22.4.2. Wave_write对象¶
对于可寻找的输出流,wave
头部将自动更新以反映实际写入的帧数。对于不可搜索的流,当写入第一帧数据时,nframes 值必须准确。通过调用 setnframes()
或 setparams()
(在调用 close()
之前将被写入的帧的数量,然后使用 writeframesraw()
写入帧数据,或者通过调用具有要写入的所有帧数据的 writeframes()
),可以实现精确的 nframes 值。在后一种情况下,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)¶ 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
。