wave --- 读写WAV格式文件

源代码: Lib/wave.py


The wave module provides a convenient interface to the Waveform Audio "WAVE" (or "WAV") file format. Only files using WAVE_FORMAT_PCM are supported. Note that this does not include files using WAVE_FORMAT_EXTENSIBLE even if the subformat is 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 的默认值。

If you pass in a file-like object, the wave object will not close it when its close() method is called; it is the caller's responsibility to close the file object.

The open() function may be used in a with statement. When the with block completes, the Wave_read.close() or Wave_write.close() method is called.

在 3.4 版更改: 添加了对不可搜索文件的支持。

exception wave.Error

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

Wave_read对象

class wave.Wave_read

Read a WAV file.

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

close()

关闭 wave 打开的数据流并使对象不可用。当对象销毁时会自动调用。

getnchannels()

返回声道数量(1 为单声道,2 为立体声)

getsampwidth()

返回采样字节长度。

getframerate()

返回采样频率。

getnframes()

返回音频总帧数。

getcomptype()

返回压缩类型(只支持 'NONE' 类型)

getcompname()

getcomptype() 的通俗版本。使用 'not compressed' 代替 'NONE'

getparams()

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

readframes(n)

读取并返回以 bytes 对象表示的最多 n 帧音频。

rewind()

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

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

getmarkers()

返回 None

getmark(id)

引发错误异常。

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

setpos(pos)

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

tell()

返回当前文件指针位置。

Wave_write 对象

class wave.Wave_write

Write a WAV file.

Wave_write objects, as returned by open().

For seekable output streams, the wave header will automatically be updated to reflect the number of frames actually written. For unseekable streams, the nframes value must be accurate when the first frame data is written. An accurate nframes value can be achieved either by calling setnframes() or setparams() with the number of frames that will be written before close() is called and then using writeframesraw() to write the frame data, or by calling writeframes() with all of the frame data to be written. In the latter case writeframes() will calculate the number of frames in the data and set nframes accordingly before writing the frame data.

在 3.4 版更改: 添加了对不可搜索文件的支持。

Wave_write objects have the following methods:

close()

确保 nframes 是正确的,并在文件被 wave 打开时关闭它。 此方法会在对象收集时被调用。 如果输出流不可查找且 nframes 与实际写入的帧数不匹配时引发异常。

setnchannels(n)

设置声道数。

setsampwidth(n)

设置采样字节长度为 n

setframerate(n)

设置采样频率为 n

在 3.2 版更改: 对此方法的非整数输入会被舍入到最接近的整数。

setnframes(n)

设置总帧数为 n。 如果与之后实际写入的帧数不一致此值将会被更改( 如果输出流不可查找则此更改尝试将引发错误)。

setcomptype(type, name)

设置压缩格式。目前只支持 NONE 即无压缩格式。

setparams(tuple)

The tuple should be (nchannels, sampwidth, framerate, nframes, comptype, compname), with values valid for the set*() methods. Sets all parameters.

tell()

返回当前文件指针,其指针含义和 Wave_read.tell() 以及 Wave_read.setpos() 是一致的。

writeframesraw(data)

写入音频数据但不更新 nframes

在 3.4 版更改: 现在可接受任意 bytes-like object

writeframes(data)

写入音频帧并确保 nframes 是正确的。 如果输出流不可查找且在 data 被写入之后写入的总帧数与之前设定的 nframes 值不匹配将会引发错误。

在 3.4 版更改: 现在可接受任意 bytes-like object

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