Как мне создать IMediaPlaybackSource из потока, чтобы установить источник MediaPlayer без использования устаревшего метода SetStreamSource? - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь разработать приложение UWP, которое будет говорить пользователю текст через Windows.Media.Playback.MediaPlayer.У меня есть этот код, который в настоящее время работает:

    private async Task Speak(string text)
    {
        var audio = await _Speech.SynthesizeTextToStreamAsync(text);
        player.SetStreamSource(audio);
        player.Play();
    }

Однако, это вызывает предупреждение компилятора: 'MediaPlayer.SetStreamSource(IRandomAccessStream)' is obsolete: 'Use Source instead of SetStreamSource. For more info, see MSDN.

Однако я не могу найти в MSDN, как преобразовать SpeechSynthesisStreamSynthesizeTextToStreamAsync порождает до IMediaPlaybackSource, что MediaPlayer хочет.Класс Windows.Media.Core.MediaStreamSource выглядит многообещающе, но ему нужен IMediaStreamDescriptor, который я понятия не имею, как его получить ...

Как мне воспроизвести функциональность этого простого трехстороннего интерфейса без использования устаревших методов?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Вы можете использовать для этой цели метод MediaSource.CreateFromStream () .

private async Task Speak(string text)
{
    var audio = await _Speech.SynthesizeTextToStreamAsync(text);
    player.Source = MediaSource.CreateFromStream(audio);
    player.Play();
}
0 голосов
/ 11 октября 2018

SynthesizeTextToStreamAsync возвращает объект SpeechSynthesisStream, который вы можете использовать.Этот пример из документации MSDN должен привести вас в правильном направлении

   SpeechSynthesisStream stream = await synth.SynthesizeTextToStreamAsync("Hello World");

   mediaElement.SetSource(stream, stream.ContentType); 

https://docs.microsoft.com/en-us/uwp/api/windows.media.speechsynthesis.speechsynthesizer

...