有时,我需要一些长的音符,以继续播放后,排序器停止。
akSequencer.stop() // Need to put some code to ask the question当AKSequencer停止时,有没有办法保持长音符的声音?
发布于 2018-06-04 21:51:14
与其将AKMusicTrack的MIDI输出直接连接到取样器(或振荡器库或其他什么),不如将其发送到AKCallbackInstrument。在回调函数中,您可以检查排序器的MIDI消息的状态,并将您的noteOn和noteOff消息从那里发送到您的取样器。在回调中,您可以添加条件逻辑,例如,可以使用一些标志来忽略某些条件下的noteOff消息。
为了记录在案,我总是这样设置我的排序器,因为您不仅可以通过回调从同一个AKMusicTrack控制外部MIDI、Audiobus MIDI等以及UI更新。
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
}
}
}https://stackoverflow.com/questions/50682689
复制相似问题