5

如何获得每 1 秒拥有的 wav/mp3 文件的分贝值?使用任何适用于 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

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

问候,

4

2 回答 2

18

使用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”用于收集给定时间段内的最小和最大样本值,然后用于绘制音频波形并更新音量表。您可以使用同一个类为您提供传递给分贝转换函数的值。

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

于 2011-06-01T07:31:46.780 回答
1

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

于 2011-06-02T06:19:10.103 回答