iPhone SDK: измерение AVAudioRecorder - как изменить пиковое значение PowerForChannel с децибела в процентах?

AVAudioRecorder в iPhone SDK можно использовать для получения пиковой и средней мощности канала в децибелах. Диапазон составляет от 0 до 160 дБ. Какой расчет используется для преобразования этого значения в шкалу от 0 до 10 или что-то подобное, что можно использовать для измерителя уровня звука?

2 ответа

Решение

Диапазон составляет от -160 дБ до 0 дБ. Вы, вероятно, хотите отобразить его в метре, который идет от -90 дБ до 0 дБ. Отображение его в децибелах на самом деле более полезно, чем в виде линейного уровня звука, потому что децибелы представляют собой логарифмическую шкалу, что означает, что она более близко приближается к тому, насколько громко мы воспринимаем звук.

Тем не менее, вы можете использовать это для преобразования из децибел в линейный:

linear = pow (10, decibels / 20);

и наоборот:

decibels = log10 (linear) * 20;

Диапазон для вышеупомянутых децибел - отрицательная бесконечность до нуля, а для линейного - от 0,0 до 1,0. Когда линейное значение равно 0,0, это -инф дБ; линейный на 1,0 составляет 0 дБ.

Apple также внедрила класс преобразования дБ в линейную амплитуду MeterTable.cpp и MeterTable.h. Ищите это в примере приложения SpeakHere.

Вы можете использовать их встроенную функцию, которая вычисляет значение "на лету"

inline double DbToAmp(double inDb);

ИЛИ ЖЕ

создайте экземпляр MeterTable для использования предварительно рассчитанной таблицы поиска. Это сохраняет значения преобразования в памяти, поэтому ваше приложение может сократить количество вычислений.

float ValueAt(float inDecibels);

ПРИМЕЧАНИЕ: справочная таблица, вероятно, необходима, если у вас одновременно выполняется много других вычислений или вам требуется ОЧЕНЬ быстрая обработка.

Другие вопросы по тегам