对于上下文,我一直在关注 Apple 的文档。您可以在那里下载代码以重现此问题。 https://developer.apple.com/documentation/avfaudio/audio_engine/performing_offline_audio_processing?changes=__6&language=objc.
本质上,我正在尝试使用 AVAudioEngine 将一个 .wav 文件转换为另一个 .wav 文件。
在示例中,我使用的是这个而不是苹果的代码。只需使用 .wav 文件即可。
let sourceFile: AVAudioFile
let format: AVAudioFormat
do {
let sourceFileURL = Bundle.main.url(forResource: "totransform", withExtension: "wav")!
sourceFile = try AVAudioFile(forReading: sourceFileURL)
format = sourceFile.processingFormat
} catch {
fatalError("Unable to load the source audio file: \(error.localizedDescription).")
}
然后当我尝试转换它时,我使用它而不是 Apple 的代码。正在尝试转换为 .wav 文件。这就是我遇到问题的地方。
let buffer = AVAudioPCMBuffer(pcmFormat: engine.manualRenderingFormat,
frameCapacity: engine.manualRenderingMaximumFrameCount)!
let outputFile: AVAudioFile
do {
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let outputURL = documentsURL.appendingPathComponent("output.wav")
outputFile = try AVAudioFile(forWriting: outputURL, settings: sourceFile.fileFormat.settings)
} catch {
fatalError("Unable to open output audio file: \(error).")
}
现在,当我有“output.wav”时,文件无法播放。但是,如果我使用“output.caf”一切正常
我的问题是,如何像 Apple 示例中那样进行离线渲染并使输出文件为“.wav”?
我试过在格式之间转换缓冲区,但无济于事。我认为这是我需要采取的方向,但我不确定具体该怎么做。