Синхронизация воспроизведения AKSamplerMetronome и AKAppleSequencer

Спасибо за АудиоКит! У меня следующий вопрос: я пытаюсь получить идеальную синхронизацию воспроизведения AKSampleMetronome и одного миди-файла, завернутого в AKMIDISampler. Вот мой код:

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)

Через некоторое время звук метронома и миди-секвенсора расходится. Как я могу добиться точного решения для этого?


person pavelcauselov    schedule 23.05.2020    source источник


Ответы (1)


Есть много способов сделать это, но я бы сделал одну из дорожек в секвенсоре дорожкой метронома и отправил этот миди-сигнал на миди-сэмплер.

person Aurelius Prochazka    schedule 23.05.2020
comment
Круто, Спасибо! Итак, если я хочу создать полноценный метроном в зацикливании, должен ли я использовать номер sequencer.length.beats (дорожки миди-файла) для создания нот метронома? И как я могу использовать файлы wav для воспроизведения этих щелчков метронома (могу ли я)? - person pavelcauselov; 23.05.2020