21.5. wave — 读写WAV格式文件

源代码: Lib/wave.py


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

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

wave.open(file[, mode])

If file is a string, open the file by that name, otherwise treat it as a seekable file-like object. mode can be any of

'r', 'rb'

只读模式。

'w', 'wb'

只写模式。

注意不支持同时读写WAV文件。

A mode of 'r' or 'rb' returns a Wave_read object, while a mode of 'w' or 'wb' returns a Wave_write object. If mode is omitted and a file-like object is passed as file, file.mode is used as the default value for mode (the 'b' flag is still added if necessary).

如果操作的是文件对象,当使用 wave 对象的 close() 方法时,并不会真正关闭文件对象,这需要调用者负责来关闭文件对象。

wave.openfp(file, mode)

同 open(),用于向后兼容。

exception wave.Error

当不符合WAV格式或无法操作时引发的错误。

21.5.1. 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()

Returns a tuple (nchannels, sampwidth, framerate, nframes, comptype, compname), equivalent to output of the get*() methods.

Wave_read.readframes(n)

Reads and returns at most n frames of audio, as a string of bytes.

Wave_read.rewind()

重置文件指针至音频开头.

后面两个方法是为了和 aifc 保持兼容,实际不做任何事情。

Wave_read.getmarkers()

返回 None。

Wave_read.getmark(id)

引发错误异常。

以下两个方法都使用指针,具体实现由其底层决定。

Wave_read.setpos(pos)

设置文件指针到指定位置。

Wave_read.tell()

返回当前文件指针位置。

21.5.2. Wave_write 对象

由 open() 返回的 Wave_write 对象,有以下几种方法:

Wave_write.close()

Make sure nframes is correct, and close the file if it was opened by wave. This method is called upon object collection.

Wave_write.setnchannels(n)

设置声道数。

Wave_write.setsampwidth(n)

设置采样字节长度为 n。

Wave_write.setframerate(n)

设置采样频率为 n。

Wave_write.setnframes(n)

Set the number of frames to n. This will be changed later if more frames are written.

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。

Wave_write.writeframes(data)

Write audio frames and make sure nframes is correct.

注意在调用 writeframes() 或 writeframesraw() 之后再设置任何格式参数是无效的,而且任何这样的尝试将引发 wave.Error。