2016-03-07 2 views
0

У меня есть две функции. Сначала вы выбираете список имен для воспроизведения звука, а второй - это фактическая функция игрока. Проблема в том, что она играет только последнюю. Он не играет один за другим, ожидая завершения следующего. Как это можно выполнить в последовательности? Я попытался добавить: dispatch_after (DISPATCH_TIME_NOW, dispatch_get_main_queue(), {}) ... все еще не работает. Любое возможное решение. Заранее спасибо!Воспроизведение аудиофайла в последовательности usign 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

 Смежные вопросы

  • Нет связанных вопросов^_^