取消Windows Phone语音合成器



我的应用程序多次调用SpeechSynthesizer.SpeakTextAsync,因此大部分文本将在说出之前添加到队列中。我想让用户能够取消语音并丢弃仍在队列中的每一件东西。

我试着调用SpeechSynthesizer.CancelAllSpeechSynthesizer.Dispose,当调用这两个方法时,应用程序就会崩溃。

我在windowsphone 8中查看了取消语音合成,但由于我的应用程序将多个语音添加到队列中,Task.Cancel似乎不起作用。

根据文档,当您调用CancellAll时,您将取消异步执行的Task。根据约定,这将导致抛出OperationCancelledException。这意味着,无论在哪里调用SpeakTextAsync、SpeakSsmlAsync或SpeakSslFromUriAsync,都必须用try/catch语句包围这些调用,以防止未捕获此异常。

private static SpeechSynthesizer synth;
public async static Task<SpeechSynthesizer> SpeechSynth(string dataToSpeak)
        {
            synth = new SpeechSynthesizer();
            IEnumerable<VoiceInformation> englishVoices = from voice in InstalledVoices.All
                                                          where voice.Language == "en-US"
                                                          && voice.Gender.Equals(VoiceGender.Female)
                                                          select voice;
            if (englishVoices.Count() > 0)
            {
                synth.SetVoice(englishVoices.ElementAt(0));
            }
            await synth.SpeakTextAsync(dataToSpeak); 
            return synth;
        }  

public static void CancelSpeech()
        {
            synth.CancelAll();
        }

现在,在您想要的地方调用SpeechSynth("Some Data to Speak"),只要您想取消它,就只需调用CancelSpeech()

它完成了!享受

最新更新