You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改语音注册表后pyttsx3获取语音描述报COMError求助

解决pyttsx3获取语音描述时的COMError问题

核心原因

修改语音相关注册表后,Windows SAPI5的语音条目出现损坏,导致pyttsx3调用GetDescription()时触发COM错误。重装模块仅能修复Python包层面问题,无法解决系统注册表的损坏。

修复步骤

1. 恢复语音注册表默认设置

  • 按下Win + R,输入regedit打开注册表编辑器
  • 定位路径:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens
  • 右键点击Tokens项,选择导出备份当前设置(防止误操作)
  • 删除Tokens下所有自定义添加的子项;若修改了原有系统语音项,建议直接删除Tokens下对应子项后重新安装语音包
  • 关闭注册表编辑器,重启电脑

2. 重新安装系统语音包

  • 打开设置 → 时间和语言 → 语音
  • 在语音语言区域,点击添加语音,选择对应语言的官方语音包完成安装
  • 安装结束后重启系统,再测试pyttsx3

3. 绕过GetDescription()的临时应急修复

如果暂时无法修复注册表,可修改pyttsx3的驱动代码跳过描述获取:

  • 找到文件路径:C:\Users\Compu Tech\AppData\Local\Programs\Python\Python312\Lib\site-packages\pyttsx3\drivers\sapi5.py
  • 打开文件,定位到_toVoice函数(约第77行),修改为:
def _toVoice(self, attr):
    # 跳过GetDescription()调用,用语音ID替代描述
    return Voice(attr.Id, attr.Id)
  • 保存文件后重新运行代码

4. 重置SAPI5语音引擎

  • 按下Win + R,输入cmd打开命令提示符
  • 执行命令:C:\Windows\System32\speech\speechsapi.exe
  • 在弹出的语音属性窗口中,切换到文本到语音选项卡,确认语音列表显示正常,点击应用

验证代码

修复后用以下代码测试功能:

import pyttsx3
engine = pyttsx3.init()
voices = engine.getProperty('voices')
print([voice.id for voice in voices])
engine.say("测试语音功能恢复正常")
engine.runAndWait()

内容的提问来源于stack exchange,提问作者Bodawy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 08:12:43