同步播放 AKSamplerMetronome 和 AKAppleSequencer

Sync playing AKSamplerMetronome and AKAppleSequencer

感谢 AudioKit! 我有下一个问题: 我正在尝试让 AKSampleMetronome 和一个包含在 AKMIDISampler 中的 midi 文件实现理想的同步播放。这是我的代码:

let metronome = AKSamplerMetronome()
let mixer = AKMixer()
let midiSampler = AKMIDISampler()
midiSampler.samplerUnit.loadSoundBankInstrument(....)
metronome >>> mixer
midiSampler >>> mixer
AudioKit.output = mixer
AudioKit.start()
let sequencer = AKAppleSequencer(filename: "midifilename")
sequencer.enableLooping()
sequencer.tracks[1].setMIDIOutput(midiSampler.midiIn)
//now play
sequencer.play()
metronome.beatTime = 0
metronome.play()

但是当我像这样改变速度时:

sequencer.setTempo(bpm)
let now = AVAudioTime(hostTime: mach_absolute_time())
metronome.setTempo(Double(bpm), at: now)

过了一会儿,节拍器和 MIDI 音序器的声音分开了。 我怎样才能获得准确的解决方案?

有很多方法可以做到这一点,但我会将音序器中的其中一条轨道设为节拍器轨道,并将该 midi 信号发送到 midiSampler。