我一直致力于一个项目来创建一个显示麦克风功率级别的应用程序。我知道AVAudioRecorder类提供的平均/峰值功率,但我希望只能记录某些频段的功率电平。我使用AudioUnitEQ类来设置波段,并将其附加到AVAudioEngine并开始录制。目前,我一直在使用installTap方法获取AVAudioPCMBuffer,这是我遇到的问题。有没有办法将其转换为功率级别?此外,我对此的处理方式是完全错误的吗?
答案 0 :(得分:0)
你可以像这段代码一样平均看。
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))
}