Python wave模块:处理WAVE音频文件
wave 模块让用户读写、分析及创建 WAVE(.wav)文件。可以使用 wave 模块的 open() 方法打开旧文件或创建新文件。其语法格式如下:

图1:程序运行结果
下面的示例是使用 aifc 模块创建一个新的 AIFC 语音文件。
声明:《Python系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
open(file [, mode])
其中,file 是 WAVE 文件名称;mode 可以是 r 或 rb,表示只读模式,返回一个 Wave_read 对象;也可以是 w 或 wb,表示只写模式,返回一个 Wave_write 对象。1. 只读模式Wave_read对象方法
下表 1 是 Wave_read 对象的方法列表:方法 | 说明 |
---|---|
getnchannels() | 返回声道数目。1是单声道,2是双声道 |
getsampwidth() | 返回样本字节宽度,单位是字节 |
getframerate() | 返回取样频率. |
getnframes() | 返回帧的数目 |
getcomptype() | 返回压缩类型。返回None表示线性样本 |
getcompname() | 返回可读的压缩类型 |
getparams() | 返回-一个元组: (nchannels, sampwidth, framerate, nframes, comptype, compname) |
getmarkers() | 返回None。 此方法用来与aifc模块兼容 |
getmark(id) | 抛出一个异常,因为此mark不存在。此方法用来与aifc模块兼容 |
readframes(n) | 返回n个帧的语音数据 |
rewind() | 倒转至语音串流的开头 |
setpos(pos) | 移到pos位置 |
tell() | 返回目前的位置 |
close() | 关闭语音串流 |
2. 只写模式WAVE_write对象方法
下表 2 是Wave_write对象的方法列表:方法 | 说明 |
---|---|
setnchannels() | 设置声道的数目 |
setsampwidth(n) | 设置样本宽度 |
setframerate(n) | 设置取样频率 |
setnframes(n) | 设置帧的数目 |
setcomptype(type, name) | 设置压缩类型与可读的压缩类型 |
setparams() | 设置一 个元组: (nchannels, sampwidth, framerate, nframes, comptype, compname ) |
tell() | 返回目前的位置 |
writeframesraw( data) | 写入语音帧,但是没有文件表头 |
writeframes( data) | 写入语音帧及文件表头 |
close() | 写入文件表头,并且关闭语音串流 |
3. wave模块实例应用
下面的示例是创建一个按钮来打开语音文件,并显示该语音文件的格式。
#使用wave模块 from tkinter import * import tkinter. filedialog, wave #创建应用程序的类 class App: def __init__ (self, master) : #创建一个Label控件 self. label = Label (master, text="语音文件: ") self. label .pack (anchor=W) #创建一个Button控件 self .button = Button (master, text="打开语音文件", command=self.openSoundFile) self. button. pack (anchor=CENTER) #设置对话框打开的文件类型 self.myFileTypes = [ ('WAVE format', '*.wav') ] #创建一个[打开旧文件]对话框 self .myDialog = tkinter.filedialog.open(master, filetypes=self .myFileTypes) #打开语音文件 def openSoundFile(self) : #返回打开的语音文件名 infile = self.myDialog.show () #显示该语音文件的格式 self.getWaveFormat(infile) def getwaveFormat (self, infile): #读取语音文件的格式 audio = wave.open (infile, "r") txt = "语音文件: " + infile + "\n"+ "Channels: " + str (audio. getnchannels()) + "\n"+ \ "Sample width: " + str (audio. getsampwidth()) + "\n"+ "Frame rate: " + str (audio. getframerate()) + "\n" + \ "Compression type: " + str (audio. getcomptype()) + "\n"+ "Compression name: " + str (audio. getcompname () ) self. label . config(text = txt) #创建主窗口 win = Tk() win. title(string = "处理声音") #创建应用程序类的实例变量 app1= App(win) #开始程序循环 win.mainloop ()保存并运行程序 1.py,结果如图 1 所示,单击“打开语音文件”按钮,在打开的对话框中选择wav格式的文件,即可查看文件的信息。

图1:程序运行结果
4. aifc模块介绍
aifc(Audio Interchange File Format)模块用于存取 AIFF 与 AIFC 格式的语音文件。aifc 模块的函数与 wave 模块的函数大致相同。下面的示例是使用 aifc 模块创建一个新的 AIFC 语音文件。
import aifc #创建-一个新语音文件 stream = aifc. open ("D: \\test.aifc", "w") #声道数为2 stream. setnchannels (2) #样本宽度为2 stream. setsampwidth (2) #每一秒22050个帧 stream. setframerate (22050) #写入表头以及语音串流 stream. writeframes (b"1 43456787654321",20000) #关闭文件 stream. close ()
声明:《Python系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。