Вместо того, чтобы подключать MIDI-выход вашего AKMusicTrack непосредственно к вашему сэмплеру (или к генератору, или какому-либо другому), отправьте его на AKCallbackInstrument
.В функции обратного вызова вы можете проверить состояние MIDI-сообщений секвенсора и отправить оттуда ваши сообщения noteOn и noteOff на ваш сэмплер.В обратный вызов вы можете добавить условную логику, например, вы можете использовать некоторый флаг, чтобы игнорировать сообщения noteOff при определенных условиях.
Для записи, я всегда настраиваю свои секвенсоры, так как вы можете управлять не только вашим сэмплером, но и внешним MIDI, Audiobus MIDI и т. Д., А также обновлениями пользовательского интерфейса из одного и того жеAKMusicTrack использует обратный вызов.
var seq = AKSequencer()
var sampler = AKAppleSampler()
var callbackInst: AKCallbackInstrument!
var track: AKMusicTrack!
var allowNoteOff: Bool = true
func setupSequencerCallback() {
track = seq.newTrack()
callbackInst = AKCallbackInstrument()
track.setMIDIOutput(callbackInst.midiIn)
callbackInst.callback = { status, note, vel in
switch status {
case .noteOn:
try? self.sampler.play(noteNumber: note, velocity: vel, channel: 0)
case .noteOff:
if self.allowNoteOff {
try? self.sampler.stop(noteNumber: note, channel: 0)
}
default:
return
}
}
}