desenho de forma de onda - convertendo para DB squashes
Eu tenho um arquivo de onda, eu tenho uma função que recupera 2 amostras por pixel, então eu desenho linhas com eles. rápido e indolor antes de lidar com zoom. Eu posso exibir os valores de amplitude sem problema
essa é uma imagem precisa da forma de onda. para fazer isso eu usei o seguinte 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;
}
}
e isso é ótimo, mas eu preciso mostrar em db imagens de onda tão mais silenciosas não são ridiculamente pequenas, mas quando eu faço a seguinte mudança para o código acima
oneChannel[j]=10*log10(max);
oneChannel[j+1]=-10*log10(-min);
a imagem da onda fica assim.
o que não é preciso, parece que está sendo esmagado. Há algo de errado com o que estou fazendo? Eu preciso encontrar uma maneira de converter de amplitude para decibéis, mantendo a dinâmica. Eu estou pensando que eu não deveria estar tomando uma média quando convertido em DB.