Swift AVAudioEngine AVAudioPCMBuffer to PowerLevel
Я работал над проектом по созданию приложения, которое отображает уровень мощности от микрофона. Мне известен класс AVAudioRecorder, который обеспечивает среднюю / пиковую мощность, но я хочу иметь возможность записывать только уровень мощности для определенных диапазонов. Я использовал класс AudioUnitEQ для настройки полос, подключил его к AVAudioEngine и начал запись. В настоящее время я использую метод installTap, чтобы получить AVAudioPCMBuffer, где я застрял. Есть ли способ преобразовать это в уровень мощности? Кроме того, мой подход к этому может быть совершенно неверным?
1 ответ
Вы можете получить 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))
}