audioPlayer3再生時にplayer3!とplayer1!そしてplayer2!が順番に再生されるようにコードを記述したいと思います。
下記のコードではplayer1!とplayer2!の間にdelayなどがないため、両方同時に再生されてしまいます。
最初にplayer1、次にplayer2が順に再生されるようにするためにどのようにコードを記述する必要がありますか?
AVAudioPlayerの代わりに、AVQueuePlayerを利用することで解決するかと思いますが、AVQueuePlayerの情報などが少なく困っています。
fileprivate var player1:AVAudioPlayer? fileprivate var player2:AVAudioPlayer? fileprivate var player3:AVAudioPlayer? @IBAction func pushButton1(sender: UIButton) { audioPlayer1(url: url1) } @IBAction func pushButton2(sender: UIButton) { audioPlayer2(url: url2) } @IBAction func pushButton3(_ sender: UIButton) { audioPlayer3(url: url1, url2: url2, url3: url3) } func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { if (player === player1) { yourButton1.isSelected = false } else if (player === player2) { yourButton2.isSelected = false } else if (player === player3) { //player1!とplayer2!が同時に再生される yourButton3.isSelected = false player1!.play() yourButton1.isSelected = true player2!.play() yourButton2.isSelected = false } } func audioPlayer1(url: URL) { do { try player1 = AVAudioPlayer(contentsOf:url) player1!.play() yourButton1.isSelected = true player1!.delegate = self } catch { print(error) } } func audioPlayer2(url: URL) { do { try player2 = AVAudioPlayer(contentsOf:url) player2!.play() yourButton2.isSelected = true player2!.delegate = self } catch { print(error) } } func audioPlayer3(url: URL, url2: URL, url3: URL) { do { try player3 = AVAudioPlayer(contentsOf:url3) try player1 = AVAudioPlayer(contentsOf: url1) try player2 = AVAudioPlayer(contentsOf: url2) player3!.play() yourButton3.isSelected = true player3!.delegate = self player1!.delegate = self } catch { print(error) } } }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。