Проблема
Я работаю с 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)
}
}
Он прекрасно работает, но немного медленен для моего варианта использования .60 сэмплов рендерит за 15 секунд.
Поскольку я использую только один player
, а AudioKit
- это синглтон, я знаю, что не могу запустить каждый рендеринг в отдельном потоке.
Вопрос
Существует ли способ рендеринга нескольких аудиофайлов параллельно с AudioKit
?Создать player
для образца - это рекомендуемый / возможный способ архивирования этой задачи?