一、winsound 模块
winsound模块提供Windows操作系统的语言播放接口。
PlaySound() 函数可以播放.wav语言文件。
语法格式:PlaySound(sound , flags)
sound可以是wave文件名称、字符串类型的语言数据或None
flags是语言变量的参数
| flags参数 | 说明 |
|---|---|
| SND_FILENAME | 表示一个wav文件名 |
| SND_ALIAS | 表示一个注册表指定的别名 |
| SND_LOOP | 重复播放语言,必须与SND_ASYNC共同使用 |
| SND_MEMORY | 表示wave文件的内存图像(memory image) 是一个字符串 |
| SND_PURGE | 停止所有播放的语言 |
| SND_ASYNC | PlaySound()函数立即返回,语言在背景播放 |
| SND_NOSTOP | 不会中断目前播放的语音 |
| SND_NOWAIT | 若语言驱动程序忙碌,则立即返回 |
from tkinter import *import tkinter.filedialog,winsound##创建主窗口win = Tk()win.title(string = "处理声音")##打开一个[打开旧文件]对话框def openSoundFile():##返回打开的语言文件名infile = myDialog.show()label.config(text = "语音文件" + infile)return infile##播放语言文件def playSoundFile():infile = openSoundFile()##重复播放flags =winsound.SND_FILENAME | winsound.SND_LOOP | winsound.SND_ASYNCwinsound.PlaySound(infile,flags)##停止播放def stopSoundFile():winsound.PlaySound("*",winsound.SND_PURGE)##labellabel = Label(win,text = "声音文件")label.pack(anchor = W)Button(win,text = "播放声音",command = playSoundFile).pack(side = LEFT)Button(win,text = "停止播放",command =stopSoundFile).pack(side = LEFT)##设置对话框打开的文件类型myFileTypes = [('WAVE format','*.wav')]##创建你一个[打开旧文件]对话框myDialog = tkinter.filedialog.Open(win,filetypes=myFileTypes)##开始窗口的事件循环win.mainloop()

打开之后,就会音乐就会播放,点击停止播放之后,文件就会停止播放
二、sndhdr 模块
sndhdr模块用于识别语言文件的格式。调用what()方法来执行识别语言文件的功能。
语法格式:info = sndhar.what(filename)
filename是语言文件的名称
返回值info是一个元组,格式:(type ,sampling_rate,channels,frames,bits_per_smple)
| 参数 | 说明 |
|---|---|
| type | type是语言文件的格式 aifc、aiff、au、hcom、sndr、sndt、voc、wav、8svx、sb、ub或ul |
| sampling_rate | 是每一秒内的取样数据,如果无法译码,就为0 |
| channels | 是声道数目,如果无法译码,就为0 |
| frames | 是帧的数目,每一帧由每一个声道和一个取样组成。 如果无法译码,就为0 |
| bits_per_smple | 可以是取样大小,以位为单位。或是A,表示A-LAW,或是U,表示U-LAW |
from tkinter import *import tkinter.filedialog,sndhdr##创建应用程序的类class App:def __init__(self,master):##创建一个Label控件self.label = Label(master,text="语言文件:")self.label.pack()##创建一个buttonself.Button = Button(master,text="打开语言文件",command = self.openSoundFile)self.Button.pack(side = LEFT)##设置对话框打开的文件类型self.myFileTypes = [('WAVE format','*.wav')]##创建一个[打开旧文件]对话框self.myDialog = tkinter.filedialog.Open(master,filetypes=self.myFileTypes)##打开语言文件def openSoundFile(self):##返回打开的语言文件名infile = self.myDialog.show()##显示该语言文件的格式self.getSoundHeader(infile)def getSoundHeader(self,infile):##读取语言文件的格式info = sndhdr.what(infile)txt = '语言文件:'+infile + '\n'+ "Types: "+info[0]+'\n'+"Sampling rate: "+str(info[1])+'\n'+"Channels: "+str(info[2])+'\n'+"Frames: "+str(info[3])+'\n'+"Bit per sample:"+str(info[4])self.label.config(text = txt)##创建主窗口win = Tk()win.title(string = "处理声音")##创建应用程序类的实例变量app = App(win)##开始事件的窗口循环win.mainloop()
三、wave模块
wave模块让用户读写、分析及创建WAVE(.wav) 文件。
使用wave模块的open() 方法可以打开旧文件或创建新文件
open(file [,mode ])
file是WAVE文件名称
mode可以是r或rb,表示只读模式,返回一个Wave_read对象,可以是w或wb模式,表示只写模式,返回一个Wave_write对象
Wave_read对象的方法列表
| 方法 | 说明 |
|---|---|
| getnchannels() | 返回声道数目。1是单声道,2是双声道 |
| getsampwidth() | 返回样本宽度,单位是字节 |
| getframerate() | 返回取样频率 |
| getframes() | 返回帧的数目 |
| getcomptype() | 返回压缩类型。返回None表示线性样本 |
| getcompname() | 返回可读的压缩类型 |
| getparams() | 返回一个元组 (nchannels,sampwidth,framerate,nframes,comptype,compname) |
| getmarkers() | 返回None,此方法用来与aifc模块兼容 |
| getmark(id) | 抛出一个例外,因为此mark不存在,此方法用来与arfc模块兼容 |
| readframes(n) | 返回n个帧的语言数据 |
| rewind() | 倒转至语言串流的开头 |
| setpos(pos) | 移到pos位置 |
| tell() | 返回当前的位置 |
| close() | 关闭语言串流 |
Wave_write对象的方法列表
| 方法 | 说明 |
|---|---|
| setnchannels() | 设置声道的数目 |
| setsampwidth(n) | 设置样本宽度 |
| setframerate(n) | 设置取样频率 |
| setnframes(n) | 设置帧的数目 |
| setcomptype(type,name) | 设置压缩类型与可读的压缩类型 |
| setparams() | 设置一个元组 (nchannels,sampwidth,framerate,nframes,comptype,compname) |
| tell() | 返回目前的位置 |
| writeframesraw(data) | 写入语音帧,但是没有文件表头 |
| writefrmaes(data) | 写入语音帧及文件表头 |
| close() | 写入文件表头,并且关闭语音串流 |
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 = "语音文件:"+str(audio.getnchannels())+"\n"+\"Channels:"+str(audio.getsampwidth())+"\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="处理声音")##创建应用程序类的实例变量app = App(win)##开始事件的循环win.mainloop()
四、aifc模块
aifc(Audio Interchange File Format)模块用于存取AIFF与AIFC格式的语音文件。
创建一个新的AIFC语音文件
import aifc##创建一个新的语音文件stream = aifc.open(r"E:\\pythonstduy\\yuying\\test.aifc", "w")##声道数为2stream.setnchannels(2)##样本宽度为2stream.setsampwidth(2)##每一秒22050个帧stream.setframerate(22050)##写入表头以及语音串流stream.writeframes(b'143457891315564'*2000)##关闭文件stream.close()



