iOS:マイク入力のオーディオレベルを取得する

AVAudioRecorder をセットアップする。

import AVFAudio

let recorder = try AVAudioRecorder(url: fileURL, settings: [
    // 例
    AVFormatIDKey : kAudioFormatLinearPCM,
    AVSampleRateKey : 44100,
    AVNumberOfChannelsKey : 2,
])
// メータリングを有効
recorder.isMeteringEnabled = true

最新の値を取得する。

// recorderからの最大・平均入力値をリフレッシュ(最新値の取得時に必ず実行)
recorder.updateMeters()

// 0番チャンネルの最大・平均入力それぞれの値を取得(-160〜0のFloat型)
let peak = recorder.peakPower(forChannel: 0)
let average = recorder.averagePower(forChannel: 0)
print("Peak: \(peak), Average: \(average)")

これを繰り返し実行することで、以下のようにリアルタイムな値を取得できる。

 Peak: -38.29653 dB, Average: -49.813396 dB
 Peak: -38.29653 dB, Average: -45.75203 dB
 Peak: -36.77163 dB, Average: -47.29889 dB
 Peak: -36.77163 dB, Average: -46.575954 dB
 Peak: -36.77163 dB, Average: -46.979954 dB
 Peak: -22.248798 dB, Average: -22.248798 dB
 Peak: -17.44955 dB, Average: -19.18833 dB
 Peak: -13.695625 dB, Average: -19.736965 dB
 Peak: -12.488851 dB, Average: -12.488851 dB
 Peak: -12.488851 dB, Average: -12.966704 dB

recorder.isMeteringEnabled を必ず true に指定しておく必要がある点に注意。デフォルトでは false のため、最小値を示す-160しか返ってこない。