gpt4 book ai didi

c# - 如何停止/切断 iOS 上的 xamarin essentials 文本到语音以开始新的语音

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:48 25 4
gpt4 key购买 nike

无法停止 xamarin essentials 文本到语音以启动新的文本到语音“SpeakAsync”调用 w/Xamarin.Forms。

将此应用程序用作“练习电话”的模拟接线员,我想在用户挂断电话时切断接线员说“你好,这是......”,并使用 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();
}

尝试使用文档中列出的取消 token (https://learn.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:无法开始播放”

有什么我想念的吗?如何取消当前正在播放的文字转语音并立即开始下一个语音?

编辑:

这需要通过单击按钮来完成(同时取消当前语音和开始“此通话已结束”语音)

最佳答案

我无法重现您的问题。

以下代码使用 Xamarin.Essentials v1.3.0 适用于 iOS 和 Android。和 Xamarin.Forms v4.2.0.709249 .

当点击 speakButton 时,将朗读文本;当正在朗读文本时点击 cancelButton,将停止朗读。

在 iOS 和 Android 上取消 SpeakAsync 时有一个区别:

  • 在 iOS 上,当前正在说的单词说完,然后停止说话
  • 在 Android 上,当前正在说的词被切断并且停止说话

示例代码

可在此处找到完整的示例应用程序:https://github.com/brminnick/CancelTextToSpeechSample/tree/master

using System;
using System.Threading;
using Xamarin.Forms;

namespace CancelTextToSpeechSample
{
public class App : Application
{
public App()
{
MainPage = new CancelSpeakPage();
}

class CancelSpeakPage : ContentPage
{
const string _spokenText = "Oh, supercalifragilisticexpialidocious! Even though the sound of it, Is something quite atrocious, If you say it loud enough, You'll always sound precocious, Supercalifragilisticexpialidocious!";

CancellationTokenSource _speakButtonCancellationTokenSource;

public CancelSpeakPage()
{
var speakButton = new Button { Text = "Sing" };
speakButton.Clicked += HandleSpeakButtonClicked;

var cancelButton = new Button { Text = "Cancel Song" };
cancelButton.Clicked += HandleCancelButtonClicked;

Content = new StackLayout
{
VerticalOptions = LayoutOptions.Center,
HorizontalOptions = LayoutOptions.Center,

Children =
{
speakButton,
cancelButton
}
};
}

void HandleCancelButtonClicked(object sender, EventArgs e)
{
_speakButtonCancellationTokenSource?.Cancel();
}

async void HandleSpeakButtonClicked(object sender, EventArgs e)
{
if (_speakButtonCancellationTokenSource?.IsCancellationRequested is false)
_speakButtonCancellationTokenSource.Cancel();

_speakButtonCancellationTokenSource = new CancellationTokenSource();
await Xamarin.Essentials.TextToSpeech.SpeakAsync(_spokenText, _speakButtonCancellationTokenSource.Token);
}
}
}
}

关于c# - 如何停止/切断 iOS 上的 xamarin essentials 文本到语音以开始新的语音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57677739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com