我正在使用 AVAudioEngine 录制音频,并将其保存为声音文件。
用户可以选择导入音频文件,然后如果愿意,他们可以在此文件的末尾继续录制。我通过将导入的文件读取到 AVAudioPCMBuffer 中来获取音频数据,然后将其写入我正在录制的文件中。如果导入的文件是立体声的(因为我正在写入的文件也是立体声的),这非常有用。但是如果导入的文件是单声道的,当我尝试将 AVAudioPCMBuffer 写入文件时,代码会崩溃,这仅仅是因为通道数不匹配。
是否可以将处理格式设置为立体声的单声道 AVAudioPCMBuffer 读入 av AVAudioFile?我可以将缓冲区转换为立体声吗?
这是我如何从导入的文件中获取音频缓冲区的示例:
let existingAudioFile = try AVAudioFile(forReading: existingFileUrl)
var audioFrameCount = AVAudioFrameCount(existingAudioFile.length)
let audioBuffer = AVAudioPCMBuffer(PCMFormat: existingAudioFile.processingFormat, frameCapacity: audioFrameCount) //Mono
try existingAudioFile.readIntoBuffer(audioBuffer)
这就是我使用 AVAudioEngine 创建要写入的 AVAudioFile 的地方:
self.audioFile = try AVAudioFile(forWriting: self.audioRecordURL, settings: self.engine.mainMixerNode.outputFormatForBus(0).settings) //This is in stereo
最后,这就是我将音频缓冲区写入文件的方式:
try self.audioFile.writeFromBuffer(audioBuffer)
如果我将音频转换为立体声,一切正常。