任务
使用SAPI做文本到语音的转换
准备
pip install pywin32
或者手动安装,网址:https://sourceforge.net/projects/pywin32/files/
安装文件之后切换到文件目录下,离线安装即可。
示例代码
win32com.client是系统的客户端包,win32.com用法详见:网址
# 利用pywin32模块,来实现微软的语音接口调用
import win32com.client
# 微软这个服务器
speaker = win32com.client.Dispatch("SAPI.SpVoice")
speaker.Speak("大家好")
# 释放对象内存
del speaker
运行之后即可听到生硬的问候语“大家好”,而且如果换成其他长难句式,语速又是不可控的。
蜂鸣器
import win32com.client
import winsound
speak = win32com.client.Dispatch('SAPI.SPVOICE')
winsound.Beep(2015, 1000) #第二个参数是500毫秒
音模块:winsound提供了可以由Windows平台提供的基本声音播放。
winsound.Beep(frequency, duration)用法:
-
第一个参数是频率,频率越大,音调越尖,频率必须是大于37、小于32767的正整数,可以是变化的值
-
第二个数字是声音持续时间,单位是毫秒。
-
如果系统无法使扬声器发出哔声,则会引发RuntimeError。
# 播放一段音调高低起伏的Beep:
import winsound,math
for i in range(100):
winsound.Beep(int(600*math.cos(i/3.14)+700),100)
也可以播放音频,如mp3或者wav格式的音频文件。
from playsound import playsound
playsound(r'C:\Users\Administrator\PycharmProjects\voice_detect\a.mp3')
运行出错,报错:
我们尝试用其他方法实现音频播放。
import pygame,sys
# 初始化pygame和内置播放器
pygame.init()
pygame.mixer.init()
# 创建pygame界面
screen = pygame.display.set_mode([500,365])
m = 'C:\\Users\\Administrator\\PycharmProjects\\voice_detect\\a.mp3'
# 加载音乐
pygame.mixer.music.load(m)
# 播放音乐
pygame.mixer.music.play()
# 关闭音乐,只要关闭shell
-
winsound.MessageBeep([type=MB_OK])
从操作系统平台API调用底层MessageBeep()函数。 这会播放注册表中指定的声音。 type参数指定要播放的声音; 可能的值为-1,MB_ICONASTERISK,MB_ICONEXCLAMATION,MB_ICONHAND,MB_ICONQUESTION和MB_OK,如下所述。 值-1产生“简单的哔声”; 如果声音不能播放,这是最后的回退。 -
winsound.SND_ALIAS与winsound.PlaySound一起使用
如果注册表没有包含这样的名称,播放系统缺省的声音,如果没有缺省的声音被注册,挂起 RuntimeError。 -
winsound.SND_LOOP
重复地播放声音。SND_ASYNC标识也必须被用来避免堵塞。不能用 SND_MEMORY。 -
winsound.MB_ICONEXCLAMATION
播放 SystemExclamation 声音。
import winsound
winsound.PlaySound("SystemExit", winsound.SND_ALIAS)
winsound.PlaySound("SystemAsterisk", winsound.SND_ALIAS)
winsound.MessageBeep(winsound.MB_ICONEXCLAMATION)
反馈的声音是PC系统自带的声音“梆~~梆”。