Calcular decibelios

Estoy grabando la entrada de micrófono usando la biblioteca XNA (no creo que esto sea realmente específico de la tecnología, pero nunca está de más). Cada vez que obtengo una muestra, me gustaría calcular los decibelios. He hecho muchas búsquedas en Internet y no he encontrado un ejemplo sólido como una roca ...

Aquí está mi intento de calcular decibelios a partir de una muestra:

        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));

Si envío el valor de decibelios a la pantalla, puedo ver que los valores aumentan a medida que me pongo más alto y más bajo cuando hablo más suave. Sin embargo, siempre oscila alrededor de -40 cuando estoy absolutamente tranquilo ... Supongo que sería -90. ¿Debo tener un cálculo incorrecto en el bloque de arriba? de lo que he leído en algunos sitios -40 es equivalente a "hablar en voz baja" ... sin embargo, es totalmente silencioso.

Además, si silencia mi micrófono, va directamente a -90.

¿Lo estoy haciendo mal?

Respuestas a la pregunta(3)

Su respuesta a la pregunta