рисование формы волны - преобразование в DB

У меня есть волновой файл, у меня есть функция, которая получает 2 образца на пиксель, а затем я рисую линии с ними. быстро и безболезненно, прежде чем заниматься масштабированием. я могу отображать значения амплитуды без проблем

enter image description here

это точное изображение формы волны. Для этого я использовал следующий код

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

и это замечательно, но мне нужно отображать в дБ, чтобы более тихие волновые изображения не были смехотворно маленькими, но когда я внесу следующие изменения в приведенный выше код

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

волновое изображение выглядит следующим образом.

enter image description here

что не точно, похоже, что его раздавили. Что-то не так с тем, что я делаю? Мне нужно найти способ преобразования амплитуды в децибелы при сохранении динамики. я думаю, что я не должен брать среднее значение при конвертации в БД.

Ответы на вопрос(1)

Ваш ответ на вопрос