我正在修改Scott Hanselman的BabySmash代码以支持其他语言。
语言现在显示在注册表中:
现在可以通过Windows选择和播放该语言:
System.Speech.Synthesis.SpeechSynthesizer.GetInstalledVoices()
现在返回声音。
SelectVoice()
会引发错误" System.ArgumentException:无法设置语音。未安装匹配的语音或语音已被禁用。" 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);
我已尝试升级到C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Speech.dll
。
我Microsoft.Speech.dll
的{{1}}和语言包匹配。
此代码适用于我已安装的默认语音。
在绝望中,我甚至尝试通过反射直接调用System.Speech.Internal.Synthesis.VoiceSynthesis.GetVoice()
,但同样的错误。
非常感谢您提供的任何帮助!感谢。
答案 0 :(得分:1)
哈哈我觉得特别:this post on Python实际上解决了我的问题:构建配置平台需要 x64 ,而不是Any CPU
!
答案 1 :(得分:0)
另一种解决方案是安装(x64)位版本的Microsoft Speech Platform SDK和Microsoft Server Speech Platform Runtime。我认为你已经安装了两个(x86)位,并且plataform尝试用(x64)位读取它。
我遇到了同样的问题,但恰恰相反,这对我有用!
答案 2 :(得分:0)
在我的情况下,我需要使用 Microsoft.Speech.Synthesis 而不是库 System.Speech.Synthesis 。为此,我们需要转到VisualStudio上的解决方案资源管理器 - >引用并浏览 Microsoft.Speech.dll
using Microsoft.Speech.Synthesis;
之后,您将拥有其他运行时语言。
SpeechSynthesizer synth = new SpeechSynthesizer();
// Output information about all of the installed voices.
foreach (InstalledVoice voice in synth.GetInstalledVoices())
{
VoiceInfo info = voice.VoiceInfo;
Console.WriteLine(" Name: " + info.Name);
Console.WriteLine(" Culture: " + info.Culture);
Console.WriteLine(" Age: " + info.Age);
Console.WriteLine(" Gender: " + info.Gender);
Console.WriteLine(" Description: " + info.Description);
Console.WriteLine(" ID: " + info.Id);
}
答案 3 :(得分:0)