22.4. wave — 读写 WAV 文件

源代码: Lib/wave.py


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

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

wave. open ( file , mode=None )

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

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

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

A mode of 'rb' 返回 Wave_read 对象,而 mode of 'wb' 返回 Wave_write 对象。若 mode 被省略且像文件对象被传递作为 file , file.mode 被用作默认值对于 mode .

若传入像文件对象,wave 对象将不关闭它当它的 close() 方法被调用;关闭文件对象是调用者的责任。

The open() 函数可以用于 with 语句。当 with 阻塞完成, Wave_read.close() or Wave_write.close() 方法被调用。

3.4 版改变: 添加支持不可寻址文件。

wave. openfp ( file , mode )

同义词 open() , maintained for backwards compatibility.

exception wave. Error

错误被引发,当某些东西因违反 WAV 规范或命中实现缺陷而不可实现时。

22.4.1. Wave_read Objects

Wave_read 对象,如返回通过 open() ,拥有下列方法:

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

返回 namedtuple() (nchannels, sampwidth, framerate, nframes, comptype, compname) ,相当于输出对于 get*() 方法。

Wave_read. readframes ( n )

读取并返回最多 n 帧的音频,作为 bytes 对象。

Wave_read. rewind ( )

将文件指针倒带到音频流的开头。

定义以下 2 方法是为了兼容 aifc 模块,且不会做任何有趣的事情。

Wave_read. getmarkers ( )

返回 None .

Wave_read. getmark ( id )

引发错误。

以下 2 种法定义了在它们之间兼容的 position 术语,否则从属实现。

Wave_read. setpos ( pos )

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

Wave_read. tell ( )

返回当前文件指针位置。

22.4.2. Wave_write Objects

对于可寻址输出流, wave 头会自动更新以反映实际写入的帧数。对于不可寻址流, nframes 值必须精确,当写入第一帧数据时。精确的 nframes 值可以达成通过调用 setnframes() or setparams() 采用将要写入的帧数先于 close() 被调用然后使用 writeframesraw() 以写入帧数据,或通过调用 writeframes() 采用要写入的所有帧数据。在后一种情况下, writeframes() 将计算数据中的帧数并设置 nframes 故此,在写入帧数据之前。

Wave_write 对象,如返回通过 open() ,拥有下列方法:

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 )

The tuple 应该为 (nchannels, sampwidth, framerate, nframes, comptype, compname) ,具有有效值对于 set*() 方法。设置所有参数。

Wave_write. tell ( )

返回文件的当前位置,具有相同免责声明对于 Wave_read.tell() and Wave_read.setpos() 方法。

Wave_write. writeframesraw ( data )

写入音频帧,不校正 nframes .

3.4 版改变: 任何 像字节对象 现接受。

Wave_write. writeframes ( data )

写入音频帧并确保 nframes 是正确的。它将引发错误,若输出流不可寻址且已写入帧总数之前 data 已写入不匹配的先前设置值对于 nframes .

3.4 版改变: 任何 像字节对象 现接受。

注意:设置任何参数无效,之前有调用 writeframes() or writeframesraw() ,且任何试图这样做会引发 wave.Error .