2014-09-17 3 views
0

Я пытаюсь написать код для чтения вслух входящий Тост (это было тривиальным в WP8.1) меня это до сих порКак сделать речи в текст работы в ОС Windows (Phone) 8,1 Универсальный App

  • Использование MediaElement, кажется, не работает (код работает, но без звука) либо по телефону, либо в эмулятора
  • Использование BackgroundMediaPlayer работает в эмуляторе, но не по телефону

Я попробовал оба из потока пользовательского интерфейса (MediaElement работает только на UI потока) и BackgroundMediaPlayer из потока, который обрабатывает поступающую тост

var mediaElement = new MediaElement(); 
using (var tts = new SpeechSynthesizer()) 
{ 
    using (var ttsStream = await tts.SynthesizeSsmlToStreamAsync(ssml)) 
    { 
     //BackgroundMediaPlayer.Current.SetStreamSource(ttsStream); 
     mediaElement.SetSource(ttsStream, ttsStream.ContentType); 
     mediaElement.Play(); 
    } 
} 

Я явно не хватает что-то просто здесь, но я из идей, как сделать эту работу. SSML правильно, я думаю, что это, вероятно, что-то делать с обзором и нити

+0

Удивительно (мне нужно сделать немного больше тестирования) Я думаю, что это, используя вокруг ttsStream. Я думаю, что это может быть в первый раз, когда я был укушен очисткой после себя. –

+0

Да, вы убиваете поток, прежде чем у него появится шанс сыграть. Я сделал то же самое, когда впервые попал в него. Кроме того, вы можете захотеть явно указать положение потока на 0, прежде чем передавать его в mediaElement. Кажется, я помню, что каждый раз снова (с перерывами и непоследовательно) это было бы на какой-то другой позиции, прежде чем Play() был вызван. – azarc3

ответ

1
 var synth = new SpeechSynthesizer(); 
    var voice = SpeechSynthesizer.DefaultVoice; 
    var newuserText = TheMessage 
    var stream = await synth.SynthesizeTextToStreamAsync(newuserText); 
    var mediaElement = new MediaElement(); 
    mediaElement.SetSource(stream, stream.ContentType); 
    mediaElement.Play(); 
+0

если я правильно помню, мне нужно было задать голос –