Dibujo de forma de onda - convirtiéndolo en DB lo aplasta

Tengo un archivo de onda, tengo una función que recupera 2 muestras por píxel y luego trazo líneas con ellos. Rápido y sin dolor antes de lidiar con el zoom. Puedo mostrar los valores de amplitud sin problemas

Esa es una imagen precisa de la forma de onda. para hacer esto utilicé el siguiente código

//tempAllChannels[numOfSamples] holds amplitude data for the entire wav
//oneChannel[numOfPixels*2] will hold 2 values per pixel in display area, an average of min amp, and average of max
for(int i = 0; i < numOfSamples; i++)//loop through all samples in wave file
{
    if (tempAllChannels[i] < 0) min += tempAllChannels[i];//if neg amp value, add amp value to min
    if (tempAllChannels[i] >= 0) max += tempAllChannels[i]; 

    if(i%factor==0 && i!=0)     //factor is (numofsamples in wav)/(numofpixels) in display area
    {
        min = min/factor;       //get average amp value
        max = max/factor;
        oneChannel[j]=max;
        oneChannel[j+1]=min;
        j+=2;                   //iterate for next time
        min = 0;                //reset for next time
        max = 0;
    }   
}

y eso es genial, pero necesito mostrar en db imágenes de onda tan silenciosas no son ridículamente pequeñas, pero cuando hago el siguiente cambio al código anterior

oneChannel[j]=10*log10(max);
oneChannel[j+1]=-10*log10(-min);

La imagen de onda se ve así.

lo que no es exacto, parece que está siendo aplastado. ¿Hay algo mal con lo que estoy haciendo? Necesito encontrar una forma de convertir de amplitud a decibelios mientras mantengo la dinámica. Estoy pensando que no debería estar tomando un promedio cuando se convierte a DB.

Respuestas a la pregunta(1)

Su respuesta a la pregunta