c# - SpeechSynthesizer 无法获取所有已安装的声音 3
问题描述
我在区域和语言下使用“添加语言”添加了许多声音。这些出现在语音中的文本到语音下。(我使用的是 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 没有得到所有已安装的声音 ,建议将平台更改为 x86。我试过这个,但我没有看到任何变化。
这个答案:
SpeechSynthesizer 没有得到所有已安装的声音 2
建议使用 .NET v4.5,因为 .NET 中的一个错误System.Speech.Synthesis
。我的目标是 .NET Framework 4.5,但我仍然只能检索 4 个声音。
我链接的问题中的答案都没有帮助我解决我的问题,所以我再次问。任何帮助都将不胜感激。
解决方案
在尝试了所有已发布的解决方案后,我通过编辑注册表解决了这个问题:
复制Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Speech_OneCore\Voices\Tokens\MSTTS_V110_heIL_Asaf
(MSTTS_V110_heIL_Asaf
我想在 .NET 中使用的语音的注册表文件夹在哪里,但不会出现在 .NET 中GetInstalledVoices()
)到一个看起来相同但相反的注册表地址它Speech_OneCore
只是。Speech
从技术上讲,要复制注册表文件夹,我导出了原始文件夹,然后编辑 .reg 文件以更改Speech OneCore
为Speech
,然后应用该新的 .reg 文件。
推荐阅读
- excel - 如何将一列数据变成 8x12 的网格?
- pandas - 需要改进我在某个时间点返回多个 SMA 的函数
- sorting - 谷歌表格 - 数组公式后排序
- javascript - D3 中的 Choropleth 地图现在失败了
- python - 类型错误:load_pem_private_key() 缺少 1 个必需的位置参数:“后端”
- excel - 创建邮件并将焦点设置到此窗口
- html - Bi-directional CSS height animation
- git - 从远程删除未引用的对象
- dart - Intellij Dart Webdev 找不到“devtools0.9.7+1/build”
- twitter - 如何使用 Twitter API 按位置过滤推文