ios - AVSpeechSynthesizer 在后台运行后停止工作

标签 ios ios8 avspeechsynthesizer

我正在单例中使用 AVSpeechSynthesizer。在 iOS 8 中,当应用程序进入后台一段时间后,当它恢复时,AVSpeechSynthesizer 单例将不再说话。此问题不会发生在 iOS 7 上。

当应用进入后台时,我的日志中会显示以下消息:

AVSpeechSynthesizer Audio interruption notification: {
    AVAudioSessionInterruptionTypeKey = 1;
}

我在单例的 init 方法中像这样初始化 AVSpeechSynthesizer:

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

我这样说话语:

AVSpeechUtterance *utt = [[AVSpeechUtterance alloc] initWithString:dialogue];
utt.voice = [AVSpeechSynthesisVoice voiceWithLanguage:voice];

utt.pitchMultiplier = pitch;
utt.rate = rate;
utt.preUtteranceDelay = preDelay;
utt.postUtteranceDelay = postDelay;
utt.volume = volumeSetting;

[self.speechSynthesizer speakUtterance:utt];

有没有人在 iOS 8 上看到过类似的东西?

最佳答案

我花了一整天的时间来解决这个问题,我想我已经找到了解决方案。我的问题是 AVSpeechSynthesizer 可以在前台和后台正常工作,并在来电之前一直闪避其他音频。

在那一刻,说话会悄无声息地停止工作,没有任何错误。所有对象仍然存在,但委托(delegate)调用不会被调用,既不会开始也不会结束。

我注意到通过电话,我的应用会收到有关 AudioRouteChanged 的通知。因此,当发生这种情况时,我会重新创建语音设置:基本上销毁现有的 AVSpeechSynthesizer 并重新创建它。从那时起,说话将继续工作。它甚至可以在通话期间工作:)

关于ios - AVSpeechSynthesizer 在后台运行后停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26478999/

相关文章:

iphone - 我想从短信中打开我的应用程序

iphone - 将数据从BLE SHIELD Arduino传输到iPhone

objective-c - UITableViewCell 选择突出显示颜色

ios - 将正确定位的图层添加到上下文

avspeechsynthesizer - 如何为 AVSpeechSynthesizer 添加长时间的停顿?

ios - AVSpeechSynthesizer 语音到音频文件

ios - ios 中的表格单元格重用问题

ios - 在 iOS 上存储很少更新的数据

CSS 动画在 IOS 8 中不起作用(在 IOS 7 和一般情况下都很好)

ios - SpeechSynthesizer 不会在 Swift 中为句号提供自然停顿