2013-10-04 3 views
14

Ich kann nicht die iOS 7 AVSpeechSynthesizer arbeiten, wenn meine iOS App im Hintergrundmodus ist. Ich habe die "App spielt Audio" Schlüssel zu den unterstützten Hintergrundmodi der App hinzugefügt, aber ich kann es immer noch nicht zum Laufen bringen.AVSpeechSynthesizer im Hintergrundmodus

Ich habe auch die Möglichkeit untersucht, eine AVMutableCompositionTrack mit einer AVSpeechSynthesizer Äußerung zu erstellen und dann irgendwie mit einem Spieler zu spielen, der in der Lage wäre, im Hintergrund zu laufen - aber ohne Glück.

Hat jemand mehr Glück als ich mit AVSpeechSynthesizer im Hintergrund?

Antwort

32
  1. Sie müssen "Audio und AirPlay" im Hintergrundmodus einstellen.
  2. Sie haben die Audio-Sitzung zu konfigurieren:
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! Prost imihaly! –

+0

Ermöglicht dies die Wiedergabe im Audio-Hintergrundmodus? –

+1

@ChrisTruman, ich kann bestätigen, dass es funktioniert. Imihaly, verursacht der Aufruf "session setActive", dass Ihre App im Hintergrund läuft und den Strombedarf Ihrer App erhöht? Ich werde einige Tests durchführen, aber ich schätze, dass die Antwort ja ist, also würden Sie die obigen Anrufe machen, Ihre synthetisierte Rede abspielen und dann den aktiven Status Ihrer Sitzung auf NEIN setzen, sobald Sie fertig sind. –

6

Für schnelle 3, Import AVKit (oder AVFoundation) dann

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

zu viewWillAppear() hinzufügen. Dadurch kann Audio unabhängig vom Status des Mute-Schalters und im Hintergrund bei ausgeschaltetem Bildschirm wiedergegeben werden.

* Edit: AVAudioSession in AVFoundation definiert ist und auch mit AVKit

* Edit 2 zur Verfügung: Screenshot von Auto-Vervollständigen das zeigt, dass AVAudioSession in AVKit verfügbar ist

enter image description here

+0

AVKit muss durch AVFoundation ersetzt werden und "Audio und AirPlay" in Hintergrundmodi wird offensichtlich immer noch benötigt – cristallo

+0

AVKit ist das Framework der höheren Ebene, AVFoundation ist das Framework für feinere Kornkontrolle, aber [AVKit] (https: // developer .apple.com/documentation/avkit) wird in keiner Weise durch [AVFoundation] (https://developer.apple.com/documentation/avfoundation) ersetzt. – Chris

+0

Ich sage nicht, dass AVFoundation ein AVKit-Ersatz ist. Ich sage nur, dass [AVAudioSession] (https://developer.apple.com/documentation/avfoundation/avaudiosession) nicht in AVKit, sondern in AVFoundation enthalten ist. In diesem Zusammenhang sollten Sie AVFoundation einbeziehen. – cristallo