Windows Phone 8 SpeechSynthesizer Pause

Я разрабатываю приложение, в котором я хотел бы сделать паузу между тем, когда SpeechSynthesizer.SpeakTextAsync запущен, и возобновить работу оттуда.

await synthesizer.SpeakTextAsync(text);

прекратить чтение, когда var stop = true;

2 ответа

Решение

Кто-то опубликовал здесь некоторое время назад, в то же время я обновил страницу, прочитал его ответ, увидел уведомление и обновил страницу снова, и ответ пропал. Но кто бы ни написал, он спасатель жизни. Это застряло в моей голове, и я в конечном итоге создал это.

    String text;  // your text to read out loud
    String[] parts = text.Split(' ');
    int max = parts.Length;
    int count = 0;

    private String makeSSML() {
        if (count == max) { 
            count= 0;
        }
        String s = "<speak version=\"1.0\" ";
        s += "xmlns=\"http://www.w3.org/2001/10/synthesis\" xml:lang=\"en-US\">";
        for (int i = count; i < max; i++)
        {
            s += parts[i];
            s += "<mark name=\"anything\"/>";
        }
        s += "<mark name=\"END\"/>";
        s += "</speak>";
        return s;
    }

    private void playIT(){
        synth = new SpeechSynthesizer();
        synth.BookmarkReached += synth_BookmarkReached;
        synth.SpeakSsmlAsync(makeSSML());
    }

    private void synth_BookmarkReached(object sender, SpeechBookmarkReachedEventArgs e)
    {
        count++;
        if (e.Bookmark == "END") {
            synth.Dispose();
        }
    }

    private void Pause_Click(object sender, RoutedEventArgs e)
    {
        synth.Dispose();
    }

Спасибо человек, твой ответ дал мне идею.

Ну, согласно документации, при звонке CancellAllВы отменяете Задачи, которые выполняются асинхронно. По контракту это приводит к OperationCancelledException быть брошенным Это означает, что где бы вы ни вызывали SpeakTextAsync, SpeakSsmlAsync или SpeakSsmlFromUriAsync, вы должны окружать эти вызовы оператором 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(),

Это сделано! Наслаждаться...!

Другие вопросы по тегам