gpt4 book ai didi

ios - 将 AVAudioPCMBuffer 写入压缩的 AVAudioFile

转载 作者:可可西里 更新时间:2023-11-01 00:38:58 34 4
gpt4 key购买 nike

我们正在开发一个记录和保留麦克风输入的应用程序。 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(在我们的例子中可以接受较低的质量)但输出的大小将无法接受。

录音包含大段背景噪音。

有什么建议吗?

最佳答案

.caf 容器格式支持 AAC 压缩。通过将 AVAudioFile 设置字典设置为 [AVFormatIDKey: kAudioFormatMPEG4AAC] 来启用它:

let audioFile = try! AVAudioFile(forWriting: recordingPath, settings: [AVFormatIDKey: kAudioFormatMPEG4AAC], commonFormat: .pcmFormatFloat32, interleaved: isInterleaved)

还有其他设置键会影响文件大小和质量:AVSampleRateKeyAVEncoderBitRateKeyAVEncoderAudioQualityKey

附注完成后,您需要关闭 .caf 文件。 AVAudioFile 没有明确的 close() 方法,因此您可以通过取消对它的任何引用来隐式关闭它。未压缩的 .caf 文件似乎可以在没有这个的情况下播放,但 AAC 文件则不行。

关于ios - 将 AVAudioPCMBuffer 写入压缩的 AVAudioFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52111483/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com