同步播放 AKSamplerMetronome 和 AKAppleSequencer

Posted

技术标签:

【中文标题】同步播放 AKSamplerMetronome 和 AKAppleSequencer【英文标题】:Sync playing AKSamplerMetronome and AKAppleSequencer 【发布时间】:2020-05-23 10:55:14 【问题描述】:

感谢 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 音序器的声音出现分歧。 我怎样才能得到准确的解决方案?

【问题讨论】:

【参考方案1】:

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

【讨论】:

酷,谢谢!因此,如果我想在循环中创建完整的轨道节拍器,我应该使用 sequencer.length.beats(midi 文件轨道的)编号来创建节拍器音符吗?以及如何使用 wav 文件来播放这些节拍器的点击(我可以)?

以上是关于同步播放 AKSamplerMetronome 和 AKAppleSequencer的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中同步 TargetDataLine 和 SourceDataLine(同步音频录制和播放)

支持多人异地同步播放的视频播放器

FFmpeg学习6:视音频同步

在不同的计算机上同步播放和录制

音视频同步

自动播放时 twitter-bootstrap 轮播导航和内容不同步