如何使用AudioKit保存音频文件?

10

我有一个音频文件。我对它进行了一些效果处理。

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个回答

5

根据我所了解的,您需要使用预渲染器来“播放”您想要记录的内容:

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

但是,对于我来说...渲染出单个轨道序列会产生一个正弦声音。 :-/

希望这能帮到你!


3
非常感谢!我在prerender模块中添加了self.player.play(),现在它可以正常工作了! - Mikita Kaltsou
1
@August,关于无声音的问题你有什么解决方案吗? - iOS Lifee
据我所记,代码库正在转换为使用新类型的输出。而且,我认为这个过程正在进行中--之后我就不确定了。 - August
也许可以从这里的“render”问题中找到一些信息:https://github.com/AudioKit/AudioKit/issues?utf8=✓&q=is%3Aissue+render+ - August

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接