Как сохранить аудиофайл с помощью AudioKit? - PullRequest
0 голосов
/ 29 мая 2018

У меня есть аудиофайл.Я сделал некоторые эффекты для него

let pitchshifter = AKPitchShifter(self.audioPlayer)
pitchshifter.shift = 10
AudioKit.output = pitchshifter

Это работает, если я играю в приложении, но я хочу сохранить его как новый файл, чтобы позже использовать его как avasset.Как это можно реализовать?

Я попытался с помощью AKNodeRecorder, но при этом получается пустая звуковая дорожка:

let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("recorded")
let format = AVAudioFormat(commonFormat: .pcmFormatFloat64, sampleRate: 44100, channels: 2, interleaved: false)!
let tape = try! AKAudioFile(forWriting: url, settings: format.settings)
let mixer = AKMixer(self.audioPlayer!, pitchshifter)
AudioKit.output = mixer
self.recorder = try! AKNodeRecorder(node: mixer, file: tape)

try? AudioKit.start()
self.audioPlayer?.play()
self.audioPlayer?.completionHandler = {
    self.recorder?.stop()
    self.selectedAudioURL = tape.url
}

Также я попробовал метод renderToFile - он также не работает , и я получил этоошибка

let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("recorded.m4a")
let format = AVAudioFormat(commonFormat: .pcmFormatFloat64, sampleRate: 44100, channels: 2, interleaved: false)!
let tape = try! AKAudioFile(forWriting: url, settings: format.settings)
try! AudioKit.renderToFile(tape, seconds: Double(CMTimeGetSeconds(self.selectedAudioAsset!.duration)))

Вот так я добавляю исходный файл в AudioKit:

let audioFile = try AKAudioFile(forReading: audioURL, commonFormat: .pcmFormatFloat32, interleaved: true)
let player = AKPlayer(audioFile: audioFile)
self.audioFile = audioFile
self.audioPlayer = player
player.startTime = self.startTime
AKSettings.defaultToSpeaker = true

Заранее спасибо за ответ!

1 Ответ

0 голосов
/ 06 июня 2018

Из того, что я нашел, вы должны использовать prerenderer, чтобы "воспроизвести" то, что вы хотите записать:

try AudioKit.renderToFile(outputFileForWriting, duration: sequencerTotalSeconds, prerender: {
    self.sequencer.play()
})

Но, для меня ... Рендеринг последовательности из одного трека производит синусоидальный звук.: - /

Надеюсь, это поможет!

...