我在Swift中有一个二十一点游戏,在播放背景音乐。播放其他声音(例如放置筹码)时,背景音乐将停止。 我有一个用于启动和停止背景音乐的按钮,主要用于在通话中断后启动音乐。
我已经尝试了AVAudiosession的许多设置,例如环境和与其他声音的混合,但是当其他声音激活时,我无法让背景音乐继续播放。
按钮和播放器的代码。
class MusicPlayer {
static let shared = MusicPlayer()
func startBackgroundMusic() {
if let bundle = Bundle.main.path(forResource: "playlistbj", ofType: "mp3") {
let backgroundMusic = NSURL(fileURLWithPath: bundle)
do {
audioPlayer = try AVAudioPlayer(contentsOf: backgroundMusic as URL)
guard let audioPlayer = audioPlayer else {return}
audioPlayer.numberOfLoops = -1
audioPlayer.prepareToPlay()
audioPlayer.play()
} catch {
print(error)
}}
do{
if #available(iOS 10.0, *) {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers])
} else {
}
print("Playback ok")
try AVAudioSession.sharedInstance().setActive(true)
print("session is active")
guard let player = audioPlayer else{
return
}
player.play()
}
catch {
print ("oops")
}
}
@objc func didTapButton(){
if let player = audioPlayer, player.isPlaying{
//stop playback
button.setTitle("play", for: .normal)
player.pause()
}
else {
//set up player, and play
button.setTitle("pause", for: .normal)
let urlString = Bundle.main.path(forResource: "playlistbj", ofType: "mp3")
do{
if #available(iOS 10.0, *) {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers])
} else {
// Fallback on earlier versions
}
print("Playback ok")
try AVAudioSession.sharedInstance().setActive(true)
print("session is active")
guard let urlString = urlString else{
return
}
audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: urlString))
guard let player = audioPlayer else{
return
}
player.play()
}
catch {
print ("oops")
}
}
}
}