如何使用所有可用的声音?

时间:2018-04-02 16:25:48

标签: c# windows-10 speechsynthesizer

我正在使用此命令列出可用语音

private static SpeechSynthesizer sprecher;

...

sprecher = new SpeechSynthesizer();

...

private static List<VoiceInfo> GetInstalledVoices()
{
    var listOfVoiceInfo = from voice
                          in sprecher.GetInstalledVoices()
                          select voice.VoiceInfo;

    return listOfVoiceInfo.ToList<VoiceInfo>();
}

我只有4种不同的声音(Hedda,Hazel,David和Zira),但是Windows本身会显示更多的扬声器。

enter image description here

因此我只得到&#34; -Desktop&#34; -voices。如何通过c#访问其他扬声器?

1 个答案:

答案 0 :(得分:0)

编辑2:OP通过使用导出而不是命令行复制来使其工作

  

将计算机\ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech_OneCore \ Voices的整个令牌目录导出到文件。用文件中的HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech \ Voices \ Tokens替换每个HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech_OneCore \ Voices \ Tokens并运行该文件(我删除了之前已有过的声音)。

following thread MSDN用户A.Kelany问一个类似的问题,他只从GetInstalledVoices方法得到两个声音。

他说他能够通过以下方式解决这个问题:

  

通过执行以下操作,我设法让它在测试项目中工作:   我打开注册表,发现有一个节点:   引用:   电脑\ HKEY_LOCAL_MACHINE \ SOFTWARE \微软\语音\声音

     

其中包含应用程序GetInstalledVoices方法中出现的声音

     

还有另一个节点:

     

引用:   的计算机\ HKEY_LOCAL_MACHINE \ SOFTWARE \微软\ Speech_OneCore \音色

     

包含所有声音,包括上述方法中未出现的声音,

     

所以我将其中一个声音从第二个节点复制到第一个节点   它有效!

他还声明,在此更改后,他无法在Any CPU上构建,并且必须将构建类型更改为x64