2009-11-04 20 views
16

Así que acabo de notar que en mi iPod Touch, cuando mi aplicación desencadena un archivo wav corto para reproducir usando AVAudioPlayer, la música se detiene. ¿Esto es normal?iPhone AVAudioPlayer detener música de fondo

No puedo encontrar ninguna referencia a esto, y parece que se notaría en alguna parte. ¿Hay alguna manera de mantener la música mientras toco mis sonidos?

+0

Kenny por favor cambie su respuesta aceptada.0 :) –

Respuesta

12

Nota: The AudioSession API has been completely deprecated in iOS 7.0

No se puede ejecutar AVAudioPlayer y el reproductor iPod o MPMusicPlayer o MPMoviePlayer al mismo tiempo, sin hacer un poco más de trabajo. Si quiere algo fácil, use los sonidos del sistema de Audio Toolbox.

Si desea hacer algún trabajo extra, entonces usted debe buscar en Audio Sessions:

kAudioSessionCategory_UserInterfaceSoundEffects Para efectos de sonido como el tacto retroalimentación, explosiones, y así sucesivamente.

Equivalente a la categoría kAudioSessionCategory_AmbientSound , que se debe utilizar en lugar . La categoría kAudioSessionCategory_UserInterfaceSoundEffects está en desuso en iPhone OS 3.0.

kAudioSessionCategory_AmbientSound Para sonidos de larga duración como lluvia, coche ruido del motor, y así sucesivamente. También es para aplicaciones de estilo "play along", un piano virtual tal que un usuario juega sobre audio de iPod.

Cuando utiliza esta categoría, el audio de las aplicaciones integradas , como el iPod , se mezcla con su audio. Su audio se silencia cuando el interruptor Ring/Silent se establece en silencio o cuando la pantalla se bloquea.

68

Básicamente, a cada aplicación se le asigna una sesión de audio que se modela como una clase singleton que se puede obtener al iniciar la aplicación y configurar los parámetros. La forma en que fija el mismo problema fue a través de una sola línea de código colocado en applicationDidFinishLaunching:

Objetivo-C:

[[AVAudioSession sharedInstance]setCategory:AVAudioSessionCategoryAmbient error:nil]; 

Swift 2/3:

try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient) 
+4

Esta debería ser la respuesta aceptada. Es al punto y la respuesta es la pregunta específica del OP – er0

+0

Puede confirmar que esto funcionó para mí también – barfoon

+0

¡Impresionante! Esto funcionó muy bien para mi juego SpriteKit. ¡Gracias! –

0

Dependiendo en sus requisitos, reproducir los sonidos del sistema puede no ser suficiente, eche un vistazo a las opciones de sesión, por ejemplo MixWithOthers

struct AVAudioSessionCategoryOptions : OptionSetType { 
    init(rawValue rawValue: UInt) 
    static var MixWithOthers: AVAudioSessionCategoryOptions { get } 
    static var DuckOthers: AVAudioSessionCategoryOptions { get } 
    static var AllowBluetooth: AVAudioSessionCategoryOptions { get } 
    static var DefaultToSpeaker: AVAudioSessionCategoryOptions { get } 
    static var InterruptSpokenAudioAndMixWithOthers: AVAudioSessionCategoryOptions { get } 
} 

Al iniciar la sesión, pasan la opción MixWithOthers, tal vez el DuckOthers (se reducirá el volumen de iPod cuando sus reproduce el sonido) es otra opción.

Cuestiones relacionadas