Vit*_*mel 5 c# speechsynthesizer windows-10
我正在使用此命令列出可用的声音
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>();
}
Run Code Online (Sandbox Code Playgroud)
我只有4种不同的声音(Hedda,Hazel,David和Zira),但Windows本身显示了更多扬声器。
因此,我仅收到“ -Desktop”语音。如何通过c#访问其他扬声器?
编辑2:OP通过使用导出而不是命令行复制来使其工作
将 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices 的整个令牌目录导出到文件。将文件中的每个 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens 替换为 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens 并运行该文件(我删除了之前已有的语音)。
在以下线程中,MSDN 用户 A.Kelany 提出了类似的问题,他只从GetInstalledVoices方法中得到了两种声音。
他说他可以通过执行以下操作来解决此问题:
我通过执行以下操作设法让它在测试项目中工作:我打开注册表并注意到有一个节点: Quote: Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices
其中包含应用程序 GetInstalledVoices 方法中出现的声音
还有另一个节点:
引用: Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices
包含所有声音,包括上述方法中没有出现的声音,
因此,我将其中一个声音从第二个节点复制到第一个节点,它成功了!
他还表示,在此更改后他无法继续构建Any CPU,必须将构建类型更改为x64