iPhone SDK: измерение AVAudioRecorder - как изменить пиковое значение PowerPowerForChannel с децибела в процентах? - PullRequest
8 голосов
/ 17 марта 2010

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

Ответы [ 2 ]

19 голосов
/ 21 марта 2010

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

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

linear = pow (10, decibels / 20);

и наоборот:

decibels = log10 (linear) * 20;

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

5 голосов
/ 19 июня 2010

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

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

inline double DbToAmp(double inDb);

OR

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

float ValueAt(float inDecibels);

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

...