Python 提供了许多处理语音的模块,不仅可以收听 CD,而且可以读/写各种语音文件的格式,如 .wav、.aifc 等。
1. winsound模块介绍
winsound 模块提供 Windows操 作系统的语音播放接口。winsound 模块的 PlaySound() 函数可以播放 .wav 语音文件。PlaySound() 函数的语法如下:
PlaySound(sound, flags)
其中 sound 可以是 wave 文件名称、字符串类型的语音数据或 None;flags 是语音变量的参数,可以取变量值如下:
SND_FILENAME:表示一个 wav 文件名。
SND_ALIAS:表示一个注册表中指定的别名。
SND_LOOP:重复播放语音,必须与SND_ASYNC共同使用。
SND_MEMORY:表示wave文件的内存图像(memory image),是一个字符串。
SND_PURGE:停止所有播放的语音。
SND_ASYNC:PlaySound()函数立即返回,语音在背景播放。
SND_NOSTOP:不会中断目前播放的语音。
SND_NOWAIT:若语音驱动程序忙碌,则立即返回。
2. 实例应用:实现简易播放器
下面的示例是创建两个按钮:一个按钮用来打开语音文件并重复播放;另一个按钮则是停止播放该语音文件。
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_ASYNC
winsound. PlaySound (infile, flags)
#停止播放
def stopSoundFile() :
winsound. PlaySound("*", winsound. SND_PURGE)
label = 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()
保存并运行程序 winsoud_test.py,结果如图 1 所示。单击“播放声音”按钮,在打开的对话框中选择 wav 格式的文件,即可重复播放;单击“停止播放”按钮,即可停止声音播放。
图1:程序运行结果