bot*_*tix 3 avfoundation ios swift avaudiofile
我们正在开发一个记录并保留麦克风输入的应用程序。使用的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])
})
Run Code Online (Sandbox Code Playgroud)
我们的问题是录音量很大。对于5个小时的录制,输出的音频文件为1.2GB .caf格式。
let audioFile = AVAudioFile(forWriting: recordingPath, settings: [:], commonFormat: .pcmFormatFloat32, interleaved: isInterleaved)
Run Code Online (Sandbox Code Playgroud)
是否有压缩音频文件的好方法?
默认采样频率为44100Hz。我们将使用AVAudioMixerNode将输入下采样到20Khz(在我们的情况下,较低的质量是可以接受的),但是输出的大小在大小上是不可接受的。
录音中包含很大部分的背景噪音。
有什么建议么?
该.caf容器格式支持AAC压缩。通过将AVAudioFile设置字典设置为来启用它[AVFormatIDKey: kAudioFormatMPEG4AAC]:
let audioFile = try! AVAudioFile(forWriting: recordingPath, settings: [AVFormatIDKey: kAudioFormatMPEG4AAC], commonFormat: .pcmFormatFloat32, interleaved: isInterleaved)
Run Code Online (Sandbox Code Playgroud)
有迹象表明,影响文件大小和质量等设置键:AVSampleRateKey,AVEncoderBitRateKey和AVEncoderAudioQualityKey。
ps .caf完成后需要关闭文件。AVAudioFile没有显式close()方法,因此可以通过取消对它的任何引用来隐式关闭它。.caf没有此功能,未压缩的文件似乎可以播放,但是AAC文件则不能。
| 归档时间: |
|
| 查看次数: |
1198 次 |
| 最近记录: |