停止AKSequencer后的长音符

Fis*_*her 2 audiokit

有时我需要一些长音符才能在音序器停止后继续播放.

akSequencer.stop() // Need to put some code to ask the question
Run Code Online (Sandbox Code Playgroud)

当AKSequencer停止时,有没有办法保持长音的声音?

c_b*_*oth 5

不要将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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)