2013-10-04 16 views
14

Nie mogę uruchomić systemu iOS 7 AVSpeechSynthesizer, gdy moja aplikacja na iOS działa w tle. Dodałem "aplikację odtwarza audio" klucz do obsługiwanych trybów tła aplikacji, ale nadal nie mogę go uruchomić.AVSpeechSynthesizer w trybie tła

Zbadałem również możliwość utworzenia AVMutableCompositionTrack, z wymową AVSpeechSynthesizer, a następnie w jakiś sposób zagrać z graczem, który mógłby działać w tle - ale bez powodzenia.

Czy ktoś miał więcej szczęścia niż ja w używaniu AVSpeechSynthesizer w tle?

Odpowiedz

32
  1. Musisz ustawić "Audio i AirPlay" w trybach tła.
  2. Trzeba skonfigurować sesję dźwięku:
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! okrzyki imihaly! –

+0

Czy to faktycznie umożliwia odtwarzanie w trybie audio w tle? –

+1

@ChrisTruman, Mogę potwierdzić, że to działa. imihaly, czy wywołanie "set set" sprawia, że ​​Twoja aplikacja działa w tle i zwiększa zapotrzebowanie na moc aplikacji? Zrobię kilka testów, ale domyślam się, że odpowiedź brzmi "tak", więc chciałbyś wykonać powyższe połączenia, odtworzyć syntezator mowy, a następnie ustawić aktywny status sesji z powrotem na NIE, gdy skończysz. –

6

Swift 3, AVKit import (lub AVFoundation), a następnie dodać

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

do viewWillAppear(). Pozwala to na odtwarzanie dźwięku bez względu na stan wyłączenia wyciszenia oraz w tle z wyłączonym ekranem.

* Edycja: AVAudioSession jest zdefiniowana w AVFoundation i jest również dostępny z AVKit

* Edycja 2: Zrzut ekranu z auto kompletne pokazując, że AVAudioSession jest dostępny w AVKit

enter image description here

+0

AVKit musi zostać zastąpiony przez AVFoundation i ustawić "Audio i AirPlay" w trybach tła jest oczywiście nadal potrzebny – cristallo

+0

AVKit jest platformą wyższego poziomu, AVFoundation jest ramą do użycia dla lepszej kontroli ziarna, ale [AVKit] (https: // programista .apple.com/documentation/avkit) nie jest w żaden sposób zastępowany przez [AVFoundation] (https://developer.apple.com/documentation/avfoundation). – Chris

+0

Nie mówię, że AVFoundation jest zamiennikiem AVKit. Mówię tylko, że [AVAudioSession] (https://developer.apple.com/documentation/avfoundation/avaudiosession) nie jest zawarta w AVKit, ale w AVFoundation. Dlatego w tym kontekście powinieneś włączyć AVFoundation. – cristallo

Powiązane problemy