我正在使用此命令列出可用语音
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本身会显示更多的扬声器。
因此我只得到&#34; -Desktop&#34; -voices。如何通过c#访问其他扬声器?
答案 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