gpt4 book ai didi

c# - Synthesizer.Speak 上的应用程序退出 - System.Speech.dll - 非 Microsoft 语音

转载 作者:行者123 更新时间:2023-11-30 13:00:35 28 4
gpt4 key购买 nike

我有一个问题,我对问题原因的理解是在暗示我,而不是规避问题的过程。我想知道是否有人可以进一步解释为什么我会遇到这个问题?

我用本地计算机安装的语音填充组合框:

private void getSystemVoices()
{
foreach (InstalledVoice voiceName in synthesizer.GetInstalledVoices())
{
this.voiceComboBox.Items.Add(voiceName.VoiceInfo.Name);
}
}

我的应用程序在 x86 CPU 下运行,因此所有已安装的语音都填充在此组合框中。我安装了一些 Acapela 语音,我相信它们符合 SAPI 5.1 标准。露西、希瑟和瑞安。

我正在测试此代码以使用语音:

// 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 Speech API 是向后兼容的吗?

Microsoft Speech

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

有人能解释这种行为吗?

[编辑]请注意:SPVoice 的代码有效:

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);

只有 Microsoft SpeechSynthesizer 会出现此问题。

最佳答案

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

  • 点击开始
  • 右键单击计算机我的电脑
  • 在左侧 TreeView 中,展开事件查看器
  • 展开Windows 日志
  • 点击应用

您应该会在日志中看到一个错误图标,其中包含有关崩溃的详细信息。

如果您想让应用程序崩溃以防止任何 try-catch block 捕获异常,您可以通过调用 Environment.FailFast(); 有意这样做(除了一些常见的内存损坏或检测到篡改的情况)。它与某些 native 代码的不当行为具有相同的效果,即异常抛出器中的 Mushroomed-SuperMario :-)。虽然这不能直接回答您的问题,但它在您的捕获中爆炸的方式表明它可能是类似顺序的错误(损坏的内存,或者语音检测到未经许可的使用等)。

关于c# - Synthesizer.Speak 上的应用程序退出 - System.Speech.dll - 非 Microsoft 语音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22057049/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com