首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Synthesizer.Speak - System.Speech.dll -非Microsoft上的应用程序退出

Synthesizer.Speak - System.Speech.dll -非Microsoft上的应用程序退出
EN

Stack Overflow用户
提问于 2014-02-27 01:13:13
回答 1查看 1.1K关注 0票数 4

我有一个问题,就是我对这个问题的理解是暗示我,而不是回避这个问题的过程。我想知道是否有人能进一步解释我为什么要得到这个问题?

我用本地计算机安装的声音填充ComboBox:

代码语言:javascript
复制
private void getSystemVoices()
{
foreach (InstalledVoice voiceName in synthesizer.GetInstalledVoices())
{
this.voiceComboBox.Items.Add(voiceName.VoiceInfo.Name);
}
}

我的应用程序是在x86 CPU下运行的,所以所有已安装的声音都在这个ComboBox中填充。我有一些Acapela的声音安装,我相信他们是符合SAPI 5.1。露西希瑟和莱恩。

我正在测试这个代码以使用声音:

代码语言:javascript
复制
// Initialize a new instance of the SpeechSynthesizer...
SpeechSynthesizer synthesizer = new SpeechSynthesizer();

// Config the audio output... 
synthesizer.SetOutputToDefaultAudioDevice();

// Initialize a new instance of the PromptBuilder...
PromptBuilder promptBuilder = new PromptBuilder();

// Config SSML...
promptBuilder.AppendSsmlMarkup("<voice xml:lang=\"en-AU\">");
promptBuilder.StartVoice(this.voiceComboBox.SelectedItem.ToString());
promptBuilder.AppendText("The quick brown fox jumps over the lazy dog.");
promptBuilder.EndVoice();
promptBuilder.AppendSsmlMarkup("</voice>");

// Speak the prompt...
synthesizer.Speak(promptBuilder);

我的问题是:如果我选择了除"Microsoft Anna“之外的任何声音,我的应用程序就会退出。即使我使用Try/Catch语句。我没有得到错误,也没有调试信息,说一个错误已经发生。如果不更改默认语音,则不会发生此问题。

据我理解,Microsoft语音API是向后兼容的吗?

微软演讲

我使用的是.net4.5,引用了System.Speech.dll V4.0.0.0。

有人能解释这种行为吗?

编辑请注意: SPVoice的代码工作:

代码语言:javascript
复制
using SpeechLib;

// SAPI 5.1 Speech Config...
SpVoice voice = new SpVoice();
voice.Rate = speechRate.Value;
voice.Volume = speechVolume.Value;
voice.Voice = voice.GetVoices("", "").Item(voiceComboBox.SelectedIndex);
voice.Speak(readerTextBox.Text, SpeechVoiceSpeakFlags.SVSFlagsAsync);

只有微软的SpeechSynthesizer才会出现问题。

EN

回答 1

Stack Overflow用户

发布于 2014-03-18 19:56:47

当.Net应用程序像那样崩溃时,通常会在计算机应用程序事件日志中看到一个事件。通过执行以下操作可以找到事件日志(Windows 7):

  • 单击start
  • 右击computermy computer
  • 在左侧的treeview中,展开Event Viewer
  • 扩展Windows Logs
  • 点击Application

您应该在日志中看到一个错误图标,并提供有关崩溃的详细信息。

如果您想让一个应用程序崩溃,防止任何试图捕获块捕获异常,则可以通过调用Environment.FailFast(); (不建议这样做)或通常这样做(除了一些常见的内存损坏或篡改被检测到的情况外),您可以故意这样做。它将产生与一些本地代码的错误行为相同的效果,如雨后春笋般出现的超级马里奥在异常抛出者中的表现:-)。虽然这并不能直接回答您的问题,但它通过捕获的方式表明,它可能是一个类似的错误(损坏的内存,或声音检测到无许可证使用等)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22057049

复制
相关文章

相似问题

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