使用 C# 从 16 位音频样本值计算 dBFS 值时输出不精确
Imprecise output when calculating dBFS value from 16-bit audio sample value using C#
我正在使用 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类型的显示有关吗?
我应该如何转换数字才能以“-60.5 dBFS”的形式正确显示?
谢谢。
将您的第二行代码替换为
double dBFSvalue = 20 * Math.Log10(Math.Abs(sampleValue) / 32768.0);
您需要 .0
将其计算为浮点数。否则按整数计算,括号中的项计算为0。
我正在使用 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类型的显示有关吗? 我应该如何转换数字才能以“-60.5 dBFS”的形式正确显示?
谢谢。
将您的第二行代码替换为
double dBFSvalue = 20 * Math.Log10(Math.Abs(sampleValue) / 32768.0);
您需要 .0
将其计算为浮点数。否则按整数计算,括号中的项计算为0。