【问题标题】:AudioKit 4.6 release: AKMIDICallbackInstrument not calling backAudioKit 4.6 版本:AKMIDICallbackInstrument 没有回调
【发布时间】:2026-01-18 21:50:01
【问题描述】:

对 4.6 中的所有新增功能感到非常兴奋!在查看了大部分更改后,我在 AKMIDICallbackInstrument 中没有看到任何明显不同的地方,但是,我无法再让电话恢复工作了。这是我的实现:

var sequencer: AKSequencer = AKSequencer()
var callbackTrack: AKMusicTrack = AKMusicTrack()
var callbackInst: AKMIDICallbackInstrument = AKMIDICallbackInstrument() 

---

public func setupSequencerWithBeats(beats: Int, bpm: Double) {

    print("Num beats: \(beats) | BPM: \(bpm)")
    sequencer.setTempo(bpm)

    callbackTrack = sequencer.newTrack()!
    callbackTrack.setMIDIOutput(callbackInst.midiIn)

    for i in 0 ..< beats {
        callbackTrack.add(noteNumber: MIDINoteNumber(60), velocity: 100, position: AKDuration(beats: Double(i)), duration: AKDuration(beats: 1))
        }

    callbackInst.callback = {status, noteNumber, velocity in

        //Using the new AKMIDIStatus object to unwrap the status and check if it's .noteOn
        if let midiStatus = AKMIDIStatus(byte: status), midiStatus.type != .noteOn
            {
                return
            }

        // just some delegates to other classes                 
        self.sequencerdDelegate?.didRecieveCallbackFromSequencer(beatNumber: self.beatNumber)
        self.beatNumber += 1
    }

当我调用sequencer.play() 时,callbackInst 无法再触发回调。我的假设是 setMIDIOutput() 方法有什么变化吗?如果在我的音序器中触发 .noteOn 事件时有更好的方法来获取回调,我很想知道。谢谢大家!

【问题讨论】:

    标签: ios swift audiokit


    【解决方案1】:

    感谢 AudioKit 贡献者 oettam 看到 4.6.0 中影响所有 MIDI 组件的非常小的变化!此问题已在 4.6.1 中修复!他的提交:https://github.com/AudioKit/AudioKit/commit/dcfbbb98058425e43af23b9df69fd9794ecc34d5

    【讨论】: