我正在一个uni语音识别项目中工作,我想以dB SPL打印语音水平的值以改善应用程序。该项目使用Kinect,因此我必须使用c#中的Kinect SDK进行构建。 这些天,我已经阅读了很多有关分贝的信息,但是我不确定我是否正确地理解了整个概念。在这里,我写了我目前正在尝试的代码的有关部分(如果需要有关其余代码的信息,请告诉我)
float energy = 0;
rms= 0;
for (int i = 0; i < audioBuffer.Length; i += 4)
{
float audioSample = BitConverter.ToSingle(audioBuffer, i);
rms+= audioSample * audioSample;
}
float minvalue_db = (float)(20.0 * Math.Log10(1 / Math.Pow(2, 16)));
float minvalue_byte=(float)((audioBuffer.Length/4)* Math.Pow(10, minvalue_db/10));
energy = (float)(20.0 * Math.Log10(rms/ minvalue_byte));
Console.WriteLine("Energia audio: {0} dB (SPL)\n", energy);
在这段代码中,我想从存储在字节中的音频和声压级转换为
rms:minvalue_byte = x:20µPA-> x =(rms * 20µPA)/ minvalue_byte
然后
energy = 20 * log10(x / 20µPA)
简化为
energy = 20 * log10(rms / minvalue_byte)
我只是想知道这对您是否有意义。 我的英语很抱歉,如果我写了一个不好的问题,请原谅我,但是我是新来的。 任何能帮助我的答案,我将不胜感激。