使用AVAudioEngine记录到压缩文件

时间:2015-12-02 14:12:32

标签: ios avaudioengine avaudiofile

我尝试使用AVAudioEngine将麦克风的声音和各种声音效果文件录制到AVAudioFile。

我创建了一个AVAudioFile:

let settings = self.engine.mainMixerNode.outputFormatForBus(0).settings
try self.audioFile = AVAudioFile(forWriting: self.audioURL, settings: settings, commonFormat: .PCMFormatFloat32, interleaved: false)

我在音频引擎的mainMixerNode上安装了一个水龙头,在那里我将缓冲区写入文件:

self.engine.mainMixerNode.installTapOnBus(0, bufferSize: 4096, format: self.engine.mainMixerNode.outputFormatForBus(0)) { (buffer, time) -> Void in
    do {
        try self.audioFile?.writeFromBuffer(buffer)
    } catch let error as NSError {
        NSLog("Error writing %@", error.localizedDescription)
    }
}

我在创建音频文件时使用self.engine.mainMixerNode.outputFormatForBus(0).settings,因为Apple声明"缓冲区格式必须与文件的处理格式匹配,这就是创建时使用outputFormatForBus:的原因上面的AVAudioFile对象"。在installTapOnBus的文档中,他们也这样说:"指定总线上的抽头和连接格式(如果非零)应该相同"

然而,这给了我一个非常大的,未压缩的音频文件。我想将文件保存为.m4a,但不知道在哪里指定我想要使用的设置:

[
    AVFormatIDKey: NSNumber(unsignedInt: kAudioFormatMPEG4AAC),
    AVSampleRateKey : NSNumber(double: 32000.0), //44100.0
    AVNumberOfChannelsKey: NSNumber(int: 1),
    AVEncoderBitRatePerChannelKey: NSNumber(int: 16),
    AVEncoderAudioQualityKey: NSNumber(int: Int32(AVAudioQuality.High.rawValue))
]

如果我在创建音频文件时传入这些设置,则在录制时应用程序会崩溃。

有关如何解决此问题的任何建议或想法?

0 个答案:

没有答案