gpt4 book ai didi

C# 如何获取具有时间跨度的音频分贝值

转载 作者:行者123 更新时间:2023-11-30 13:20:36 25 4
gpt4 key购买 nike

如何每 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

非常感谢您的帮助:)

问候,

最佳答案

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

(有关分贝的更详细解释,请参阅 this page)

关于C# 如何获取具有时间跨度的音频分贝值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6196939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com