代码之家  ›  专栏  ›  技术社区  ›  Kosmo零

如何获取和使用完整安装的文本到语音语言列表?

  •  0
  • Kosmo零  · 技术社区  · 6 年前

    在Windows10语音合成中确实发生了一些奇怪的事情。

    首先,即使是Windows也会在Metro和经典控制面板中显示不同的安装语言计数。

    Metro应用程序显示5种已安装语言,而经典控制面板仅显示3种。

    我需要使用 微软Pavel 语言,但我的应用程序根本看不到它!

    SpeechSynthesizer ss = new SpeechSynthesizer();
    var installed_voices = ss.GetInstalledVoices();
    
    for (int i = 0; i < installed_voices.Count; i++)
        Console.WriteLine(GetVoiceInfoDesc(installed_voices[i].VoiceInfo));
    
    static string GetVoiceInfoDesc(VoiceInfo vi)
    {
        return vi.AdditionalInfo["Name"] + " (ID = " + vi.AdditionalInfo["Language"] + ", " + vi.AdditionalInfo["Age"] + ", " + vi.AdditionalInfo["Gender"] + ", " + vi.Culture + ")";
    }
    

    上面的代码仅显示3种已安装的语言。

    另外,当我使用

    ss.SelectVoiceByHints(VoiceGender.Male, VoiceAge.Adult, 0, CultureInfo.CreateSpecificCulture("ru-RU"));
    

    我仍然得到 伊琳娜 是女性的声音。

    我测试过 帕维尔 它的声音和它真正安装和说话的东西。

    我使用.NET 4.0 C。 你知道这里发生了什么吗?

    enter image description here

    2 回复  |  直到 6 年前
        1
  •  1
  •   Tagor    6 年前

    我也遇到了同样的问题,尝试了多种解决方案,但都没有奏效。我的要求是不要在Windows10中找到特定的声音,所以我寻找其他资源并找到 this .

    我已经尝试安装其中的一些,并且我的应用程序将它们识别为正在安装,并且它们按预期工作。也许你能找到一些适合你需要的声音。祝你好运!

        2
  •  0
  •   Kosmo零    6 年前

    有些语言由于某种未知的原因而存在的问题只能在Metro应用程序中使用,而且无法看穿 SAPI .

    我们可以通过更改注册表来解决这个问题。

    这是我从Internet某处获取的Windows 10 x64 Pavel语音的修复示例:

    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Speech\Voices\Tokens\MSTTS_V110_ruRU_PavelM]
    @="Microsoft Pavel Mobile - Russian (Russia)"
    "419"="Microsoft Pavel Mobile - Russian (Russia)"
    "CLSID"="{179F3D56-1B0B-42B2-A962-59B7EF59FE1B}"
    "LangDataPath"=hex(2):25,00,77,00,69,00,6e,00,64,00,69,00,72,00,25,00,5c,00,53,\
      00,70,00,65,00,65,00,63,00,68,00,5f,00,4f,00,6e,00,65,00,43,00,6f,00,72,00,\
      65,00,5c,00,45,00,6e,00,67,00,69,00,6e,00,65,00,73,00,5c,00,54,00,54,00,53,\
      00,5c,00,72,00,75,00,2d,00,52,00,55,00,5c,00,4d,00,53,00,54,00,54,00,53,00,\
      4c,00,6f,00,63,00,72,00,75,00,52,00,55,00,2e,00,64,00,61,00,74,00,00,00
    "VoicePath"=hex(2):25,00,77,00,69,00,6e,00,64,00,69,00,72,00,25,00,5c,00,53,00,\
      70,00,65,00,65,00,63,00,68,00,5f,00,4f,00,6e,00,65,00,43,00,6f,00,72,00,65,\
      00,5c,00,45,00,6e,00,67,00,69,00,6e,00,65,00,73,00,5c,00,54,00,54,00,53,00,\
      5c,00,72,00,75,00,2d,00,52,00,55,00,5c,00,4d,00,31,00,30,00,34,00,39,00,50,\
      00,61,00,76,00,65,00,6c,00,00,00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Speech\Voices\Tokens\MSTTS_V110_ruRU_PavelM\Attributes]
    "Age"="Adult"
    "DataVersion"="11.0.2013.1022"
    "Gender"="Male"
    "Language"="419"
    "Name"="Microsoft Pavel Mobile"
    "SharedPronunciation"=""
    "Vendor"="Microsoft"
    "Version"="11.0"
    

    自述说“多亏了诺娜·拉夫鲁基纳”。