21.5. wave — 读写 WAV 文件 — Python 文档
来自菜鸟教程
Python/docs/2.7/library/wave
21.5. 海浪 — 读写WAV文件
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。