Swift - 如何排队、暂停和停止一系列音频文件?

时间:2021-06-30 02:24:43

标签: swift xcode avaudioengine

我正在尝试将一系列音频事件排入队列,这些事件将全部按顺序播放,但我不确定如何正确地将它们排入队列,以便我可以暂停/恢复它们并完全停止它们。

我目前正在使用工作项,但目前没有成功杀死所有工作项或了解如何暂停/恢复它们。

下面的代码对我的应用程序的所有 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() 函数将终止当前音频,但不会终止排队的音频,而且我不确定如何暂停/恢复所有已排队的音频。

0 个答案:

没有答案