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