我如何获得每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
我真的很感谢你的帮助:)。
的问候,
答案 0 :(得分:13)
使用NAudio,您可以使用WaveFileReader
和Mp3FileReader
类来访问文件中的示例数据作为字节数组。然后,您需要读取文件并获取样本值(例如,对于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”用于收集给定时间段内的最小和最大样本值,然后用于绘制音频波形和更新音量表。您可以使用同一个类为您提供传递到分贝转换函数的值。
(有关分贝的详细说明,请参阅this page)
答案 1 :(得分:1)
我从NAudio Library中给出的示例中找到了一个解决方案。 因为我找到的解决方案是如此之大。我不打算在这里发布。 所以如果有人想要做同样的事情,我会给出提示。 NAudioDemo应用程序 - > AudioPlayBackDemo文件夹 - > AudioPlayBackPanel.cs文件......