我要实现的目标是制作一种卡拉OK应用程序,在用户唱歌的同时在后台播放音乐。戴着耳机,一切似乎都可以正常工作,但是当我尝试在扬声器上录制和合并音频文件时,我面临一些同步问题。
我播放音频文件并立即开始录制。录制完成后,我同时播放了已录制的音频文件和原始配乐,并且似乎正在发生的事情是,当通过AVAudioPlayer
播放时,两个文件的音频之间都有微小的延迟(此问题不会使用耳机时不会出现,因为录制的音频没有从扬声器端口在后台播放音乐)。
我尝试使用SCRecorder记录文件(因为我也必须合并视频),并且都只使用AVAudioRecorder
,在两种情况下都略有延迟。通常,您无法分辨,但我必须同时播放录音和原始文件,以便它看起来有回声。由于音频中有很多节拍,所以它似乎也不合时宜。
如果我使用AVMutableComposition
从第0秒开始合并所有文件,那么即使我启动record
,仍然存在延迟,这使我相信录音本身存在延迟。和play
方法同时使用:
func startRecording(){
audioPlayer.play()
videoRecorder?.record()
delegate?.didStartRecording()
}
//prepareToRecord has been called way before during initialization of the class
现在,如果我为所有地方的播放强加0.1秒的延迟,问题就解决了,但我真的很想知道造成此问题的原因并找出解决方案。