【发布时间】:2022-03-04 15:06:04
【问题描述】:
我创建了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];
}
}
【问题讨论】:
-
我有一个类似的问题,
[synthesizer_ pauseSpeakingAtBoundary:AVSpeechBoundaryWord]doesn't 暂停发言。相反,我会收到多个didPauseSpeechUtterance/didContinueSpeechUtterance事件,直到话语结束。使用pauseSpeakingAtBoundary:AVSpeechBoundaryImmediate似乎效果更好。 -
我删除了代码中对 AVAudio 项目的所有其他引用,然后我遇到了与您相同的事情,重复了
didPauseSpeechUtterance/didContinueSpeechUtterance事件。
标签: ios objective-c text-to-speech