首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SpeechSynthesizer.SelectVoice()失败,“没有安装匹配的语音或声音被禁用”

SpeechSynthesizer.SelectVoice()失败,“没有安装匹配的语音或声音被禁用”
EN

Stack Overflow用户
提问于 2016-01-13 20:38:54
回答 5查看 7K关注 0票数 2

我正在修改斯科特·汉斯曼BabySmash代码以支持其他语言。

  1. 我为每个这些步骤安装了语音平台和一种新的语言。
  2. 该语言现在显示在注册表中:

  1. 现在,Windows可以选择并播放该语言:

  1. System.Speech.Synthesis.SpeechSynthesizer.GetInstalledVoices()现在返回声音。
  2. 但是,下面代码中的SelectVoice()抛出错误"System.ArgumentException:无法设置语音。没有安装匹配的语音或禁用了语音“
代码语言:javascript
运行
复制
string phrase = null;
SpeechSynthesizer speech = new SpeechSynthesizer();
CultureInfo keyboardCulture = System.Windows.Forms.InputLanguage.CurrentInputLanguage.Culture;
InstalledVoice neededVoice = speech.GetInstalledVoices(keyboardCulture).FirstOrDefault();
if (neededVoice == null)
{
    phrase = "Unsupported Language";
}
else if (!neededVoice.Enabled)
{
    phrase = "Voice Disabled";
}
else
{
    speech.SelectVoice(neededVoice.VoiceInfo.Name);
}

speech.Speak(phrase);
  1. 我尝试过升级到C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Speech.dll
  2. 我有验证了版本 of Microsoft.Speech.dll和语言包匹配。

  1. 此代码适用于我已经安装的默认声音。
  2. 在绝望中,我甚至尝试通过反射直接调用System.Speech.Internal.Synthesis.VoiceSynthesis.GetVoice(),但是同样的错误。

我非常感谢您能提供的任何帮助!谢谢。

EN

Stack Overflow用户

发布于 2022-05-04 12:01:40

问题是,有些声音并不是所有申请都有登记的。这里有一篇很好的文章:https://www.ghacks.net/2018/08/11/unlock-all-windows-10-tts-voices-system-wide-to-get-more-of-them/

但是对于那些在上面的链接不起作用的时候找到这个答案的人来说:

其中涉及两个注册表项。

  1. Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft**Speech**\Voices\Tokens
  2. Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft**Speech_OneCore**\Voices\Tokens

第一个是在使用GetInstalledVoices() API调用查询时使用的。第二个被Windows设置应用程序使用。

要使未列出的声音可用于GetInstalledVoices(),您需要将所需声音的数据从Speech_OneCore复制到语音节点(如果需要,则将其x86对应)复制到语音节点。

  • 步骤1:打开(regedit.exe)
  • 步骤2:在Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens中打开可用的声音列表
  • 第三步:导出所需声音的键。
  • 步骤4:修改导出的注册表文件并替换
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft**Speech_OneCore**\Voices\Tokens\与
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft**Speech**\Voices\Tokens\

  • 步骤5:通过复制条目并替换,为32位应用程序添加两个条目(如果需要的话)
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft**Speech_OneCore**\Voices\Tokens\与
    • HKEY_LOCAL_MACHINE\SOFTWARE**WOW6432Node\Microsoft**Speech\Voices\Tokens\

  • 步骤6:将修改后的文件导入注册表。

现在它应该可以工作了(可能需要重新启动)

票数 1
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34776593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档