gpt4 book ai didi

ios - AVSpeechSynthesizer 有问题,有解决方法吗?

转载 作者:可可西里 更新时间:2023-11-01 03:02:15 25 4
gpt4 key购买 nike

我正在使用 AVSpeechSynthesizer 来播放文本。我有一系列的话语要播放。

    NSMutableArray *utterances = [[NSMutableArray alloc] init];
for (NSString *text in textArray) {
AVSpeechUtterance *welcome = [[AVSpeechUtterance alloc] initWithString:text];
welcome.rate = 0.25;
welcome.voice = voice;
welcome.pitchMultiplier = 1.2;
welcome.postUtteranceDelay = 0.25;
[utterances addObject:welcome];
}
lastUtterance = [utterances lastObject];
for (AVSpeechUtterance *utterance in utterances) {
[speech speakUtterance:utterance];
}

我有一个取消按钮来停止说话。当我在说出第一个话语时单击取消按钮时,语音停止并清除队列中的所有话语。如果我在说出第一个话语(即第二个话语)后按下取消按钮,则停止讲话不会刷新话语队列。我为此使用的代码是:

  [speech stopSpeakingAtBoundary:AVSpeechBoundaryImmediate];

有人可以确认这是 API 中的错误还是我使用 API 不正确?如果这是一个错误,是否有解决此问题的解决方法?

最佳答案

我找到了解决方法:

- (void)stopSpeech
{
if([_speechSynthesizer isSpeaking]) {
[_speechSynthesizer stopSpeakingAtBoundary:AVSpeechBoundaryImmediate];
AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:@""];
[_speechSynthesizer speakUtterance:utterance];
[_speechSynthesizer stopSpeakingAtBoundary:AVSpeechBoundaryImmediate];
}
}

调用stopSpeakingAtBoundary:,将一个空的话语加入队列,然后再次调用stopSpeakingAtBoundary:来停止并清理队列。

关于ios - AVSpeechSynthesizer 有问题,有解决方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19672814/

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