Я записываю микрофонный ввод с использованием библиотеки XNA (я не думаю, что это действительно зависит от технологии, но это никогда не повредит). Каждый раз, когда я получаю образец, я хотел бы рассчитать децибелы. Я сделал много поисков в Интернете и не нашел надежного примера ...
Вот моя попытка вычислить децибелы по выборке:
double peak = 0;
for (var i = 0; i < _buffer.Length; i = i + 2)
{
var sample = BitConverter.ToInt16(_buffer, i);
if (sample > peak)
peak = sample;
else if (sample < -peak)
peak = -sample;
}
var decibel = (20 * Math.Log10(peak/32768));
Если я выведу значение децибела на экран, я смогу увидеть, как значения становятся выше, чем громче, и ниже, когда я говорю мягче. Тем не менее, это всегда колеблется около -40, когда я абсолютно тихо ... Я бы предположил, что это будет -90. Я должен иметь неправильный расчет в блоке выше ?? из того, что я читал на некоторых сайтах, -40 эквивалентно "мягкому разговору" ... однако, это совершенно тихо.
Кроме того, если я выключу свой микрофон, он сразу перейдет к -90.
Я делаю это неправильно?