我有一个波形文件,我有一个函数可以检索每个像素 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;
}
}
这很好,但我需要在 db 中显示,所以更安静的波形图像不会小得可笑,但是当我对上面的代码进行以下更改时
oneChannel[j]=10*log10(max);
oneChannel[j+1]=-10*log10(-min);
波浪图像看起来像这样。
这不准确,看起来它被压扁了。我在做什么有问题吗?我需要找到一种在保持动态的同时将振幅转换为分贝的方法。我想我不应该在转换为 DB 时取平均值。