рисование формы волны - преобразование в DB
У меня есть волновой файл, у меня есть функция, которая получает 2 образца на пиксель, а затем я рисую линии с ними. быстро и безболезненно, прежде чем заниматься масштабированием. я могу отображать значения амплитуды без проблем
это точное изображение формы волны. Для этого я использовал следующий код
//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);
волновое изображение выглядит следующим образом.
что не точно, похоже, что его раздавили. Что-то не так с тем, что я делаю? Мне нужно найти способ преобразования амплитуды в децибелы при сохранении динамики. я думаю, что я не должен брать среднее значение при конвертации в БД.