Python sndhdr:音频类型检测接口
sndhdr 模块用于识别语音文件的格式。调用 sndhdr 模块的 what() 方法来执行识别语音文件的功能,语法格式如下:
下面的示例是创建一个按钮来打开语音文件,并显示该语音文件的取样格式。
图1:程序运行结果
info = sndhdr.what(filename)
filename 是语音文件的名称。返回值 info 是一个元组,格式如下:(type, sampling_rate, channels, frames, bits_per_sample)
元组中每个值的含义如下所示:- type 是语音文件的格式,可以是 aifc、aiff、au、hcom、sndr、sndt、voc、wav、8svx、sb、ub 或 ul。
- sampling_rate 是每一秒内的取样数目,如果无法译码,就为 0。
- channels 是声道数目,如果无法译码,就为 0。
- frames 是帧的数目,每一帧由每一个声道和一个取样组成。如果无法译码,就为 -1。
- bits_per_sample 可以是取样大小,以位为单位。或是 A,表示 A-LAW,或是 U,表示 U-LAW
下面的示例是创建一个按钮来打开语音文件,并显示该语音文件的取样格式。
#使用 sndhdr 模块 from tkinter import * import tkinter. filedialog, sndhdr #创建应用程序的类 class App: def __init__ (self, master) : #创建一个Label控件 self. label = Label (master, text="语音文件: ") self.label.pack() #创建一个Button控件 self.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" + "Type: "+ info[0] + "\n"+"Sampling rate:"+ str(info[1]) + "\n"+ \ "Channels: " + str(info[2]) + "\n"+ "Frames: "+ str (info[3]) + "\n" + "Bits per sample: " + str (info[4]) self.label.config(text = txt) #创建主窗口 win = Tk() win.title(string = "处理声音") #创建应用程序类的实例变量 app = App(win) #开始程序循环 win . mainloop保存并运行程序 demo.py,结果如图 1 所示,单击“打开语音文件”按钮,在打开的对话框中选择 wav 格式的文件,即可查看文件的信息。
图1:程序运行结果