C# 如何获得我的wav文件相对于时间的声音振幅?

C# 如何获得我的wav文件相对于时间的声音振幅?,c#,audio,fft,C#,Audio,Fft,我有一个wav文件,所有我需要的是执行一个功能时,一个显着的声音强度播放 例如:如果正在播放强度级别为10(假定)的声音,那么我希望当声音的强度级别从10增加时,应该触发一个事件来告诉我有一个显著的声音 我试着用谷歌搜索它,发现如果我们读取wav文件的字节并读取数据块(在第44个字节之后),我们就会得到用户数据(声音数据)。但当我分析这些数据时,我感到困惑,因为在没有声音的地方也有同样的数据 我希望我的问题很清楚。 因此,我需要你的建议/想法和参考。你不需要FFT,你只需要计算短期RMS功率,当

我有一个wav文件,所有我需要的是执行一个功能时,一个显着的声音强度播放

例如:如果正在播放强度级别为10(假定)的声音,那么我希望当声音的强度级别从10增加时,应该触发一个事件来告诉我有一个显著的声音

我试着用谷歌搜索它,发现如果我们读取wav文件的字节并读取数据块(在第44个字节之后),我们就会得到用户数据(声音数据)。但当我分析这些数据时,我感到困惑,因为在没有声音的地方也有同样的数据

我希望我的问题很清楚。
因此,我需要你的建议/想法和参考。

你不需要FFT,你只需要计算短期RMS功率,当它超过预定阈值时,你就会发出“响亮”的声音


其中x是样本值,N是要计算RMS功率的样本数-我建议使用10毫秒的周期,以44.1 kHz的采样率给出N=441个样本。

请详细说明这句话:“我建议使用10毫秒的周期,以44.1 kHz的采样率给出441个样本。”简单-您只需计算波形中每个N个采样块的功率均方根。如果采样率为441 kHz,我建议使用N=441,但根据您的具体应用,您可能希望试验块大小。::将wav文件的字节数组转换为INT16数组后,采样值是否为负值???byte[]data=file.ReadAllBytes(file_textBox.Text);var样本=新整数[data.Length];int x=0;对于(int i=44;i)样本应为正和负,大致对称,平均值约为零。请注意,8位样本值通常为偏移二进制,而16位样本通常为2s补码。
power_RMS = sqrt(sum(x^2) / N)