Swift AVAudioEngine AVAudioPCMBuffer to PowerLevel



我一直在做一个项目,创建一个显示麦克风功率水平的应用程序。 我知道AVAudioRecorder类提供平均/峰值功率,但我希望只能记录某些频段的功率电平。 我使用AudioUnitEQ类来设置乐队,并将其连接到AVAudioEngine并开始录制。 目前,我一直在使用installTap方法来获取AVAudioPCMBuffer,这是我卡住的地方。 有没有办法将其转换为功率水平?另外,我的做法会完全错误吗?

你可以像这样获得avg/peek。

engine.installTap(......) { buffer in 
    guard let data = buffer.floatChannelData?[0] else {
        return
    }
    var dbData = [Float](repeating: 0.0, count: data.count)
    var one: Float = 0.0
    vDSP_vdbcon(&data, 1, &one, &dbData, 1, data.count, 1)
    var avgLevel: Float = 0.0
    var peakLevel: Float = 0.0
    vDSP_rmsqv(dbData, 1, &avgLevel, vDSP_Length(buffer.frameLength))
    vDSP_maxmgv(dbData, 1, &peakLevel, vDSP_Length(buffer.frameLength))
}

最新更新