pyttsx3俄语Windows系统下英文播报时数字读俄语如何调整为英文
问题根因
你的Windows系统默认TTS语音为俄语,pyttsx3默认调用系统默认语音的文本解析规则,英文文本中的数字会被俄语语音引擎自动转为俄语读法输出。
pyttsx3 内置解决方案
方案1:切换为英文TTS语音
首先确认你的Windows系统已安装英文语音包(可在「设置-时间和语言-语音-添加语音」中安装英文(美国/英国)语音),之后通过以下代码切换播报语音为英文:
import pyttsx3 engine = pyttsx3.init() # 获取所有可用语音 voices = engine.getProperty('voices') # 遍历找到英文语音,替换下方索引为你对应英文语音的索引 for idx, voice in enumerate(voices): # 打印语音信息,找到name或languages包含English的条目 print(idx, voice.name, voice.languages) # 示例:如果英文语音索引为1,执行以下代码设置 engine.setProperty('voice', voices[1].id) # 后续播报逻辑不变 cake = "honey cake" v = pastry[cake] engine.say(f'The cake {cake} {v[2]} grams left') engine.runAndWait()
切换为英文语音后,所有播报内容都会按英文规则解析,数字也会自动读为英文。
方案2:数字转英文文本后播报
如果不想切换整体播报语音,可以先把数字转为英文单词字符串再拼接播报,需要用到num2words库:
- 安装依赖:
pip install num2words - 代码修改示例:
from num2words import num2words # 原有初始化逻辑不变 cake = "honey cake" v = pastry[cake] # 把数字转为英文单词 num_str = num2words(v[2]) engine.say(f'The cake {cake} {num_str} grams left') engine.runAndWait()
这种方法即使使用俄语语音,也会直接朗读英文数字单词,不会触发俄语数字转换逻辑。
替代库方案
如果pyttsx3无法满足需求,可以选择以下本地离线库:
- pyttsx4:pyttsx3的社区维护升级版本,多语音切换逻辑更稳定,API和pyttsx3完全兼容,现有代码几乎无需修改即可迁移
- eSpeak NG + py-espeak-ng:跨平台开源语音引擎,可强制指定发音规则,不依赖Windows系统内置语音
内容的提问来源于stack exchange,提问作者nrameyka
相关产品推荐
相关产品推荐

