I looked around and found vaguely similar questions but nothing quite the same...I do apologize if I missed the answer somewhere.
I am finishing up a game I wrote in Swift using SpriteKit.
Most other games that I've played, I can have itunes or something playing music in the background, and still hear it while I am playing a game.
As I am playing my game, I'm noticing that it automatically shuts of the audio from other apps.
I am not using AVAudioPlayer
for the sound, as I currently only have a small amount of audio effects so I was just using an SKAction.playsoundfilenamed action instead.
I do have logic in there to turn my sounds on and off, but that is simply using some internal if/else logic.
I'm wondering if perhaps there is some AVAudio
property I can set that will allow other apps audio to continue playing when mine is open? I can't find this in the documentation.
Thanks!
In Xcode 8.2.1, Swift 3 (latest syntax), this worked for me:
import AVFoundation
override func viewDidLoad() {
super.viewDidLoad()
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(AVAudioSessionCategoryPlayback, with: [.mixWithOthers])
try audioSession.setActive(true)
}catch{
// handle error
}
// the rest of your code
}
Set your AVAudioSession
category to Ambient
.
import AVFoundation.AVAudioSession
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, error: nil)
This category is also appropriate for “play along” style apps, such as a virtual piano that a user plays while the Music app is playing. When you use this category, audio from other apps mixes with your audio. Your audio is silenced by screen locking and by the Silent switch (called the Ring/Silent switch on iPhone).
As of xCode 7 October 14, 2015, this works for me.
Put this on the GameViewController.swift depending which Swift version you're using.
//Swift 2.2
import AVFoundation.AVAudioSession
//Swift 3.0
import AVFoundation
And put this code in the ViewDidLoad:
try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
The use of "try" is when you want the program to do something and then catch an error. It's an error handler. By adding the exclamation point, you're pretty much saying "I know this won't fail."
This works for me. I'm playing background music as my app is too.
Call this code on app launch so that your AVAudioSession lets other apps chime in:
let audioSession = AVAudioSession.sharedInstance()
audioSession.setCategory(AVAudioSessionCategoryPlayback, withOptions:AVAudioSessionCategoryOptions.MixWithOthers, error: nil);
audioSession.setActive(true, error: nil)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With