Sol*_*ake 3 c# audio timespan 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
Run Code Online (Sandbox Code Playgroud)
我真的很感谢你的帮助:)
问候,
Mar*_*ath 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);
Run Code Online (Sandbox Code Playgroud)
在NAudio演示应用程序中,"SampleAggregator"用于收集给定时间段内的最小和最大样本值,然后用于绘制音频波形和更新音量表.您可以使用同一个类为您提供传递到分贝转换函数的值.
(有关分贝的更详细说明,请参阅此页面)
我从 NAudio 库中给出的示例中找到了解决方案。因为我找到的解决方案太大了。我不会把它发布在这里。所以我只是给出提示,以防有人想做同样的事情。NAudioDemo 应用程序 -> AudioPlayBackDemo 文件夹 -> AudioPlayBackPanel.cs 文件...