我们正在开发一个记录和保留麦克风输入的应用程序。使用AVAudioRecorder
不是一种选择,因为需要实时音频处理。
AVAudioEngine
使用它是因为它提供了对输入音频的低级访问。
let audioEngine = AVAudioEngine()
let inputNode = audioEngine.inputNode
let inputFormat = inputNode.inputFormat(forBus: 0)
inputNode.installTap(onBus: 0, bufferSize: AVAudioFrameCount(inputFormat.sampleRate * sampleInterval), format: inputFormat) { (buffer: AVAudioPCMBuffer, time: AVAudioTime) -> Void in
// sound preprocessing
// writing to audio file
audioFile.write(buffer.floatChannelData![0])
})
我们的问题是录音很大。对于 5 小时的录音,输出音频文件为 1.2GB.caf
格式。
let audioFile = AVAudioFile(forWriting: recordingPath, settings: [:], commonFormat: .pcmFormatFloat32, interleaved: isInterleaved)
有没有一种很好的方法来压缩写入它的音频文件?
默认采样频率为 44100Hz。我们将使用 AVAudioMixerNode 将输入下采样到 20Khz(在我们的例子中较低的质量是可以接受的),但输出的大小在大小上是不可接受的。
录音包含大量背景噪音。
有什么建议么?