Windows系统下pyttsx3初始化报unknown voice id错误的求助
故障核心根因
你遇到的报错本质不是缺少语音组件,是pyttsx3 旧版本SAPI5驱动的路径兼容bug:
- 驱动初始化阶段会自动读取系统当前设置的默认语音的注册表token
- 2.71等老旧版本pyttsx3的
_tokenFromId校验逻辑硬编码只识别HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens路径下的语音项 - Win10 1809版本之后系统新增的内置语音,全部存在
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens路径下 - 驱动拿到这个OneCore路径下的token(也就是你报错日志里的
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens\MSTTS_V110_enGB_GeorgeM)时,完全不匹配校验规则,直接抛出unknown voice id错误。
你之前尝试的修改注册表补旧路径语音条目、降级Python版本、换旧版pyttsx3的操作,都没有改动驱动本身的校验逻辑,所以根本解决不了问题。
可直接落地的修复步骤
- 最稳妥的永久修复:直接替换本地虚拟环境里的
sapi5.py驱动文件为pyttsx3最新版的对应实现,新版代码已经补齐了对OneCore路径语音token的识别逻辑,替换后不需要改任何注册表配置,你原来写的测试代码即可正常运行。 - 快速临时绕过方案:
- 打开「控制面板-语音识别-高级语音选项」
- 在「文本到语音」配置页,把默认语音切换到传统Speech路径下的已安装语音(如系统自带的Microsoft Huihui)
- 重启PyCharm后重新运行代码,让驱动初始化时读取不到OneCore路径的token值,即可跳过校验报错。
- 之前操作无效的原因说明:你之前手动往旧Speech路径下新增MSGeorge、MSMike的注册表空键值没有作用,因为这些语音的实际安装路径就在OneCore目录下,没有绑定实际语音组件的空注册表键值根本不会被系统识别,驱动校验时依然会报错。
注:你之前检索不到同类问题,是因为Win10后续版本逐渐把所有内置语音迁移到OneCore路径后,很多用户没有关联到pyttsx3旧驱动的校验bug,大多误以为是自己缺语音组件配置。
内容的提问来源于stack exchange,提问作者Silent_storm
相关产品推荐
相关产品推荐

