So verwenden Sie kAudioSessionProperty_OverrideCategoryMixWithOthers

7

Ich möchte meine virtuelle Instrumenten-App (über ein MIDI-Keyboard) nutzen lassen, wenn die App im Hintergrund läuft. Dies funktioniert, indem Sie UIBackgroundModes auf "audio" setzen und die AudioSessions-Kategorie auf AVAudioSessionCategoryPlayback setzen. Um das Mischen mit der Musik-Player-App zu ermöglichen, habe ich außerdem die Eigenschaft kAudioSessionProperty_OverrideCategoryMixWithOthers festgelegt.

Um Energie zu sparen, wird empfohlen, dass der Benutzer den Hintergrundbetrieb ausschaltet, wenn er nicht benötigt wird. Also gibt es einen Schalter in meiner App, um zwischen der Kategorie AVAudioSessionCategoryAmbient und der Kategorie AVAudioSessionCategoryPlayback (mit kAudioSessionProperty_OverrideCategoryMixWithOthers) zu wechseln. Der Code ist wie folgt (Fehlerbehandlung weggelassen):

%Vor%

Nun das Problem: Angenommen, die Musik-Anwendung wird im Hintergrund abgespielt. Der Benutzer spielt das virtuelle Instrument im Vordergrund (über ein MIDI-Keyboard), um den Musik-Player zu begleiten und beschließt, noch eine weitere App zu starten, sagen Sie eine Diashow, um zu erfahren, warum Sie das Instrument spielen. Also geht er / sie zur Einstellungsansicht meiner App und aktiviert den Hintergrundbetrieb. Dann wird der obige Code ausgeführt. Boom, die Musik-Anwendung wird leise. Wie ich es verstehe, kann die Eigenschaft kAudioSessionProperty_OverrideCategoryMixWithOthers nur auf nach gesetzt werden, wenn ich die Kategorie einstelle, aber wenn ich die Kategorie auf AVAudioSessionCategoryPlayback setze, wird der Music Player vom System stummgeschaltet, bevor ich kAudioSessionProperty_OverrideCategoryMixWithOthers setzen kann.

Ist das passiert? Kann da etwas getan werden? Ich habe versucht, die Sitzung vor / nach dem Ändern der Kategorie zu deaktivieren / aktivieren, aber das führte zu anderen Problemen.

Markus

    
masi 16.04.2012, 19:37
quelle

3 Antworten

16

Sie können dies erreichen. Das Prinzip besteht darin, zuerst Ihre Audiositzung zu deaktivieren, alle Eigenschaften Ihrer Audiositzung und dann die aktive Audiositzung einzurichten. Auf diese Weise wird die in anderen Apps wiedergegebene Musik nicht stummgeschaltet.

%Vor%

Diese Lösung funktioniert für mich. Aber von Ihrer Beschreibung haben Sie erwähnt, dass Sie versucht haben, die Sitzung vor / nach dem Ändern der Kategorie zu aktivieren / deaktivieren, aber zu anderen Problemen führen. Haben Sie die Deaktivierung / Aktivierung genau wie oben durchgeführt? Wenn ja, geben Sie mehr Informationen über andere Probleme und vielleicht kann ich helfen.

    
Yiqun Hu 28.05.2012, 14:17
quelle
17

Seit iOS 6.0 können Sie

verwenden %Vor%     
M0rph3v5 26.03.2013 12:29
quelle
-6

Ich muss mit M0rph3v5 nicht einverstanden sein.

Der einzige gültige Wert für den withOptions-Parameter ist AVAudioSessionInterruptionOptionShouldResume

    
Ben Thomas 25.04.2013 07:07
quelle

Tags und Links