如何在bbackground中播放多个SpeechSynthesizer Streams?

时间:2016-10-26 01:28:27

标签: c# uwp media-player text-to-speech

我尝试过使用以下内容:

public async Task ReadParagraph(int id)
{
    var mp = (App.Current as App).mediaPlayer;
    var ns = (App.Current as App).nextStream;
    readerPosition = id;
    var tb = Items.OfType<TextBlock>();
    if (readerPosition < tb.Count())
    {
        if (synth == null)
            synth = new SpeechSynthesizer();
        synth.Voice = SpeechSynthesizer.DefaultVoice;
        var str = await synth.SynthesizeTextToStreamAsync(tb.ElementAt(readerPosition).Text);
        var ms = MediaSource.CreateFromStream(str, str.ContentType);
        mp.Source = ms;
        mp.PlaybackSession.PlaybackRate = 1.3;
        mp.Play();
    }
}

App.xml.cs文件中:

private async void MediaPlayer_MediaEnded(MediaPlayer sender, object args)
{
        await currentStory.Commands.ReadParagraph(Reader.Current.readerPosition + 1);
}

理论上这是有效的。问题是,每个合成流之间有3s +暂停。在WP8.1上,使用MediaElement它可以很好地工作,但似乎MediaPlayer具有Background Audio Playback功能似乎在不同的条件下工作。

此外,还有其他方法可以更改MediaPlayer的默认播放速率,而不是单独更改ebvery文件吗?它似乎没有100%的时间以我目前设置的方式工作。

我一直在考虑将整个文本初始化为List<SpeechSynthesisStream>,但这似乎会占用很长的文本记忆。

处理此问题的最佳选择是什么?

0 个答案:

没有答案