jjzjj

ios - AVSpeechSynthesizer continueSpeaking 不工作

coder 2024-01-20 原文

我已经创建了一个 AVSpeechSynthesizer 并开始播放一个 AVSpeechUtterance。这很好用。如果用户按下按钮,我会暂停合成器。这也有效。但是,当我尝试使用 continueSpeaking 方法重新启动合成器时,没有任何反应。如果我检查 isSpeaking 属性,它仍然是 NO。如何让音频从中断的地方重新开始播放?

AVSpeechSynthesizer *synthesizer_;

synthesizer_ = [[AVSpeechSynthesizer alloc] init];
synthesizer_.delegate = self;


- (void)textToSpeech{
    AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc]initWithString:itemText];
    utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:localeCode];
    utterance.rate = UTTERANCE_RATE;
    utterance.preUtteranceDelay = itemDelayTimeInterval;
    [synthesizer_ speakUtterance:utterance];
}

- (IBAction)pauseButtonPressed:(id)sender {
    if (synthesizer_.isSpeaking) {
        [synthesizer_ pauseSpeakingAtBoundary:AVSpeechBoundaryWord];
    }
    else{
        [synthesizer_ continueSpeaking];
    }

最佳答案

您的原始代码是:

if (synthesizer_.isSpeaking) {

试试这个:

if (![synthesizer_ isPaused])

原因:

来自文档: 请讲 一个 bool 值,指示合成器是否正在说话。 (只读)

@property(nonatomic, readonly, getter=isSpeaking) BOOL speaking

讨论 如果合成器正在说话或有排队要说话的话语,即使它当前已暂停,也返回 YES。如果合成器已经说完其队列中的所有话语,或者如果它还没有被赋予说话的话语,则返回 NO

可用性 适用于 iOS 7.0 及更高版本。 声明于 AVSpeechSynthesis.h

因此,如果您使用此属性,并且语音已暂停,则此属性可以为真,您的语音继续代码将不会运行。

关于ios - AVSpeechSynthesizer continueSpeaking 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19367670/

有关ios - AVSpeechSynthesizer continueSpeaking 不工作的更多相关文章

随机推荐