Skip to content

你的代码本身没有问题。问题在于 Windows 的 SAPI(SAPI.SpVoice)只能看到“Desktop voice”类型的语音。 即使系统里安装了 Yaoyao 和 Kangkang,它们很多时候属于 OneCore / Mobile TTS,而不是 Desktop SAPI voice,所以 win32com.client.Dispatch("SAPI.SpVoice") 列不出来。

你现在看到的:

0: Microsoft Huihui Desktop - Chinese (Simplified)
1: Microsoft Zira Desktop - English (United States)

说明 当前 SAPI Desktop 只注册了这两个语音


为什么 Yaoyao / Kangkang 看不到

Windows 10/11 里有 两套语音系统

1️⃣ Desktop SAPI voices(旧接口)

  • SAPI.SpVoice
  • 常见:

  • Microsoft Huihui

  • Microsoft Zira

2️⃣ OneCore voices(新接口)

  • 给 UWP / Edge / Narrator 用
  • 常见:

  • Microsoft Yaoyao

  • Microsoft Kangkang
  • Microsoft Xiaoxiao

你的 Python 用的是 第一种接口


解决方法(最常用)

OneCore voice 注册到 Desktop SAPI

步骤

1️⃣ 打开注册表

regedit

2️⃣ 找到 OneCore voices

HKEY_LOCAL_MACHINE
SOFTWARE
Microsoft
Speech_OneCore
Voices
Tokens

里面会有类似:

MSTTS_V110_zhCN_Yaoyao
MSTTS_V110_zhCN_Kangkang

3️⃣ 复制到 Desktop 语音位置

复制到:

HKEY_LOCAL_MACHINE
SOFTWARE
Microsoft
Speech
Voices
Tokens

自动复制(推荐)

用管理员 PowerShell:

reg copy "HKLM\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens\MSTTS_V110_zhCN_Yaoyao" "HKLM\SOFTWARE\Microsoft\Speech\Voices\Tokens\MSTTS_V110_zhCN_Yaoyao" /s /f

reg copy "HKLM\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens\MSTTS_V110_zhCN_KangkangM" "HKLM\SOFTWARE\Microsoft\Speech\Voices\Tokens\MSTTS_V110_zhCN_KangkangM" /s /f

然后重新运行 Python

for i, voice in enumerate(speaker.GetVoices()):
    print(i, voice.GetDescription())

应该会看到类似:

0 Microsoft Huihui Desktop - Chinese (Simplified)
1 Microsoft Zira Desktop - English (United States)
2 Microsoft Yaoyao - Chinese (Simplified)
3 Microsoft Kangkang - Chinese (Simplified)

然后就可以用

speaker.Voice = speaker.GetVoices().Item(2)
speaker.Speak("你好,这是 Yaoyao 语音")

💡 额外建议(更好的 TTS)

如果你是在做 Python TTS项目,其实更推荐:

  • Edge TTS(微软神经语音)
  • Coqui TTS
  • Piper TTS

声音质量会比 SAPI.SpVoice 高很多。


如果你愿意,我可以顺便给你一份 Python 自动检测并启用 Yaoyao / Kangkang 的完整脚本(不用手动改注册表)。 效果会比现在的代码更强。

☁️ 部署建议
如果你打算长期运行项目(博客 / API / 自动化脚本),建议直接用云服务器,会比本地稳定很多。
👉 查看云服务器(新用户优惠)