如何让我的 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()
}
我正在尝试制作一个播放一系列与数组内容相关的铃声的应用程序,每当播放所有铃声时,应用程序应该从数组的开头重新开始播放它们。
这是我的代码:
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()
}