语音合成器“输入字符串的不正确的格式”(Speech Synthesizer “Input stri

2019-09-16 17:01发布

这里是我的代码:

string _message = "Hello world.";
SpeechSynthesizer _synth = new SpeechSynthesizer();
Prompt _prompt = new Prompt(_message);
_synth.Speak(_prompt);

我不能为我的生活弄清楚究竟是什么原因造成这样的错误:

“输入字符串的不正确的格式。”

导致此错误的行是当我打电话_synth.Speak(_prompt);
编辑:我已经试过我的台式电脑上运行此代码,它工作正常所以什么是错的我安装我的笔记本电脑。 不过我不太知道如何解决这个问题?

编辑:

堆栈跟踪:

System.FormatException: Input string was not in a correct format.
   at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffe
r& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo in
fo)
   at System.Speech.Internal.SapiAttributeParser.GetCultureInfoFromLanguageStrin
g(String valueString)
   at System.Speech.Synthesis.VoiceInfo..ctor(VoiceObjectToken token)
   at System.Speech.Internal.Synthesis.VoiceSynthesis.BuildInstalledVoices(Voice
Synthesis voiceSynthesizer)
   at System.Speech.Internal.Synthesis.VoiceSynthesis..ctor(WeakReference speech
Synthesizer)
   at System.Speech.Synthesis.SpeechSynthesizer.get_VoiceSynthesizer()
   at System.Speech.Synthesis.SpeechSynthesizer.Speak(Prompt prompt)
   at TTSTesting.Program.Speak(String _message) in C:\Users\ctanaka\Desktop\TTST
esting\TTSTesting\Program.cs:line 22

Answer 1:

您的计算机的注册表被搞砸了,它包含无效的语音配置数据。 相关的关键是HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens 。 下面,你会发现安装的声音。 英国机通常有MS-安娜那里,但有可能是别人,如果你购买了。

该搞砸值属性\语言,它是不是像它的十六进制数应。 像“409”,该LCID为英国的十六进制值。

你可能会卸载您添加声音,在注册表中删除坏的声音或固定的语言值修复它。 重新安装是棘手的,这是Vista和打开Windows安装程序的一部分。 你需要从superuser.com帮助,如果你不能把它修好。 或者你设置的DVD。



Answer 2:

我决定进入的声音关键寄存器,该密钥的备份后,我取出一个一个后各一次,直到错误消失试图代码中所有的声音。 错误是在Loquendo声音。 之后,我试图再次还原寻找错误的备份(所有的声音),并... OS回答一个值不能写,因为它是由另一个应用程序使用......这就是神奇的事情:所有工作得很好!



Answer 3:

我有同样的问题。 汉斯帕桑特指出我们这个API从注册表解析字符串值检测安装的语言事实。 我也曾经有过安装了Loquendo TTS语言包。 使用将procmon和反复试验,我设法找出导致错误(语言)确切的注册表项。 该API预计该字符串仅容纳数字字符的整数变换。 试图解析和转换这个字符串(“40”)触发出现FormatException:

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \微软\语音\音色\令牌\ LQBernard \属性] “语言”= “40C”

变成:

“语言”= “40”(除去尾随 'c' 的字符)。

我重复我的两个安装法国Loquendo TTS语言包(Bernard和朱丽叶)这一进程,并就解决对我来说。



Answer 4:

这可能不是你的问题的根源,但它看起来像API,你应该只能够调用

new SpeechSynthesizer().Speak("Hello world.");

并避免任何额外的代码...你试图消除期?



文章来源: Speech Synthesizer “Input string was not in a correct format”