Ios 从AVAudioRecorder获取分贝

Ios 从AVAudioRecorder获取分贝,ios,xcode,swift,Ios,Xcode,Swift,我想从AVAudio录音机上得到分贝值。这是我目前的代码。我有一个方法启动录音机,然后读取分贝值 var recorder: AVAudioRecorder! 全局定义的记录器,然后在此处使用: func init_recorder() -> Void { let recordersettings = [ AVFormatIDKey: Int(kAudioFormatAppleIMA4), AVSampleRateKey: 4410

我想从AVAudio录音机上得到分贝值。这是我目前的代码。我有一个方法启动录音机,然后读取分贝值

    var recorder: AVAudioRecorder!
全局定义的记录器,然后在此处使用:

    func init_recorder() -> Void
{
    let recordersettings = [
        AVFormatIDKey: Int(kAudioFormatAppleIMA4),
        AVSampleRateKey: 44100,
        AVNumberOfChannelsKey: 1 as NSNumber,
        AVLinearPCMBitDepthKey: 16,
        AVLinearPCMIsFloatKey: false,
        AVLinearPCMIsBigEndianKey: false,
        //AVEncoderAudioQualityKey: AVAudioQuality.High.rawValue
    ]
    let filename = NSURL(fileURLWithPath: NSTemporaryDirectory().stringByAppendingString("tmp.caf"))

    do
    {
        recorder = try AVAudioRecorder(URL: filename, settings: recordersettings)
        recorder.meteringEnabled = true
        recorder.prepareToRecord()
        recorder.record()
        recorder.updateMeters()

    }
    catch
    {
        print("error")
    }


}
然后得到我得到的分贝值

    func get_decibels() -> Float
{
    recorder.updateMeters()
    return recorder.averagePowerForChannel(0)
}
出于某种原因,每次调用它都会返回-120.0的值,我不太清楚为什么。我已经阅读了和其他一些堆栈溢出线程,但大多数示例似乎与我的非常相似


感谢您的帮助,非常感谢

在您启动AVAudioSession之后

let session = AVAudioSession.sharedInstance()
    try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
    try session.overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)
    try session.setActive(true)
try recorder = AVAudioRecorder(url: getDocumentsDirectory(), settings: settings)
然后启动录音机

func start() {
    recorder?.record()
    recorder?.updateMeters()
}
你可以打电话得到分贝

let decibels = recorder.averagePower(forChannel: 0)
从-120(最小值)到0。例如,一些咖啡馆的噪音水平是-20

下面是一个更详细的示例