Я записываю микрофонный вход с помощью библиотеки 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.
Я делаю это неправильно?