【问题标题】:AudioKit bounce recording syncAudioKit 反弹录音同步
【发布时间】:2021-06-26 11:25:17
【问题描述】:
我需要帮助解决一个问题...我正在使用 AudioKit 4 中的 renderToFile 录制弹跳,一位艺术家抱怨不同的轨道未与样本对齐。在 preRender 中,我们有一个播放器列表,其中包含设置为连续播放的不同曲目和记录,问题是我无法设置 AVAudioTime 调度,因为它崩溃了,我想是因为引擎处于手动渲染模式。有没有办法将它们同步到样本?我想这是一个与底层 AVAudioEngine 相关的问题......
我不能使用 AVMutableComposition,因为我们需要录音与 AudioKit 播放的完全相同,而且音量会有所不同。
【问题讨论】:
标签:
ios
swift
audiokit
avaudioengine
【解决方案1】:
我在设置离线渲染模式后,以及在离线后回到在线渲染模式后都经历过随机崩溃。
这种情况似乎是由这种情况触发的:
- 在引擎未完全完成处理时设置离线渲染模式。
- 在调用
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()
}
说实话,我已经大量修改了我的代码以避免在在线和离线模式之间来回切换。在如上所述的延迟之后,我现在只在我的应用程序中的某个时间点执行此操作。