AVSpeechSynthesizer в фоновом режиме

Я не могу заставить iOS 7 AVSpeechSynthesizer работать, когда мое приложение iOS находится в фоновом режиме. Я добавил, что "приложение воспроизводит аудио" в поддерживаемых приложениях режимах фона, но я все еще не могу заставить его работать.

Я также исследовал возможность создания AVMutableCompositionTrack, с выражением AVSpeechSynthesizer, а затем каким-то образом воспроизвести его с игроком, который мог бы работать в фоновом режиме, но без везения.

У кого-то было больше удачи, чем у меня при использовании AVSpeechSynthesizer в фоновом режиме?

Ответы

Ответ 1

  • Вы должны установить "Аудио и AirPlay" в фоновом режиме.
  • Вам необходимо настроить сеанс аудио:
    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
    }

Ответ 2

Для swift 3 импортируйте AVKit (или AVFoundation), затем добавьте

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

для просмотра WillAppear(). Это позволяет воспроизводить звук независимо от состояния выключателя звука и в фоновом режиме при выключенном экране.

* Редактировать: AVAudioSession определяется в AVFoundation и также доступен с AVKit

* Редактировать 2: Снимок экрана автозаполнения, показывающий, что AVAudioSession доступен в AVKit

enter image description here

Ответ 3

Этот код работает для меня в 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 добавляется вместе с категорией воспроизведения, когда сеанс является смешиваемым, существуют некоторые внутренние проверки того, "почему" приложение активируется перед тем, как ему разрешено воспроизводить аудио.