Вы можете использовать AKMIDICallbackInstrument
для запуска кода на основе содержимого, которое воспроизводит ваш секвенсор.В этом случае добавьте дополнительную дорожку и установите для нее значение AKMIDICalllbackInstrument
.Добавьте событие к этой дорожке в той позиции, в которой вы хотите, чтобы ваш секвенсор остановился (вы можете использовать sequencer.length
, если вы еще не знаете, как долго это будет продолжаться).Затем настройте функцию обратного вызова прибора обратного вызова, чтобы остановить секвенсор при получении события.
var seq = AKSequencer()
var callbackInst: AKMIDICallbackInstrument!
var controlTrack: AKMusicTrack!
func setUpCallback() {
// set up a control track
controlTrack = seq.newTrack()
// add an event at the end
// we don't care about anything here other than the position
controlTrack.add(noteNumber: 60,
velocity: 60,
position: seq.length,
duration: AKDuration(beats: 1))
// set up the MIDI callback instrument
callbackInst = AKMIDICallbackInstrument()
controlTrack?.setMIDIOutput(callbackInst.midiIn)
// stop the sequencer when the control track's event's noteOn is recieved
callbackInst.callback = { statusByte, _, _ in
guard let status = AKMIDIStatus(statusByte: statusByte) else { return }
if status == .noteOn {
self.seq.stop()
}
}
}