如何解决AudioKit 弹跳录音同步
我需要帮助解决一个问题...我在 AudioKit 4 中使用 renderToFile 记录反弹,一位艺术家抱怨不同的轨道没有与样本对齐。在 preRender 中,我们有一个播放器列表,这些播放器设置为连续播放的不同曲目和记录,问题是我无法设置 AVAudioTime 调度,因为它崩溃了,我想是由于引擎处于手动渲染模式的事实。有没有办法将它们同步到样本?我想这是一个与底层 AVAudioEngine 相关的问题...
我不能使用 AVMutableComposition,因为我们需要录音与 AudioKit 播放的完全一样,而且音量会有所不同。
解决方法
我在设置离线渲染模式后以及离线后回到在线渲染模式后都遇到过随机崩溃。
这种情况似乎是由这种情况触发的:
- 在引擎尚未完全完成处理时设置离线渲染模式。
- 在调用
disableManualRenderingMode
后立即开始处理,没有给引擎足够的时间来启动。
我发现的一个部分解决方法是在设置离线模式之前等待一段时间,以及在上线后等待一小段时间。所以我的代码中有如下函数:
func setOnlineMode(successCompletion: @escaping() -> Void,failCompletion: @escaping() -> Void) {
AKManager.engine.stop()
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.5,execute: {
AKManager.engine.disableManualRenderingMode()
do {
try AKManager.engine.start()
} catch {
print("failed to start engine")
failCompletion()
}
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.5,execute: {
successCompletion()
})
})
}
我也尽量避免在进入离线模式后重置引擎:
/* From AudioKit renderToFile function */
try AKTry {
// Engine can't be running when switching to offline render mode.
if self.isRunning { self.stop() }
try self.enableManualRenderingMode(.offline,format: audioFile.processingFormat,maximumFrameCount: maximumFrameCount)
// This resets the sampleTime of offline rendering to 0.
self.reset() /* I don't do this */
try self.start()
}
老实说,我对代码进行了大量修改,以避免在在线和离线模式之间来回切换。在如上所述的延迟之后,我现在只在我的应用程序中的某一点执行此操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。