源代码:
Lib/wave.py
wave
模块提供了一个处理 Waveform Audio "WAVE" (或称 "WAV") 文件格式的便利接口。 仅支持未压缩的 PCM 编码波形文件。
在 3.12 版本发生变更:
增加了对
WAVE_FORMAT_EXTENSIBLE
标头的支持,要求扩展格式为
KSDATAFORMAT_SUBTYPE_PCM
。
wave
模块定义了以下函数和异常:
wave.
open
(
file
,
mode
=
None
)
如果
file
是一个字符串,打开对应文件名的文件。否则就把它作为文件型对象来处理。
mode
可以为以下值:
'rb'
只读模式。
'wb'
只写模式。
注意不支持同时读写WAV文件。
mode
设为
'rb'
时返回一个
Wave_read
对象,而
mode
设为
'wb'
时返回一个
Wave_write
对象。如果省略
mode
并指定
file
来传入一个文件型对象,则
file.mode
会被用作
mode
的默认值。
如果你传入一个文件型对象,当调用 wave 对象的
close()
方法时并不会真正关闭它;调用者需要负责关闭文件对象。
open()
函数可以在
with
语句中使用。 当
with
代码块结束时,
Wave_read.close()
或
Wave_write.close()
方法会被调用。
在 3.4 版本发生变更:
添加了对不可搜索文件的支持。
写入一个 WAV 文件。
Wave_write 对象,由
open()
返回。
对于可查找的输出流,
wave
头将自动更新以反映实际写入的帧数。 对于不可查找的流,当写入第一帧时
nframes
值必须是准确的。 要获取准确的
nframes
值可以通过调用
setnframes()
或
setparams()
并附带
close()
被调用之前将要写入的帧数然后使用
writeframesraw()
来写入帧数据,或者通过调用
writeframes()
并附带所有要写入的帧。 在后一种情况下
writeframes()
将计算数据中的帧数并在写入帧数据之前相应地设置
nframes
。
在 3.4 版本发生变更:
添加了对不可搜索文件的支持。
Wave_write 对象具有以下方法:
close
(
)
确保
nframes
是正确的,并在文件被
wave
打开时关闭它。 此方法会在对象收集时被调用。 如果输出流不可查找且
nframes
与实际写入的帧数不匹配时引发异常。
writeframes
(
data
)
写入音频帧并确保
nframes
是正确的。 如果输出流不可查找且在
data
被写入之后写入的总帧数与之前设定的
nframes
值不匹配将会引发错误。
在 3.4 版本发生变更:
现在可接受任意
bytes-like object
。
注意在调用
writeframes()
或
writeframesraw()
之后再设置任何格式参数是无效的,而且任何这样的尝试将引发
wave.Error
。