我正在与AudioKit一起在我的应用程序上编辑样本。我正在改变音调,音量和速度。在所有更改均为模式之后,我将其渲染为单独的文件。所有渲染都发生在主线程上。我需要一种并行处理所有渲染的方法,以提高性能。
我有以下设置:
private func setPlayer() {
player = try? AKAudioPlayer(file: AKAudioFile())
player.completionHandler = {
NotificationCenter.default.post(name: .AudioSessionPlayerDidEndLoop, object: nil)
}
timePitch = AKTimePitch(player)
offlineRender = AKOfflineRenderNode(timePitch)
player.looping = shouldLoop
AKSettings.playbackWhileMuted = true
AudioKit.output = offlineRender
}
我正在更改timePitch
的效果和player
的音量。然后,我使用此块将每个样本成功渲染为新的音频文件:
if let renderFile = try? AKAudioFile(forWriting: url!, settings: settings) {
if #available(iOS 11, *) {
try? AudioKit.start()
try? AudioKit.renderToFile(renderFile, duration: player.duration/timePitch.rate, prerender: {
self.playForRender()
})
} else {
//oldRender(renderFile, duration: player.duration/timePitch.rate)
}
}
效果很好,但是对于我的用例来说有点慢。 15秒内可渲染60个样本。
由于我仅使用一个player
,并且AudioKit
是一个单例,因此我知道无法在单独的线程中运行每个渲染。
是否可以使用AudioKit
并行渲染多个音频文件?建议/可行的方式是为每个样本创建一个player
吗?