Jak korzystać z kAudioSessionProperty_OverrideCategoryMix Z innymi

Chciałbym, aby moja aplikacja wirtualnego instrumentu mogła być używana (za pomocą klawiatury MIDI), gdy aplikacja jest w tle. Działa to dobrze, ustawiając UIBackgroundModes na „audio” i ustawiając kategorię AudioSessions na AVAudioSessionCategoryPlayback. Ponadto, aby umożliwić miksowanie z aplikacją Odtwarzacz muzyki, ustawiłem właściwość kAudioSessionProperty_OverrideCategoryMix Z innymi.

Aby zaoszczędzić energię akumulatora, zaleca się, aby użytkownik wyłączył działanie w tle, jeśli nie jest ono potrzebne. W mojej aplikacji znajduje się przełącznik do przełączania między kategorią AVAudioSessionCategoryAmbient a kategorią AVAudioSessionCategoryPlayback (za pomocą kAudioSessionProperty_OverrideCategoryMixWith Inne). Kod jest taki (pominięto obsługę błędów):

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

[session setCategory:category error:nil];

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

Teraz problem: załóżmy, że aplikacja muzyczna gra w tle. Użytkownik gra na wirtualnym instrumencie na pierwszym planie (za pomocą klawiatury MIDI), aby towarzyszyć odtwarzaczowi muzyki i decyduje się uruchomić kolejną aplikację, powiedz pokaz slajdów, aby cieszyć się, dlaczego gra na instrumencie. Przechodzi więc do widoku ustawień mojej aplikacji i aktywuje działanie w tle. Następnie wykonywany jest powyższy kod. Boom, aplikacja Muzyka zamilknie. Jak rozumiem, właściwość kAudioSessionProperty_OverrideCategoryMixWithOthers może być ustawiona tylkopo ustawiając kategorię, ale gdy ustawię kategorię na AVAudioSessionCategoryPlayback, odtwarzacz muzyczny zostanie wyciszony przez system, zanim będę miał szansę ustawić kAudioSessionProperty_OverrideCategoryMix Z innymi.

Czy tak się stało? Czy można coś zrobić? Próbowałem dezaktywować / aktywować sesję przed / po zmianie kategorii, ale to prowadzi do innych problemów.

Markus

questionAnswers(3)

yourAnswerToTheQuestion