2009-11-04 9 views
16

Quindi ho appena notato che sul mio iPod Touch, quando la mia app attiva un file wav per riprodurre utilizzando AVAudioPlayer, la musica viene messa in pausa. È normale?iPhone AVAudioPlayer interrompe la musica di sottofondo

Non riesco a trovare alcun riferimento a questo, e sembra che sarebbe stato notato da qualche parte. C'è un modo per mantenere la musica mentre suono i miei suoni?

+0

Kenny si prega di cambiare la risposta accettata.0 :) –

risposta

12

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

Non è possibile eseguire AVAudioPlayer e il lettore iPod o MPMusicPlayer o MPMoviePlayer, allo stesso tempo, senza fare un po 'più di lavoro. Se vuoi farlo, usa i suoni di sistema di Audio Toolbox.

Se si vuole fare un po 'di lavoro extra, allora si dovrebbe guardare a Audio Sessions:

kAudioSessionCategory_UserInterfaceSoundEffects Per gli effetti sonori come il tatto feedback, esplosioni, e così via.

Equivalente alla categoria kAudioSessionCategory_AmbientSound , che si dovrebbe usare invece. La categoria kAudioSessionCategory_UserInterfaceSoundEffects è obsoleta in iPhone OS 3.0.

kAudioSessionCategory_AmbientSound Per suoni di lunga durata come pioggia, rumore del motore dell'automobile e così via. È anche per le applicazioni in stile "play along", come un pianoforte virtuale che un utente riproduce su iPod audio.

Quando si utilizza questa categoria, l'audio delle applicazioni integrate , come l'iPod , si mescola con l'audio. L'audio viene silenziato quando l'interruttore Suoneria/Silenzioso è impostato su Silenzioso o quando lo schermo si blocca.

68

In sostanza, a ogni app viene assegnata una sessione audio modellata come una classe singleton che è possibile ottenere all'avvio dell'applicazione e impostare i parametri su. Il modo risolto lo stesso problema era attraverso una singola linea di codice posto al applicationDidFinishLaunching:

Objective-C:

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

Swift 2/3:

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

Questa dovrebbe essere la risposta accettata. È al punto e la risposta è la domanda specifica dell'OP – er0

+0

Posso confermare che questo ha funzionato anche per me – barfoon

+0

Fantastico! Questo ha funzionato benissimo per il mio gioco SpriteKit. Grazie! –

0

seconda in base alle tue esigenze, la riproduzione di suoni di sistema potrebbe non essere sufficiente, dai un'occhiata alle opzioni di sessione, ad es 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 } 
} 

Quando si avvia la sessione, passare l'opzione MixWithOthers, forse il DuckOthers (farà cadere il volume di iPod quando i giochi sonori) è un'altra opzione.