我正在尝试将一系列音频事件排入队列,这些事件将全部按顺序播放,但我不确定如何正确地将它们排入队列,以便我可以暂停/恢复它们并完全停止它们。
我目前正在使用工作项,但目前没有成功杀死所有工作项或了解如何暂停/恢复它们。
下面的代码对我的应用程序的所有 n 轮都使用了一个 while 循环,它基本上播放了一个钢琴文件,几秒钟后一个随机音符,然后是播音员的声音。
func callPlay() {
for _ in 1...Trainer.rounds {
//Cadence
workItem = DispatchWorkItem { self.trainer.playCadence() }
DispatchQueue.main.asyncAfter(deadline: .now() + timerMarker, execute: workItem!)
timerMarker += trainer.cadenceSecsLength
//Random Note
let note = self.trainer.getRandomNote()
workItem = DispatchWorkItem { self.trainer.playNote(note) }
DispatchQueue.main.asyncAfter(deadline: .now() + timerMarker, execute: workItem!)
timerMarker += announceDelay
//Note Announcement
let noteValue = K.noteFamily[Trainer.noteDistance][2]
workItem = DispatchWorkItem {
self.trainer.playNote(noteValue)
}
DispatchQueue.main.asyncAfter(deadline: .now() + timerMarker, execute: workItem!)
//New Round Delay
timerMarker += newRoundDelay
}
}
}
func stopPlayer() {
if ((Trainer.avaudioplayer) != nil) {
Trainer.avaudioplayer.stop()
}
}
stopPlayer() 函数将终止当前音频,但不会终止排队的音频,而且我不确定如何暂停/恢复所有已排队的音频。