Zeichnen von Wellenformen - Konvertieren in DB komprimiert sie

Ich habe eine Wave-Datei, ich habe eine Funktion, die 2 Samples pro Pixel abruft, dann zeichne ich Linien mit ihnen. schnell und schmerzlos bevor ich mich mit zoomen beschäftige. ich kann die amplitudenwerte problemlos anzeigen

Das ist ein genaues Bild der Wellenform. Dazu habe ich den folgenden Code verwendet

//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;
    }   
}

und das ist toll, aber ich muss in db anzeigen, damit leisere wellenbilder nicht lächerlich klein sind, aber wenn ich die folgende änderung am obigen code vornehme

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

Das Wellenbild sieht so aus.

was nicht genau ist, sieht aus wie es zerquetscht wird. Stimmt etwas nicht mit dem, was ich tue? Ich muss einen Weg finden, um von der Amplitude in Dezibel umzurechnen, während die Dynamik erhalten bleibt. Ich denke, ich sollte keinen Durchschnitt nehmen, wenn ich zu DB konvertiert werde.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage