使用 SpeechSynthesizer 说话后 Webform 永远不会停止加载

Webform never stops loading after speak using SpeechSynthesizer

我在 ASP.NET 网站上使用语音 class 播放文本到语音 成功播放文本后,页面加载永远不会停止。它会无限期地加载。所以我不能点击下一步讲下一部作品

 sp.SpeakAsyncCancelAll();
 sp.Volume = 100;
 sp.SpeakAsync(rword.partofspeech);

如果您构建一个提示(或提供 SSML)首先播放音频文件(即使用音频 SSML 标签),然后有一些文本要说,SpeechSynthesiser 不会接受您的取消请求,一旦它已经开始朗读文本(尽管如果它仍在播放音频文件,它会很高兴地取消)。 如果你把文本放在第一位(在音频文件之前),一切都会按预期进行(你可以取消文本的朗读或后面音频文件的播放)。 可以毫无问题地取消仅使用文本说话的提示。

work-around:

您可以构建两个提示,第一个仅使用音频文件,第二个仅使用要朗读的文本,而不是同时使用音频文件和要朗读的文本构建提示。

然后您在两个提示上调用 SpeakAsync(以正确的顺序)。

现在,当您调用 SpeakAsyncCancelAll 时,它会取消正在播放的任何提示(无论是音频文件提示还是语音提示)。对于每个被取消的提示,都会按预期调用 SpeakCompleted 处理程序。

您也可以使用 SpeakAsyncCancel(提示),尽管您需要为您创建的每个提示调用它。

注意,当您构建一个首先包含音频文件,然后是要朗读的文本的提示时,我不确定为什么它实际上无法正常工作。