使用C#从16位音频采样值计算dBFS值时的输出不精确

时间:2016-07-14 07:36:40

标签: c# math audio audio-processing decibel

我正在使用c#从16位波形文件样本(-32768到+32767)计算dBFS值,如下所示:

int sampleValue = -32700;

double dBFSvalue = 20 * Math.Log10(Math.Abs(sampleValue) / 32768);

但是当我尝试打印dBFS值时,32768的sampleValue会导致" 0"应该如此,但是sampleValue的任何其他值都会导致" -infinity"。

MessageBox.Show($"Result: {dBFSvalue}dBFS");

这与Double类型的显示有关吗? 我该如何转换数字以#34; -60.5 dBFS"?

的形式正确显示它?

感谢。

1 个答案:

答案 0 :(得分:3)

替换你的第二行代码
double dBFSvalue = 20 * Math.Log10(Math.Abs(sampleValue) / 32768.0);

您需要.0将其计算为浮点数。否则,它将计算为整数,括号中的术语将计算为0。