2013-10-04 4 views
14

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

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

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

ответ

32
  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 
    } 
+2

Awesome! ура имиджали! –

+0

Действительно ли это позволяет воспроизводить в фоновом режиме? –

+1

@ChrisTruman, я могу подтвердить, что он работает. imihaly, вызывает ли вызов «session setActive» ваше приложение, чтобы он работал в фоновом режиме и увеличивал требования к вашему приложению? Я сделаю некоторое тестирование, но я предполагаю, что ответ «да», поэтому вы хотите сделать вышеперечисленные вызовы, воспроизвести синтезированную речь, а затем установить статус активности вашего сеанса в НЕТ после завершения. –

6

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

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

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

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

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

enter image description here

+0

AVKit необходимо заменить AVFoundation и установить «Audio и AirPlay» в фоновых режимах, очевидно, все еще необходимо – cristallo

+0

AVKit - это структура более высокого уровня, AVFoundation - это основа для управления более мелким зерном, но [AVKit] (https: // разработчик .apple.com/documentation/avkit) никоим образом не заменяется [AVFoundation] (https://developer.apple.com/documentation/avfoundation). – Chris

+0

Я не говорю, что AVFoundation - это замена AVKit. Я только говорю, что [AVAudioSession] (https://developer.apple.com/documentation/avfoundation/avaudiosession) не входит в AVKit, а в AVFoundation. Поэтому в этом контексте вы должны включить AVFoundation. – cristallo

Смежные вопросы