2017-02-17 189 views
0

我在主StoryBoard上设置了4个UIButtons。连续播放多个音频文件

我想“Button4”实现连续的其他三个按钮的方法。 (首先,播放音频文件并设置选定的“Button1”,然后“Button2”,然后“Button3”)

然而,“Button2”和“Button3”同时播放。

  fileprivate var player1:AVAudioPlayer? 
      fileprivate var player2:AVAudioPlayer? 
      fileprivate var player3:AVAudioPlayer? 

      let url1 = Bundle.main.bundleURL.appendingPathComponent("music1.mp3") 
      let url2 = Bundle.main.bundleURL.appendingPathComponent("music2.mp3") 
      let url3 = Bundle.main.bundleURL.appendingPathComponent("music3.mp3") 

      @IBAction func pushButton1(sender: UIButton) { 
       Player(url: url1) 
      } 

      @IBAction func pushButton2(sender: UIButton) { 
       Player1(url: url2) 
      } 

      @IBAction func pushButton3(_ sender: UIButton) { 
       Player2(url: url1, url2: url2, url3: url3) 
      } 


      func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { 
       if (player === player1) { 
        yourButton.isSelected = false 
       } else if (player === player2) { 
        yourButton2.isSelected = false 
       } else if (player === player3) { 
        yourButton.isSelected = false 
        player2!.play() 
        yourButton2.isSelected = true 
        player2!.play() 
        yourButton3.isSelected = true 
        player1!.play() 
       } 
      } 

      func Player(url: URL) { 
       do { 
        try player1 = AVAudioPlayer(contentsOf:url) 
        player1!.play() 
        yourButton.isSelected = true 
        player1!.delegate = self 
       } catch { 
        print(error) 
       } 
      } 

      func Player1(url: URL) { 
       do { 
        try player2 = AVAudioPlayer(contentsOf:url) 
        player2!.play() 
        yourButton2.isSelected = true 
        player2!.delegate = self 

       } catch { 
        print(error) 
       } 
      } 

      func Player2(url: URL, url2: URL, url3: URL) { 
       do { 
        try player3 = AVAudioPlayer(contentsOf:url) 
        try player2 = AVAudioPlayer(contentsOf: url2) 
        try player1 = AVAudioPlayer(contentsOf: url3) 
        player3!.play() 
        yourButton.isSelected = true 
        player3!.delegate = self 
        player2!.delegate = self 
        player1!.delegate = self 
       } catch { 
        print(error) 
       } 
      } 
+0

你说,按下按钮4,其他按钮功能必须连续执行。这意味着每个音频文件应该连续播放。如果这是你要找的东西,请检查我的答案,并让我知道你是否面临任何问题 – KrishnaCA

回答

0

我相信,当你按下按钮4,播放器1,应首先播放时,该玩家2后该玩家3.对于此任务后,下面的代码应该工作。

let url1 = Bundle.main.bundleURL.appendingPathComponent("music1.mp3") 
let url2 = Bundle.main.bundleURL.appendingPathComponent("music2.mp3") 
let url3 = Bundle.main.bundleURL.appendingPathComponent("music3.mp3") 

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { 
    if (player === player1) { 
     yourButton.isSelected = false 
     yourButton2.isSelected = true 
     do { 
      //initialise player 2 
      player2 = try AVAudioPlayer(contentsOf: url2) 
      player2!.delegate = self 
     }catch { 

     } 
     player2!.play() 
    } else if (player === player2) { 
     yourButton3.isSelected = true 
     yourButton2.isSelected = false 
     do { 
      //initialise player 3 
      player3 = try AVAudioPlayer(contentsOf: url3) 
      player3!.delegate = self 
     }catch { 

     } 
     player3!.play() 
    } else if (player === player3) { 
     yourButton3.isSelected = false 
    } 
} 
+0

我试过了你的代码,但只播放了player1。 – risa8

+0

它看起来像player2,player 3没有用音频文件初始化。一旦你这样做,他们将被播放。让我编辑我的答案 – KrishnaCA

+0

@ risa8,尝试更新的代码 – KrishnaCA