【发布时间】:2019-08-27 15:12:40
【问题描述】:
无法停止 xamarin essentials 文本转语音以便使用 Xamarin.Forms 启动新的文本转语音“SpeakAsync”调用。
将此应用程序用作“练习电话”的模拟接线员,我想在用户挂断电话时切断接线员说“你好,这是....”,并使用 speak async 开始在将之前的文本转为语音后立即说“此通话已结束”
await TextToSpeech.SpeakAsync("Hello this is the operator, thank you for calling, how can I help you?"
, SpeechTokenSource.Token);
这目前在 android 上按预期工作
public void CancelSpeech()
{
if (SpeechTokenSource?.IsCancellationRequested ?? true)
return;
SpeechTokenSource.Cancel();
}
尝试使用文档中列出的取消令牌 (https://docs.microsoft.com/en-us/xamarin/essentials/text-to-speech) 但是,我无法让当前的“SpeakAsync”语音立即停止在 iOS 上播放,或者在取消初始文本转语音后,下一个 speakasync 命令开始在 iOS 上朗读文本。
CancelSpeech();
IsCallActive = false;
DialedText = null;
//Reset speech cancellation token
SpeechTokenSource = new CancellationTokenSource();
await TextToSpeech.SpeakAsync("This call has ended. Goodbye."
, SpeechTokenSource.Token);
iOS 输出中记录的错误: "[AXTTSCommon] _BeginSpeaking: 无法开始播放"
我有什么遗漏吗?如何取消当前正在播放的文本转语音并立即开始下一个语音?
编辑:
这需要通过单击一个按钮来完成(取消当前语音并开始“此通话已结束”语音)
【问题讨论】:
-
我测试了一下,遇到了同样的问题。我可以给你一个解决方法是你可以在
CancelSpeech();之后放置一个await Task.Delay(2000);,然后它会按你的预期工作。尝试第二次演讲时,我收到一个名为BeginSpeaking: couldn't begin playback的错误。您可以创建问题here 以获得更多帮助,如果我发现任何问题,我会及时通知您。 -
@JackHua-MSFT 您链接到了错误的 GitHub 存储库。他正在使用 Xamarin.Essentials,需要在 Xamarin.Essentials GitHub 存储库中打开问题:github.com/xamarin/Essentials
-
@JackHua-MSFT,2 秒的任务延迟确实允许它按预期运行,但是,它不能作为最终解决方案,因为我们不能让应用程序暂停 2在生产中的每个文本到语音呼叫之前的秒数
标签: c# xamarin.forms xamarin.ios text-to-speech xamarin.essentials