首先我们需要知道我们自己的系统里自带什么语音包,然后才能从这些自带的语音包里选出一个来用:
# 这段代码会把系统里的可用语音包的信息print出来
import pyttsx3
engine = pyttsx3.init()
voices = engine.getProperty('voices')
for voice in voices:
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)
上面这段代码会把系统里的可用语音包的信息print出来,具体输出结果是什么应该是因人而异,我的运行结果是:
Voice:
- ID: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_DAVID_11.0
- Name: Microsoft David Desktop - English (United States)
- 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
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
然后我们选择一个语音包,把他的ID作为engine.setProperty()函数的参数:
# 把刚才代码输出的语音包ID信息储存起来
zh_voice_id = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_ZH-CN_HUIHUI_11.0"
# 用语音包ID来配置engine
engine.setProperty('voice', zh_voice_id)
engine.say('这回可以了吧')
engine.runAndWait()
参考:https://www.devdungeon.com/content/text-speech-python-pyttsx3#change_voice_language
全部信息和帮助来自于以上参考链接。
PS:本文已经在CSDN社区发过帖子,但是我自己从app上没看到,所以为了自己查看方便,再发在这里,也希望能帮助更多人。