7

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

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 本身显示了更多的扬声器。

在此处输入图像描述

因此我只得到“-Desktop”-声音。如何通过 c# 访问其他扬声器?

4

1 回答 1

4

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

将 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices 的整个 Token Directory 导出到文件。将文件中的每个 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens 替换为 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens 并运行文件(我删除了之前已经拥有的声音)。

下面的线程中,一位 MSDN 用户 A.Kelany 提出了一个类似的问题,他从该GetInstalledVoices方法中只得到了两种声音。

他说他可以通过执行以下操作来解决此问题:

通过执行以下操作,我设法让它在测试项目中工作:我打开注册表并注意到有一个节点:引用: Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices

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

还有另一个节点:

引用: 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices

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

因此,我将其中一个声音从第二个节点复制到了第一个节点,并且成功了!

Any CPU他还表示,在此更改后他无法继续构建,必须将构建类型更改为x64

于 2018-04-02T17:20:13.933 回答