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);
ПРИМЕЧАНИЕ: справочная таблица, вероятно, необходима, если у вас одновременно выполняется много других вычислений или вам требуется ОЧЕНЬ быстрая обработка.