AVSpeechSynthesizer在后台模式下

时间:2013-10-04 14:19:21

标签: ios objective-c ios7 avfoundation

当我的iOS应用处于后台模式时,我无法让iOS 7 AVSpeechSynthesizer正常工作。我已将“ App播放音频”键添加到应用程序支持的后台模式,但我仍然无法让它工作。

我还研究了创建AVMutableCompositionTrackAVSpeechSynthesizer话语的可能性,然后以一种能够在后台运行的播放器以某种方式播放它 - 但没有运气。

在后台使用AVSpeechSynthesizer时,有没有人比我好运?

4 个答案:

答案 0 :(得分:38)

  1. 您必须在后台模式中设置“音频和AirPlay”。
  2. 您必须配置音频会话:
  3.     NSError *error = NULL;
        AVAudioSession *session = [AVAudioSession sharedInstance];
        [session setCategory:AVAudioSessionCategoryPlayback error:&error];
        if(error) {
            // Do some error handling
        }
        [session setActive:YES error:&error];
        if (error) {
            // Do some error handling
        }
    

答案 1 :(得分:8)

对于swift 3,导入AVKit(或AVFoundation)然后添加

try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)

to viewWillAppear()。无论静音开关状态如何,都可以播放音频,屏幕关闭时可以在后台播放音频。

*编辑:AVAudioSession在AVFoundation中定义,也可用于AVKit

*编辑2:自动完成的屏幕截图,显示AVAudioSession在AVKit中可用

enter image description here

答案 2 :(得分:0)

此代码在Swift 5中对我有效

    do {
       try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: AVAudioSession.CategoryOptions.mixWithOthers)
       try AVAudioSession.sharedInstance().setActive(true)
    } catch {
        print(error)
    }

    let utterance = AVSpeechUtterance(string: voiceOutdata)


    let synth = AVSpeechSynthesizer()
    synth.speak(utterance)

根据https://forums.developer.apple.com/thread/38917

当会话可混合时,将AVAudioSessionCategoryOptionMixWithOthers和“播放类别”一起添加,其中存在一些内部检查,涉及“为什么”在允许应用程序播放音频之前将其唤醒。

答案 3 :(得分:0)

@imihaly告诉“您必须在后台模式下设置” Audio and AirPlay”。 可以理解的look the picture

您需要从那里启用它, 其次,在AVSpeechSynthesizer代码部分中,您必须在下面的代码中编写

 let audioSession = AVAudioSession.sharedInstance()
            try! audioSession.setCategory(
                AVAudioSession.Category.playback,
                options: AVAudioSession.CategoryOptions.duckOthers
            )