简明介绍
pyttsx3是一个用于文本转语音(Text To Speech,TTS)的Python库,可以方便地进行文本到语音的转换,实现计算机的语音输出功能。与其他库不同,它可以离线工作(不依赖于网络连接),并且与 Python 2 和 3 兼容。支持多种 TTS 引擎,包括 sapi5、nsss 和 espeak。pyttsx3可用于任何需要语音合成(Speech Synthesis)的应用场景,包括:
- 语音助手:将文本转换为语音,用于回答用户的问题、提醒日程等。
- 语音导航:将导航信息转换为语音,引导用户前往目的地。
- 语音播报:将消息转换为语音,用于播报新闻、天气预报等。
- 教学辅助:将教材内容转换为语音,用于听写单词、朗读古诗等。
- 可访问性:帮助视觉障碍人群更好地获取信息。
环境安装
$ pip install pyttsx3
$ pip install pypiwin32
应用示例
import sys
try:
import pyttsx3
except ImportError:
print('The pyttsx3 module needs to be installed to run this program.')
print('On Windows, open a Command Prompt and run: pip install pyttsx3')
print('On macOS and Linux, open a Terminal and run: pip3 install pyttsx3')
sys.exit()
def getIntegerInput(prompt):
value = 0
text = input(prompt)
if text.isdigit():
value = int(text)
return value
# 创建语音引擎对象:根据操作系统自动选择语音驱动
engine = pyttsx3.init()
# 改变语速,默认为每分钟200个字
rate = engine.getProperty('rate')
engine.setProperty('rate', rate+10)
# 改变音量:默认为1.0(min=0 and max=1)
volume = engine.getProperty('volume')
engine.setProperty('volume', volume-0.25)
# 改变声音
voices = engine.getProperty('voices')
for voice in voices:
# print(voice)
print("Voice:")
print(" - ID: %s" % voice.id)
print(" - Name: %s" % voice.name)
print(" - Languages: %s" % voice.languages)
print(" - Gender: %s" % voice.gender)
print(" - Age: %s" % voice.age)
index = getIntegerInput('Enter voice index> ')
if index >= len(voices):
index = len(voices) - 1
print("use voice: %s" % voices[index].id)
engine.setProperty('voice', voices[index].id)
#
counter = getIntegerInput('Enter counter> ')
print("use counter %d" % counter)
def speakText(text):
print(text)
# 语音播报
engine.say(text)
# 等待语音播报完毕
engine.runAndWait()
#
speakText("任务开始")
if counter > 0:
for i in range(1, counter+1):
speakText(str(i))
else:
poem = '''春眠不觉晓
处处闻啼鸟
夜来风雨声
花落知多少'''
speakText(poem)
#
speakText("任务结束")
# 停止播报并清除命令队列
engine.stop()
说明1:测试机器上只有两个语音包,Huihui(中文,即中文和英文均可转语音)和Zira(英文,只能在英文的时候可转语音)。
Voice:
- ID: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_ZH-CN_HUIHUI_11.0
- Name: Microsoft Huihui Desktop - Chinese (Simplified)
- Languages: []
- Gender: None
- Age: None
Voice:
- ID: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0
- Name: Microsoft Zira Desktop - English (United States)
- Languages: []
- Gender: None
- Age: None
说明2:Huihui和Zira两个语音包都是女声,如果希望指定男声,通过执行注册表调整在Windows 10/11上解锁额外的文本到语音语音。
按Win+R快捷键调用“运行”对话框,输入"regedit"打开注册表编辑器,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices路径下可以看到默认语音包,右键HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens\MSTTS_V110_zhCN_KangkangM,从上下文菜单中选择“导出”,使用文本编辑器打开导出的.reg文件将其中"Speech Server"全部替换成"Speech"并保存,双击.reg文件将其合并到注册表中。将HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\MSTTS_V110_zhCN_KangkangM的VoicePath改为%windir%\Speech_OneCore\Engines\TTS\zh-CN\M2052Kangkang。
参考资料
nateshmbhat/pyttsx3: Offline Text To Speech synthesis for python
Microsoft Speech SDK 使用过程中女声改为男声遇到的问题
《Python编程快速上手2:趣味小项目轻松学》