我正在研究一种多音频播放项目。首先,我在一个文件夹中有10个mp3文件。我希望AKPlayer随机播放这些音频文件之一,但顺序播放-一个接一个。但是在另一个随机文件之后播放一个随机文件似乎很棘手。这是我写的:
let file = try? AKAudioFile(readFileName: String(arc4random_uniform(9)+1) + ".mp3")
let player = AKPlayer(audioFile: file!)
player1.isLoopiong = true
player.buffering = .always
AudioKit.output = AKPlayer
try? AudioKit.start()
player.start(at: startTime)
此代码将永远循环第一个选择的随机文件-但我只想播放每个随机文件一次。有什么方法可以重新加载“文件”,以便播放器在完成播放后重新启动?我试过调用多个AKPlayers(但是调用10个玩家肯定是错误的),如果player.isPlaying = false,sequencer等,但无法确切地知道怎么做。对于这样的新手问题表示歉意。非常感谢。
答案 0 :(得分:2)
AKPlayer
具有完成处理程序
在音频播放完毕后被调用。该处理程序将不会被调用 如果在播放时或从缓冲区循环时调用了stop()。
完成处理程序类型为AKCallback
,它是() -> Void
的类型别名。如果您有充分的理由不使用10个AKPlayer
,则可以使用完成处理程序来更改文件并重新启动播放器。但是,您还可以创建一个包含10个AKPlayer
的数组,每个数组加载一个不同的文件,并具有一个随机选择播放器进行播放的功能(或循环播放经过预混洗的数组)。适当时,数组中每个玩家的完成处理程序可以调用此函数。根据上面引用的文档,请确保AKPlayer
没有循环,否则将不会调用完成处理程序。
答案 1 :(得分:1)
是的,您可以使用播放器的完成处理程序在播放完成时将新文件加载到同一播放器中。在您的完成块中:
player.load(url: nextFile)
player.play()
另一种方法是将AKClipPlayer与10个预定随机顺序的片段一起使用,并按顺序安排它们。这种方法将是最无缝的(如果需要的话)。