3

マイク入力を記録して保持するアプリケーションに取り組んでいます。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 時間の録音の場合、出力オーディオ ファイルは.cafフォーマットで 1.2GB です。

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

それに書き込むオーディオファイルを圧縮する良い方法はありますか?

デフォルトのサンプリング周波数は 44100Hz です。AVAudioMixerNode を使用して入力を 20Khz にダウンサンプリングします (この場合は低品質でも問題ありません) が、出力のサイズは許容範囲ではありません。

録音には、バックグラウンド ノイズの大きなセグメントが含まれています。

助言がありますか?

4

1 に答える 1

7

.cafコンテナー形式は AAC 圧縮をサポートします。AVAudioFile設定辞書を[AVFormatIDKey: kAudioFormatMPEG4AAC]次のように設定して有効にします。

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

ファイル サイズと品質に影響を与えるその他の設定キーがあります: AVSampleRateKeyAVEncoderBitRateKeyおよびAVEncoderAudioQualityKey.

.cafps終了したら、ファイルを閉じる必要があります。AVAudioFileには明示的なclose()メソッドがないため、それへの参照をゼロにすることで暗黙的に閉じます。非圧縮.cafファイルはこれがなくても再生できるようですが、AAC ファイルはそうではありません。

于 2018-08-31T21:17:24.570 に答える