audiokit - 停止 AKSequencer 后的长注释

标签 audiokit

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

akSequencer.stop() // Need to put some code to ask the question

当 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
        }
    }
}

关于audiokit - 停止 AKSequencer 后的长注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50682689/

相关文章:

ios - 使用 AudioKit 在 UIView 中绘制波形

ios - AudioKit ios AKSequencer 无法准确地重新开始播放

ios - 从 AudioKit 的 FFT 图中检索数据

ios - AudioKit:何时使用 AKOperationGenerator 或 AKOscillator?

swift - Audiokit 奇怪的小频率振幅值

swift - 使用 AKSequencer GenData 和 LoadMIDIFile 的 AudioKit

ios - 使用预编译框架更新 AudioKit for Swift 5

ios - 如何使用 AudioKit 的新 AKSequencer 播放 MIDI

ios - AudioKit 多个 AKMIDISampler

swift - "retriggering"AudioKit 中的 Midi 音符