如何让我的 iOS 应用程序连续循环播放声音播放列表?

How can I make my iOS app continuously loop through a playlists of sounds?

我正在尝试制作一个播放一系列与数组内容相关的铃声的应用程序,每当播放所有铃声时,应用程序应该从数组的开头重新开始播放它们。

这是我的代码:

var counter = 0
var song = ["1","2","3","4"]

func music() {
    while counter < song.count {

        var audioPath = NSBundle.mainBundle().pathForResource("\(song[counter])", ofType: "wav")!
        var error : NSError? = nil
        player = AVAudioPlayer(contentsOfURL: NSURL(string: audioPath), error: &error)
        if error == nil {
            player.delegate = self
            player.prepareToPlay()
            player.play()
        }


        func audioPlayerDidFinishPlaying(player: AVAudioPlayer!, successfully flag: Bool) {
            if flag {
                counter++
            }
        }

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

    }
}

我怎样才能做到这一点?

这里不需要循环。逻辑如下:你播放一个音乐文件,当这个文件结束时你增加计数器并播放下一个文件

var counter = 0
var song = ["1","2","3","4"]

func music()
{

var audioPath = NSBundle.mainBundle().pathForResource("\(song[counter])", ofType: "wav")!
var error : NSError? = nil
player = AVAudioPlayer(contentsOfURL: NSURL(string: audioPath), error: &error)
if error == nil {
    player.delegate = self
    player.prepareToPlay()
    player.play()
}

func audioPlayerDidFinishPlaying(player: AVAudioPlayer!, successfully flag: Bool)
{
    player.delegate = nil

    if flag {
        counter++
    }

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

    music()
}

您可以使用 AVQueuePlayer...

轻松做到这一点
let song = ["1","2","3","4"]

func music() {

    let items = song.compactMap {
        Bundle.main.url(forResource: "\([=10=])", withExtension: "wav")
    }.map {
        AVPlayerItem(url: [=10=])
    }

    let player = AVQueuePlayer(items: items)

    player.delegate = self
    player.play()
}