我试图用一个采样器来录制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()
}
答案 0 :(得分:0)
每次调用此函数时,您都在创建一个AKMIDICallbackInstrument的新实例。您似乎没有将这些引用存储在此代码块之外。尝试保留一个AKMIDICallbackIntruments的类级别数组,可以在其中添加您创建的新实例。