Verwendung von kAudioSessionProperty_OverrideCategoryMixWithOthers

Ich möchte, dass meine virtuelle Instrumenten-App (über ein MIDI-Keyboard) verwendet werden kann, wenn sich die App im Hintergrund befindet. Dies funktioniert einwandfrei, indem Sie UIBackgroundModes auf "Audio" und die Kategorie der AudioSessions auf AVAudioSessionCategoryPlayback setzen. Um das Mischen mit der Music-Player-App zu ermöglichen, habe ich außerdem die Eigenschaft kAudioSessionProperty_OverrideCategoryMixWithOthers festgelegt.

Um Batterieenergie zu sparen, wird empfohlen, den Hintergrundbetrieb ausschalten zu lassen, wenn er nicht benötigt wird. Daher gibt es in meiner App einen Schalter zum Umschalten zwischen der Kategorie AVAudioSessionCategoryAmbient und der Kategorie AVAudioSessionCategoryPlayback (mit kAudioSessionProperty_OverrideCategoryMixWithOthers). Der Code ist wie folgt (Fehlerbehandlung weggelassen):

<code>NSString *category = supportsBackgroundOperation ? AVAudioSessionCategoryPlayback : AVAudioSessionCategoryAmbient;

[session setCategory:category error:nil];

if (category == AVAudioSessionCategoryPlayback) {
    UInt32 allowMixing = true;
    AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing);
}
</code>

Jetzt das Problem: Angenommen, die Musikanwendung 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, eine weitere App zu starten, z. B. eine Diashow, um zu erfahren, warum er das Instrument spielt. Er wechselt in die Einstellungsansicht meiner App und aktiviert den Hintergrundbetrieb. Dann wird der obige Code ausgeführt. Boom, die Musikanwendung verstummt. Soweit ich weiß, kann die Eigenschaft kAudioSessionProperty_OverrideCategoryMixWithOthers nur festgelegt werdennach dem Festlegen der Kategorie, aber wenn ich die Kategorie auf AVAudioSessionCategoryPlayback stelle, wird der Musik-Player vom System stummgeschaltet, bevor ich kAudioSessionProperty_OverrideCategoryMixWithOthers festlegen kann.

Ist das passiert? Kann man da irgendwas machen? Ich habe versucht, die Sitzung vor / nach dem Ändern der Kategorie zu deaktivieren / aktivieren, aber das hat zu anderen Problemen geführt.

Markus

Antworten auf die Frage(3)

Ihre Antwort auf die Frage