C#如何获得具有时间跨度的Audio Decibel值

我如何获得每1秒获得一次wav / mp3文件的Decibel值? 使用任何适用于C#的音频库..

就像是:

Time: 0, DB: 0.213623 Time: 1, DB: 0.2692261 Time: 2, DB: 0.2355957 Time: 3, DB: 0.2363281 Time: 4, DB: 0.3799744 Time: 5, DB: 0.3580322 Time: 6, DB: 0.1331177 Time: 7, DB: 0.3091431 Time: 8, DB: 0.2984009 

我真的很感谢你的帮助:)

问候,

使用NAudio,您可以使用WaveFileReaderMp3FileReader类来访问文件中的示例数据作为字节数组。 然后,您需要通读文件并获取样本值(例如,对于16位音频,每两个字节代表一个短)。 如果文件是立体声,它将交替左样本,右样本。

然后你需要提出一个测量分贝的策略。 您是要在每秒钟中寻找最响亮的样本,还是每秒钟中的平均样本量,或者只选择在那一秒播放的样本? 获得该值后,需要对其进行标准化,以使1最响亮(因此对于16位音频,将值除以32768)。 另外,使用样本的绝对值。 现在可以计算分贝的值:

 short sample16Bit = BitConverter.ToShort(buffer,index); double volume = Math.Abs(sample16Bit / 32768.0); double decibels = 20 * Math.Log10(volume); 

在NAudio演示应用程序中,“SampleAggregator”用于收集给定时间段内的最小和最大样本值,然后用于绘制音频波形和更新音量表。 您可以使用同一个类为您提供传递到分贝转换函数的值。

(有关分贝的更详细说明,请参阅此页面 )

我从NAudio Library中给出的示例中找到了一个解决方案。 因为我找到的解决方案是如此之大。 我不打算在这里张贴。 所以如果有人想做同样的事情,我会提供一些提示.. NAudioDemo应用程序 – > AudioPlayBackDemo文件夹 – > AudioPlayBackPanel.cs文件…