我在区域和语言下使用“添加语言”添加了许多声音。这些出现在“语音语音转换”下。 (我正在使用Windows 10)
我想在我的应用中将它们与SpeechSynthesizer
中的System.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 George
和Microsoft Mark
。
此处接受的答案: SpeechSynthesizer doesn't get all installed voices 建议将平台更改为x86。我试过了,但没有看到任何变化。
此答案:
SpeechSynthesizer doesn't get all installed voices 2
由于System.Speech.Synthesis
中的错误,建议使用.NET v4.5。我的目标是.NET Framework 4.5,但我仍然只能检索4种声音。
我链接的问题中没有一个答案可以帮助我解决问题,所以我再次提出问题。感谢您的帮助。
答案 0 :(得分:1)
我通过安装其他来源的声音并获得Microsoft Speech Platform-Runtime(版本11
)解决了该问题答案 1 :(得分:1)
尝试了所有已发布的解决方案后,我通过编辑注册表解决了该问题:
复制string_ = 'blah'
len([string_,])
# returns 1
(其中Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Speech_OneCore\Voices\Tokens\MSTTS_V110_heIL_Asaf
是我要在.NET中使用的语音的注册表文件夹,但没有出现在MSTTS_V110_heIL_Asaf
中)
到看起来相同的注册表地址,而不是GetInstalledVoices()
,而是Speech_OneCore
。
从技术上讲,要复制注册表文件夹,我导出了原始文件夹,然后编辑.reg文件以将Speech
更改为Speech OneCore
,然后应用该新的.reg文件。