我有一個問題,因爲我對問題原因的理解暗指我,而不是解決問題的過程。我想知道是否有人可以進一步解釋我爲什麼會遇到這個問題?Synthesizer.Speak上的應用程序退出 - System.Speech.dll - 非微軟聲音
我填充本地計算機的安裝聲音組合框:
private void getSystemVoices()
{
foreach (InstalledVoice voiceName in synthesizer.GetInstalledVoices())
{
this.voiceComboBox.Items.Add(voiceName.VoiceInfo.Name);
}
}
我的應用程序的x86 CPU使所有已安裝的音色填充在ComboBox的下運行。我有一些安裝了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);
我的問題: 如果我有任何音色的選擇除了「微軟安娜」,我的應用程序退出。即使我使用Try/Catch語句。我沒有錯誤,也沒有調試信息說出現錯誤。如果我不更改默認語音,則不會發生此問題。
在我的理解中,Microsoft Speech API是向後兼容的?
我使用.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);
只與微軟SpeechSynthesizer時出現的問題及其影響。
CLR無法看到發生在非託管線程中的異常。你一定會在Output窗口看到一些東西。您需要來自語音供應商的支持才能到達某個地方。 –
感謝Hans,是的,我也懷疑Microsoft代碼和其他Installed Voices的廣泛支持問題。 Ivona和Acapela都有同樣的問題,所以我懷疑它不是那麼強烈,但是在Speech.dll –
中的Microsoft Base Code中,這可能是一個有用的鏈接:http://msdn.microsoft.com/en- us/library/ms723614(v = vs.85).aspx –