2016-03-07 23 views
0

我有兩個函數。第一個循環播放音頻名稱列表,第二個是實際的播放器功能。問題是它只播放最後一個。它不會一個接一個地等待下一個結束。如何在一個序列中執行?我試圖添加:dispatch_after(DISPATCH_TIME_NOW,dispatch_get_main_queue(),{})...仍然不起作用。任何可能的方案。先謝謝你!播放序列中的音頻文件swift

func startGame(){ 
      audioPlay("NowListen") 
      for i in 0...self.soundArray.count - 1 { 
        print(self.soundArray[i]) 
        self.audioPlay(self.soundArray[i]) 
      } 

     } 



func audioPlay(name: String){ 
      var alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("\(name)", ofType: "mp3")!) 
      print(alertSound) 
      // try to play sound 
      do{ 
       self.audioPlayer = try AVAudioPlayer(contentsOfURL: alertSound) 
       self.audioPlayer.prepareToPlay() 
       self.audioPlayer.play() 
      } catch { 

      } 

    } 

回答

3

使用AVQueuePlayer(INIT它在開始的項目,它會在隊列中,一個接一個打),而不是AVAudioPlayer的類。

在你開始遊戲,你可以做到以下幾點:

var audioItems: [AVPlayerItem] = [] 
    for audioName in soundsArray { 
     let url = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(audioName, ofType: "mp3")!) 
     let item = AVPlayerItem(URL: url) 
     audioItems.append(item) 
    } 

    let player = AVQueuePlayer(items: audioItems) 
    player.play() 
+0

你能提供簡單的例子,請 – Stanislav

+0

謝謝你,代碼看起來不錯,但有些它爲什麼不打...... – Stanislav

+1

保存玩家的地方,否則將在此方法/塊/函數後釋放此函數 – ogres