首页 > 解决方案 > SpeechSynthesizer 无法获取所有已安装的声音 3

问题描述

我在区域和语言下使用“添加语言”添加了许多声音。这些出现在语音中的文本到语音下。(我使用的是 Windows 10)

我想在我的应用程序中SpeechSynthesizerSystem.Speech.Synthesis.

在我的应用程序中列出可用的声音时,只显示了少数实际可用的声音:

static void Main()
{
    SpeechSynthesizer speech = new SpeechSynthesizer();

    ReadOnlyCollection<InstalledVoice> voices = speech.GetInstalledVoices();
    if (File.Exists("available_voices.txt"))
    {
        File.WriteAllText("available_voices.txt", string.Empty);
    }
    using (StreamWriter sw = File.AppendText("available_voices.txt"))
    {
        foreach (InstalledVoice voice in voices)
        {                 
            sw.WriteLine(voice.VoiceInfo.Name);                           
        }
    }
}

available_voices.txt列出以下声音:

Microsoft David Desktop
Microsoft Hazel Desktop
Microsoft Zira Desktop
Microsoft Irina Desktop

但是在设置中的文本到语音下查看还有更多,比如Microsoft GeorgeMicrosoft Mark

这里接受的答案: SpeechSynthesizer 没有得到所有已安装的声音 ,建议将平台更改为 x86。我试过这个,但我没有看到任何变化。

这个答案: SpeechSynthesizer 没有得到所有已安装的声音 2 建议使用 .NET v4.5,因为 .NET 中的一个错误System.Speech.Synthesis。我的目标是 .NET Framework 4.5,但我仍然只能检索 4 个声音。

我链接的问题中的答案都没有帮助我解决我的问题,所以我再次问。任何帮助都将不胜感激。

标签: c#.netvisual-studio-2017windows-10text-to-speech

解决方案


在尝试了所有已发布的解决方案后,我通过编辑注册表解决了这个问题:
复制Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Speech_OneCore\Voices\Tokens\MSTTS_V110_heIL_AsafMSTTS_V110_heIL_Asaf我想在 .NET 中使用的语音的注册表文件夹在哪里,但不会出现在 .NET 中GetInstalledVoices())到一个看起来相同但相反的注册表地址它Speech_OneCore只是。Speech

从技术上讲,要复制注册表文件夹,我导出了原始文件夹,然后编辑 .reg 文件以更改Speech OneCoreSpeech,然后应用该新的 .reg 文件。


推荐阅读