Android: как преобразовать getMaxAmplitude в db?

У меня есть фрагмент кода, который дает мне getMaxAmplitude() звука с микрофона. это работает, но значение, безусловно, странное. мне нужно преобразовать его в децибелы. как я могу? Я нашел эту формулу: double db = 20 * Math.log10 (recorder.getMaxAmplitude () / 2700,0); но я не знаю, правильно ли это. благодаря.


person Zak    schedule 29.11.2012    source источник
comment
РЕШЕНО: двойной db = 20 * Math.log (recorder.getMaxAmplitude () / 2700,0);   -  person Zak    schedule 29.11.2012


Ответы (1)


Формула правильная, а вот 2700.0 я не знаю, потому что: Предположим такую ​​ситуацию: У нас есть звук с глубиной 16 бит. Это означает, что у нас будет 2 ^ 16 («два в 16-й степени») различных значений амплитуды, или 65 536 шагов. Поскольку количество шагов разделено между положительными и отрицательными значениями (наши гребни и впадины ранее), это означает, что оно разделено на 32 767 положительных (плюс ноль) и 32 768 отрицательных значений. Потом:

db = 20 * log10(peaks/ 32767);

«2700.0» соответствует максимальному значению амплитуды сигналов, но я не знаю, при какой битовой глубине. С Уважением.

person Antonio    schedule 30.07.2014