下面的代码,如果是英文可以读出来,但是如果是中文却没有声音.经过几天的折腾,终于解决了,现分享给大家.
没有声音是因为在你的系统里没有中文安装包的原因
# 这段代码会把系统里的可用语音包的信息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)
结果为
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: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_ZH-CN_HUIHUI_11.0",所以无法读取中文.
【解决办法】:
关于在 Windows 中添加中文语音包,你可以按照以下步骤进行操作:
1、打开控制面板:在 Windows 搜索栏中输入“控制面板”,然后打开控制面板。
2、选择“时钟和区域”:在控制面板中,找到并选择“时钟和区域”选项。
3、进入语言设置:在“时钟和区域”设置页面中,找到“区域”选项,然后点击进入“区域”设置页面。
4、添加语言:在“区域”设置页面中,找到“语言”选项,然后点击“添加一个语言”来添加新的语言。
5、选择中文语言包:在弹出的语言列表中,找到中文语言(简体中文或繁体中文),选中后点击“下一步”继续。
6、完成安装:按照系统提示完成语言包的安装过程。系统会下载并安装相应的中文语音包。
完成以上步骤后,你的系统就会安装并启用中文语音包。这样,在文本转语音等功能中就可以选择中文语音进行使用了。
希望这次回答能够帮助到你。如果有任何其他问题,欢迎随时向我提问。
截图如下
在代码中增加下列代码:
# 读取中文语音包
voices = engine.getProperty('voices')
zh_voice_id=''
for voice in voices:
if 'ZH-CN' in voice.id:
zh_voice_id=voice.id
break
if zh_voice_id=='':
print('没有安装中文语言包')
# 用语音包ID来配置engine
engine.setProperty('voice', zh_voice_id)
完整的代码如下:
# -*- coding: utf-8 -*-
"""
@Time : 2024/3/21 18:40
@Author : 丿君灬臨天丅
@FileName: 使用pyttsx3库来实现文字转语音(TTS)_003.py
@SoftWare: PyCharm
"""
import pyttsx3
engine = pyttsx3.init() # 初始化语音引擎
engine.setProperty('rate', 100) # 设置语速
engine.setProperty('volume', 0.6) # 设置音量
# 读取中文语音包
voices = engine.getProperty('voices')
zh_voice_id=''
for voice in voices:
if 'ZH-CN' in voice.id:
zh_voice_id=voice.id
break
if zh_voice_id=='':print('没有安装中文语言包')
# 用语音包ID来配置engine
engine.setProperty('voice', zh_voice_id)
engine.say("春光灿烂猪八戒")
engine.runAndWait()
engine.stop()
希望有同样问题的,可以完美解决。