“执行离线音频处理”示例使用 AVAudioEngine 处理到 .wav 文件不起作用

问题描述 投票:0回答:0

对于上下文,我一直在关注 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”?

我试过在格式之间转换缓冲区,但无济于事。我认为这是我需要采取的方向,但我不确定具体该怎么做。

ios swift avfoundation avaudioengine
© www.soinside.com 2019 - 2024. All rights reserved.