我尝试过使用以下内容:
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>
,但这似乎会占用很长的文本记忆。
处理此问题的最佳选择是什么?