Проблема, скорее всего, заключается в определении «эталонного» звукового давления на микрофоне. Я понятия не имею, что это было бы или если это доступно.
Единственное аудио-приложение, которое я когда-либо использовал, определяло 0db как «полную громкость», когда сэмплы имели значение + или - max (в беззнаковых 16 битах, которые были бы 0 и 65535). Чтобы получить это в БД, я бы, вероятно, сделал что-то вроде этого:
// assume input_sample is in the range 0 to 65535
sample = (input_sample * 10.0) - 327675.0
db = log10(sample / 327675.0)
Я не знаю, правильно ли это, но мне кажется, что математически бросил мне вызов. Когда input_sample приближается к «середине», он будет все больше и больше походить на отрицательную бесконечность.
Теперь, когда я думаю об этом, если вы хотите SPL или что-то, что может потребовать другой хитрости, как, например, выполнение оценки RMS между переходами через ноль, опять то, о чем я могу только догадываться, потому что я понятия не имею, как это работает .