【问题标题】:Pyttsx isn’t showing installed languages on windows 10Pyttsx 未在 Windows 10 上显示已安装的语言
【发布时间】:2019-06-24 06:26:14
【问题描述】:

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

按照How to change the voice in pyttsx3? 的建议,我尝试按照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

我错过了什么?

【问题讨论】:

    标签: python windows-10 speech-to-text pyttsx


    【解决方案1】:

    我通过执行那里描述的操作找到了解决方法: 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!

    【讨论】:

      【解决方案2】:

      不直接使用注册表的更简单方法是使用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
      }
      

      参考资料:

      【讨论】:

        猜你喜欢
        • 2020-01-31
        • 1970-01-01
        • 1970-01-01
        • 2020-01-15
        • 2021-12-23
        • 2022-08-23
        • 1970-01-01
        • 2020-11-21
        相关资源
        最近更新 更多