停止 AKSequencer 后的长音符
Long notes after stop AKSequencer
有时我需要一些长音符在音序器停止后继续播放。
akSequencer.stop() // Need to put some code to ask the question
有没有办法在AKSequencer停止时保留长音的声音?
与其将 AKMusicTrack 的 MIDI 输出直接连接到采样器(或振荡器组或其他),不如将其发送到 AKCallbackInstrument
。在回调函数中,您可以检查音序器的 MIDI 消息的状态,并从那里将您的 noteOn 和 noteOff 消息发送到您的采样器。在回调中,您可以添加条件逻辑,例如,您可以使用一些标志在某些条件下忽略 noteOff 消息。
郑重声明,这就是我设置音序器的方式,因为您不仅可以控制采样器,还可以控制外部 MIDI、Audiobus MIDI 等,以及 UI 更新,从同一个 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
}
}
}
有时我需要一些长音符在音序器停止后继续播放。
akSequencer.stop() // Need to put some code to ask the question
有没有办法在AKSequencer停止时保留长音的声音?
与其将 AKMusicTrack 的 MIDI 输出直接连接到采样器(或振荡器组或其他),不如将其发送到 AKCallbackInstrument
。在回调函数中,您可以检查音序器的 MIDI 消息的状态,并从那里将您的 noteOn 和 noteOff 消息发送到您的采样器。在回调中,您可以添加条件逻辑,例如,您可以使用一些标志在某些条件下忽略 noteOff 消息。
郑重声明,这就是我设置音序器的方式,因为您不仅可以控制采样器,还可以控制外部 MIDI、Audiobus MIDI 等,以及 UI 更新,从同一个 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
}
}
}