AVAudioEngine を使用してオーディオを録音し、サウンド ファイルとして保存しています。
ユーザーは音声ファイルのインポートを選択でき、必要に応じてこのファイルの最後に録音を続けることができます。インポートしたファイルからオーディオ データを取得して AVAudioPCMBuffer に読み込み、それを録音先のファイルに書き込みます。インポートされたファイルがステレオの場合、これはうまく機能します (書き込んでいるファイルもステレオであるため)。しかし、インポートされたファイルがモノラルの場合、AVAudioPCMBuffer をファイルに書き込もうとすると、単にチャンネル数が一致しないためにコードがクラッシュします。
processingFormat をステレオに設定して、モノ 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)
オーディオをステレオに変換すると、すべてが機能します。