Мы работаем над приложением, которое записывает и сохраняет микрофонный ввод. Использование 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,2 ГБ в формате .caf
.
let audioFile = AVAudioFile(forWriting: recordingPath, settings: [:], commonFormat: .pcmFormatFloat32, interleaved: isInterleaved)
Есть ли хороший способ сжать запись аудиофайла в него?
Частота дискретизации по умолчанию - 44100 Гц. Мы будем использовать AVAudioMixerNode для уменьшения входного сигнала до 20 кГц (в нашем случае приемлемо более низкое качество), но размер выходного сигнала не будет приемлемым по размеру.
Запись содержит большие сегменты фонового шума.
Есть предложения?