连续播放多个音频文件

时间:2017-02-17 10:35:03

标签: ios swift

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

1 个答案:

答案 0 :(得分:0)

我相信当你按下按钮4时,应该首先播放播放器1,然后播放播放器2之后播放播放器1.然后播放该播放器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
    }
}