#swift #xcode #avaudioengine
Вопрос:
Я пытаюсь поставить в очередь серию звуковых событий, которые будут воспроизводиться последовательно, но я не уверен, как правильно поставить их в очередь, чтобы я мог приостановить/возобновить их, а также полностью остановить.
В настоящее время я использую рабочие элементы, но в настоящее время не добиваюсь успеха в уничтожении всех рабочих элементов или понимании того, как их приостановить/возобновить.
В приведенном ниже коде используется цикл while для всех n раундов моего приложения, который в основном воспроизводит файл фортепиано, случайную ноту через несколько секунд, а затем голос диктора.
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() отключит текущее аудио, но не поставленное в очередь аудио, и я не уверен, как приостановить/возобновить все аудио, которые были поставлены в очередь.