21.5. wave — 读写 WAV 文件 — Python 文档

来自菜鸟教程
Python/docs/2.7/library/wave
跳转至:导航、​搜索

21.5. 海浪 — 读写WAV文件

源代码: :source:`Lib/wave.py`



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

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

wave.open(file[, mode])

如果 file 是字符串,则按该名称打开文件,否则将其视为可查找的类文件对象。 mode 可以是

'r''rb'

只读模式。

'w''wb'

只写模式。

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

'r''rb'mode 返回 Wave_read 对象,而 'w'mode 或 [ X108X] 返回一个 Wave_write 对象。 如果省略 mode 并且文件类对象作为 file 传递,则 file.mode 用作 mode 的默认值([如有必要,仍会添加 X145X] 标志)。

如果传入一个类文件对象,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()
返回一个元组 (nchannels, sampwidth, framerate, nframes, comptype, compname),相当于 get*() 方法的输出。
Wave_read.readframes(n)
读取并返回至多 n 帧音频,作为字节字符串。
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()
确保 nframes 正确,如果文件被 wave 打开,请关闭该文件。 此方法在对象集合时调用。
Wave_write.setnchannels(n)
设置通道数。
Wave_write.setsampwidth(n)
将样本宽度设置为 n 字节。
Wave_write.setframerate(n)
将帧速率设置为 n
Wave_write.setnframes(n)
将帧数设置为 n。 如果写入更多帧,这将在稍后更改。
Wave_write.setcomptype(type, name)
设置压缩类型和描述。 目前只支持压缩类型NONE,即不压缩。
Wave_write.setparams(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)
写入音频帧并确保 nframes 正确。

请注意,调用writeframes()writeframesraw()后设置任何参数都是无效的,任何尝试这样做都会引发wave.Error