我已经创建了一个 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/