【swift1.1】音を同時に複数再生する方法 | 30歳から始めたプログラミング

【swift1.1】音を同時に複数再生する方法

AVAudioPlayerで音を複数同時に鳴らそうとすると1つ前の音が強制的に消されますが複数同時に鳴らすことも出来ます。言葉で端的に説明するとプロパティにした配列にAVAudioPlayerを詰め込んで再生が終わったら割り当てたAVAudioPlayerを削除します。

 

 

 

●ファイル分けしたクラス(この方が使いやすいはず)

import AVFoundation

 

class soundtest: NSObject , AVAudioPlayerDelegate {

    var AP = [AVAudioPlayer]()

    func playsound(soundFile: String){

        let url = NSURL(fileURLWithPath:NSBundle.mainBundle().pathForResource(soundFile, ofType: "mp3")!)    //swift1.1

        if var player:AVAudioPlayer = AVAudioPlayer(contentsOfURL: url, error: nil) {

        

            AP.append(player)

            //audioPlayerDidFinishPlaying(下のメソッド)が動作するようになる

            player.delegate = self  //classのカッコ部分にも,AVAudioPlayerDelegateを追加しないと動作しない

            player.prepareToPlay()

            player.play();

            

        }

    }

    //音の再生が終わったら実行してくれるデリゲートメソッド

    func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool) {

        let index:Int = find(AP, player)!   //swift1.1

        AP.removeAtIndex(index)

    }

}

 

●ルートクラス(最初に動作するもの)の記述

 

var ST:soundtest = soundtest()    //プロパティのところに書く

 

override func viewDidLoad() {

 

    ST.playsound("testSE")    //鳴らしたいmp3ファイル名

 

}

 

 

 

さてそれはともかく脱出サスペンスその3のギミックですが!

 

やっぱり閃かない!焦ります!