Я пытаюсь записать MIDI-треки с одним сэмплером, но в то же время. Для каждой новой записи создается новая дорожка на секвенсоре, инструменте обратного вызова с использованием другого канала.
Когда дорожки не пересекаются, все работает нормально. Но когда я добавляю ноты для новой дорожки, которые пересекаются с уже записанной дорожкой, только что записанная дорожка при воспроизведении не будет вызывать функцию обратного вызова для звука, и это будет стандартный звуковой сигнал.
Вот код настройки трека и функции обратного вызова:
func startRecord() {
guard let newTrack = sequencer.newTrack() else { return }
recordingTrack = newTrack
recordingChannel = MIDIChannel(sequencer.tracks.count)
let midiInstrument = AKMIDICallbackInstrument()
let channel = recordingChannel
let sampler = currentSampler
midiInstrument.callback = { (status, note, velocity) in
let status = AKMIDIStatus(byte: status)!.type!
switch status {
case .noteOn:
try! sampler.play(noteNumber: note, velocity: velocity, channel: channel!)
case .noteOff:
try! sampler.stop(noteNumber: note, channel: channel!)
default:
break
}
}
newTrack.setMIDIOutput(midiInstrument.midiIn)
sequencer.rewind()
sequencer.preroll()
sequencer.play()
}