Cómo usar kAudioSessionProperty_OverrideCategoryMixWithOthers

Me gustaría poder usar mi aplicación de instrumento virtual (a través de un teclado MIDI) cuando la aplicación está en segundo plano. Esto funciona bien configurando UIBackgroundModes en "audio" y configurando la categoría de AudioSessions en AVAudioSessionCategoryPlayback. Además, para permitir la mezcla con la aplicación del reproductor de música, configuro la propiedad kAudioSessionProperty_OverrideCategoryMixWithOthers.

Para ahorrar energía de la batería, se recomienda dejar que el usuario apague la operación de fondo si no es necesario. Así que hay un interruptor en mi aplicación para alternar entre la categoría AVAudioSessionCategoryAmbient y la categoría AVAudioSessionCategoryPlayback (con kAudioSessionProperty_OverrideCategoryMixWithOthers). El código es así (se omite el manejo de errores):

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

[session setCategory:category error:nil];

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

Ahora el problema: supongamos que la aplicación Música se está reproduciendo en segundo plano. El usuario toca el instrumento virtual en primer plano (a través de un teclado MIDI) para acompañar al reproductor de música y decide iniciar otra aplicación, digamos una presentación de diapositivas para disfrutar de por qué tocar el instrumento. Entonces él / ella va a la vista de configuración de mi aplicación y activa la operación en segundo plano. Luego se ejecuta el código anterior. Boom, la aplicación de música se queda en silencio. Como lo entiendo, la propiedad kAudioSessionProperty_OverrideCategoryMixWithOthers solo se puede establecerdespués configurando la categoría, pero cuando configuro AVAudioSessionCategoryPlayback, el sistema silencia el reproductor de música antes de que tenga la oportunidad de configurar kAudioSessionProperty_OverrideCategoryMixWithOthers.

¿Esto fue así? ¿Se puede hacer algo? Intenté desactivar / activar la sesión antes / después de cambiar la categoría, pero eso me llevó a otros problemas.

Markus

Respuestas a la pregunta(3)

Su respuesta a la pregunta