How can I allow background music to continue playing while my app still plays its sounds while using Swift How can I allow background music to continue playing while my app still plays its sounds while using Swift ios ios

How can I allow background music to continue playing while my app still plays its sounds while using Swift


You need to set the AVAudioSession category, with one of the following value: https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAudioSession_ClassReference/index.html (AVAudioSession Class Reference).

The default value is set to AVAudioSessionCategorySoloAmbient. As you can read :

[...] using this category implies that your app’s audio is nonmixable—activating your session will interrupt any other audio sessions which are also nonmixable. To allow mixing, use the AVAudioSessionCategoryAmbient category instead.

You have to change the category, before you play your sound. To do so :

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, error: nil)AVAudioSession.sharedInstance().setActive(true, error: nil)

You don't need to call those line each time you play the sound. You might want to do it only once.


Swift 4 version:

try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)try? AVAudioSession.sharedInstance().setActive(true)


This is how I do it in Swift 3.0

var songPlayer : AVAudioPlayer?         func SetUpSound() {        if let path = Bundle.main.path(forResource: "TestSound", ofType: "wav") {            let filePath = NSURL(fileURLWithPath:path)            songPlayer = try! AVAudioPlayer.init(contentsOf: filePath as URL)            songPlayer?.numberOfLoops = -1 //logic for infinite loop            songPlayer?.prepareToPlay()            songPlayer?.play()        }        let audioSession = AVAudioSession.sharedInstance()        try!audioSession.setCategory(AVAudioSessionCategoryPlayback, with: AVAudioSessionCategoryOptions.duckOthers) //Causes audio from other sessions to be ducked (reduced in volume) while audio from this session plays  }

You can see more of AVAudioSessionCategoryOptions here: https://developer.apple.com/reference/avfoundation/avaudiosessioncategoryoptions