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