当播放其他声音时,如何设置背景音乐以继续播放

时间:2020-07-07 23:12:31

标签: ios swift

我在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")
            }
        }
    }
    }


0 个答案:

没有答案