我是从主要方法调用的:
public MainPage() { Text_to_Speech.changetospeech("Welcome to Nepal!",newmedia).Wait(); mytxtblck.Text="Hello from Nepal!" }
我真正想做的是等到“欢迎来到尼泊尔”,然后在mytextblck中写下“Hello”.
我已经去了几个线程并且工作了,但没有任何东西可以使它工作.
public async static Task changetospeech(string text,MediaElement mediaa) { var synth = new SpeechSynthesizer(); var voices = SpeechSynthesizer.AllVoices; synth.Voice = voices.First(x => x.Gender == VoiceGender.Female ); SpeechSynthesisstream stream = await synth.SynthesizeTextToStreamAsync(text); MediaElement media = mediaa; media.SetSource(stream,stream.ContentType); media.Play(); }
解决方法
听起来你真正想要的是在
MediaEnded
事件被触发时触发文本更改.
你可以在你的ChangetoSpeech方法中做到这一点,虽然它会有点难看:
public async static Task ChangetoSpeech(string text,MediaElement media) { var synth = new SpeechSynthesizer(); var voices = SpeechSynthesizer.AllVoices; synth.Voice = voices.First(x => x.Gender == VoiceGender.Female); SpeechSynthesisstream stream = await synth.SynthesizeTextToStreamAsync(text); var tcs = new taskcompletionsource<int>(); RoutedEventHandler handler = delegate { tcs.TrySetResult(10); }; media.MediaEnded += handler; try { media.SetSource(stream,stream.ContentType); media.Play(); // Asynchronously wait for the event to fire await tcs.Task; } finally { media.MediaEnded -= handler; } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。