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 aWave_readobject, while a mode of'w'or'wb'returns aWave_writeobject. If mode is omitted and a file-like object is passed as file,file.modeis used as the default value for mode (the'b'flag is still added if necessary).如果操作的是文件对象,当使用 wave 对象的
close()方法时,并不会真正关闭文件对象,这需要调用者负责来关闭文件对象。
-
exception
wave.Error¶ 当不符合WAV格式或无法操作时引发的错误。
21.5.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()¶ Returns a tuple
(nchannels, sampwidth, framerate, nframes, comptype, compname), equivalent to output of theget*()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。
