问题1:
我的第一个问题涉及使用AVAudioPlayerNode
和AVAudioSequencer
进行MIDI播放时的回放同步。基本上,我正在尝试通过MIDI播放一些东西,但它们需要完美同步。
我知道AVAudioPlayerNode
有同步方法,但序列器似乎没有这样的方法。
目前,我已经尝试在单独的线程上使用CAMediaTime() + delay
和usleep
,但它们似乎并不起作用。
问题2:
我正在使用engine.inputNode
上的tap来获取录音,与音乐播放分开。但是,录制似乎是提前开始的。当我将记录的数据与原始回放进行比较时,差异约为300毫秒。我可以晚些时候再开始录制300毫秒,但即使如此,也不能保证精准同步,并且可能会因机器而异。
所以我的问题是,如何确保录制在回放开始的那一刻准确开始?
hostTime(forBeats:error:)
一直导致崩溃,但它确实让我走上了正确的道路。我会在我的答案中引用这个答案,并发布我所做的事情。 - funct7hostTime(forBeats:)
来解决了这个问题。 - dave234