Pyttsx 未在 windows 10 上显示已安装的语言

Pyttsx isn’t showing installed languages on windows 10

我正在尝试使用 pyttsx3 说法语文本。但是,只有英语可用。

遵循 How to change the voice in pyttsx3?, I tried to install the French speech pack as explained here https://support.office.com/en-us/article/how-to-download-text-to-speech-languages-for-windows-10-d5a6b612-b3ae-423f-afa5-4f6caf1ec5d3 的建议。

我重新启动了计算机,现在在 windows 设置的“语音”菜单下安装了法语语音转文本模块。测试按钮有效,我听到法语的测试样本。

我尝试运行下面的代码来查看 pyttsx3 有什么可用:

import pyttsx3 
engine = pyttsx3.init() 
voices = engine.getProperty('voices') 
for voice in voices: 
    print(voice, voice.id) 
    engine.setProperty('voice', voice.id) 
    engine.say("Hello World!") 
    engine.runAndWait() 
    engine.stop() 

然而,我只得到以下输出:

<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> HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0

我错过了什么?

我通过执行此处描述的操作找到了解决方法: https://www.ghacks.net/2018/08/11/unlock-all-windows-10-tts-voices-system-wide-to-get-more-of-them/

以下是我执行的步骤的摘要。假定您已经下载了原问题中的语音包。

  1. 打开 regedit.exe(Windows + R,然后键入 regedit)并导航到注册表项 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens.

  2. 右键单击要使用的语音并选择导出。

  3. 使用文本编辑器(例如 Notepad++)打开导出的文件。

  4. 第二次复制文件中的所有文本,这样所有内容都复制两次(除了第一行 Windows Registry Editor Version 5.00)。

  5. 在数据的第一部分,将\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens替换为HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens(你必须在两个不同的地方这样做)。

  6. 在第二部分(您粘贴在下面的那一部分)中,执行相同的操作,但更改 HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\SPEECH\Voices\Tokens(同样,需要更改两个地方)。

  7. 保存文件,关闭它,然后双击它。接受注册表修改。

  8. 重新启动计算机。

现在导出的语音可用于 pyttsx3!

不直接使用注册表的更简单方法是使用 Window Powershell(运行 作为管理员)来做与 Silver Duck 的答案相同的事情。将以下代码复制并粘贴到 Powershell 中:

$sourcePath = 'HKLM:\software\Microsoft\Speech_OneCore\Voices\Tokens' #Where the OneCore voices live
$destinationPath = 'HKLM:\SOFTWARE\Microsoft\Speech\Voices\Tokens' #For 64-bit apps
$destinationPath2 = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\SPEECH\Voices\Tokens' #For 32-bit apps
cd $destinationPath
$listVoices = Get-ChildItem $sourcePath
foreach($voice in $listVoices)
{
$source = $voice.PSPath #Get the path of this voices key
copy -Path $source -Destination $destinationPath -Recurse
copy -Path $source -Destination $destinationPath2 -Recurse
}

参考文献: