AudioKit рендеринг нескольких файлов параллельно - PullRequest
0 голосов
/ 30 ноября 2018

Проблема

Я работаю с 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 для образца - это рекомендуемый / возможный способ архивирования этой задачи?

...