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))
}
Другие вопросы по тегам