2015-10-16 3 views
-1

У меня 10 URL-файлов музыкальных файлов. Я хочу создать очередь музыки, где все песни будут воспроизводиться один за другим, а также я могу изменить индекс конкретного файла.Создать очередь музыкальных файлов для воспроизведения

Я использую быстрый 2,0

Для экс: iPhone по умолчанию список воспроизведения Игра.

+0

Возможный дубликат [AVAudioPlayer - воспроизведение нескольких аудиофайлов в последовательности] (http://stackoverflow.com/questions/621182/avaudioplayer-playing-multiple-audio-files-in-sequence) –

+0

Спасибо @Badal, но я нужна быстрая версия 2.0. –

ответ

2

Вы можете использовать AVAudioPlayerDelegate для этого, как показано в приведенном ниже примере кода:

import UIKit 
import AVFoundation 

class ViewController: UIViewController, AVAudioPlayerDelegate { 

    var counter = 0 
    var song = ["1","2","3"] //Song names array 
    var player = AVAudioPlayer() 

    @IBOutlet weak var musicSlider: UISlider! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     musicSlider.value = 0.0 
    } 

    func updateMusicSlider(){ 

     musicSlider.value = Float(player.currentTime) 
    } 

    @IBAction func playSong(sender: AnyObject) { 

     music() 
    } 
    @IBAction func sliderAction(sender: AnyObject) { 

     player.stop() 
     player.currentTime = NSTimeInterval(musicSlider.value) 
     player.play() 
    } 

    func music(){ 

     let audioPath = NSBundle.mainBundle().pathForResource("\(song[counter])", ofType: "mp3")! 
     var error : NSError? = nil 
     do { 
      player = try AVAudioPlayer(contentsOfURL: NSURL(string: audioPath)!) 
     } catch let error1 as NSError { 
      error = error1 
     } 
     musicSlider.maximumValue = Float(player.duration) 
     NSTimer.scheduledTimerWithTimeInterval(0.05, target: self, selector: Selector("updateMusicSlider"), userInfo: nil, repeats: true) 
     player.delegate = self 
     if error == nil { 
      player.delegate = self 
      player.prepareToPlay() 
      player.play() 
     } 
    } 
    // Delegate method for AVAudioPlayerDelegate which is called every time when song finished. 
    func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool){ 

     if flag { 
      counter++ 
     } 

     if ((counter + 1) == song.count) { 
      counter = 0 
     } 

     music() 
    } 
} 

Sample для получения дополнительной информации.

Надеюсь, это поможет.

+0

Спасибо, что спасли мой День. –

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