【问题标题】:Playing multiple audio files in a row连续播放多个音频文件
【发布时间】:2017-02-17 10:35:02
【问题描述】:

我在 Main StoryBoard 上设置了 4 个 UIButton。

我想让“Button4”连续实现其他三个Button的方法。 (首先,播放一个音频文件并设置选择的“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)
                }
            }

【问题讨论】:

  • 你说,按4号按键,其他按键功能必须连续实现。这意味着每个音频文件都应该连续播放。如果这是您要查找的内容,请查看我的答案,如果您遇到任何问题,请告诉我

标签: ios swift


【解决方案1】:

我相信当您按下按钮 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
    }
}

【讨论】:

  • 我试过你的代码,但只播放了 player1。
  • 播放器 2、播放器 3 似乎没有使用音频文件进行初始化。一旦你这样做,它们就会被播放。让我编辑我的答案
  • @risa8,我用你正在使用的变量更新了它
  • 嗯我仍然收到错误“参数标签(url)不匹配任何可用的重载”
  • @risa8,初始化有些问题。现在改正了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
  • 2018-02-14
相关资源
最近更新 更多