22

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

我还研究了创建一个AVMutableCompositionTrack带有AVSpeechSynthesizer话语的 , 的可能性,然后以某种方式与能够在后台运行的玩家一起播放它 - 但没有运气。

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

4

4 回答 4

41
  1. 您必须在后台模式下设置“音频和 AirPlay”。
  2. 您必须配置音频会话:
    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
    }
于 2013-10-05T16:44:53.550 回答
9

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

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

查看WillAppear()。无论静音开关状态如何,都可以在屏幕关闭的背景下播放音频。

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

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

在此处输入图像描述

于 2017-01-16T02:49:45.837 回答
6

这段代码在 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 与播放类别一起添加,在允许播放音频之前,对应用程序“为什么”处于唤醒状态进行一些内部检查。

于 2019-07-16T23:53:04.880 回答
0

@imihaly 告诉“您必须在后台模式中设置“音频和 AirPlay”。” 这是可以理解的看图片

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

 let audioSession = AVAudioSession.sharedInstance()
            try! audioSession.setCategory(
                AVAudioSession.Category.playback,
                options: AVAudioSession.CategoryOptions.duckOthers
            )
                 
于 2020-12-03T05:45:36.593 回答