Ios AudioKit 4.6版本:AkMidCallback乐器不回拨

Ios AudioKit 4.6版本:AkMidCallback乐器不回拨,ios,swift,audiokit,Ios,Swift,Audiokit,对4.6中的所有添加内容感到非常兴奋!在回顾了大部分更改之后,我在akmidiallbackinstrument中没有看到任何明显的不同,但是,我无法让回调继续工作。以下是我的实现: var sequencer: AKSequencer = AKSequencer() var callbackTrack: AKMusicTrack = AKMusicTrack() var callbackInst: AKMIDICallbackInstrument = AKMIDICallbackInstrum

对4.6中的所有添加内容感到非常兴奋!在回顾了大部分更改之后,我在
akmidiallbackinstrument
中没有看到任何明显的不同,但是,我无法让回调继续工作。以下是我的实现:

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
    }
var sequencer:AKSequencer=AKSequencer()
var callbackTrack:AKMusicTrack=AKMusicTrack()
var callbackInst:akmidiallbackinstrument=akmidiallbackinstrument()
---
公共函数setupSequencerWithBeats(beats:Int,bpm:Double){
打印(“Num beats:\(beats)\(BPM:\(BPM)”)
sequencer.setTempo(bpm)
callbackTrack=sequencer.newTrack()!
callbackTrack.setMIDIOutput(callbackInst.midiIn)
因为我在0..<拍{
添加(音符编号:MIDI音符编号(60),速度:100,位置:AKDuration(节拍:Double(i)),持续时间:AKDuration(节拍:1))
}
callbackInst.callback={status,noteNumber,velocity in
//使用新的AKMIDIStatus对象打开状态并检查它是否为。noteOn
如果让midiStatus=AKMIDIStatus(字节:status),那么midiStatus.type!=.noteOn
{
返回
}
//只是一些其他课程的代表
self.sequencerdDelegate?.diReceiveCallBackfromSequencer(beatNumber:self.beatNumber)
self.beatNumber+=1
}

当我调用
sequencer.play()
时,
callbackInst
无法再次启动回调。我的假设是
setMIDIOutput()发生了一些变化
方法?如果有更好的方法在我的sequencer中触发.noteOn事件时获取回调,我很想知道。谢谢大家!

感谢AudioKit contributor oettam在4.6.0中看到了一个影响所有MIDI组件的非常小的更改!这个问题在4.6.1中得到了修复!他的提交:

感谢AudioKit contributor感谢oettam在4.6.0中看到一个影响所有MIDI组件的非常小的更改!4.6.1解决了这个问题!他的提交: