有时我需要一些长音符才能在音序器停止后继续播放.
akSequencer.stop() // Need to put some code to ask the question
Run Code Online (Sandbox Code Playgroud)
当AKSequencer停止时,有没有办法保持长音的声音?
不要将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)
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |