在Javascript中使用FFT计算音频文件的平均幅度

我目前正在参与一个项目,我想在任何给定的AAC文件中找到给定音频数据的平均幅度。 我目前正在读取文件作为数组缓冲区并传递到Uint8Array。

var dataArray = new Uint8Array(buffer)

然后我建立了两个数组,一个是真实的(包含音频数据)和一个虚数(包含全零),并将它们传递给FFT。 然后将音频数据放置到一个新的数组中,以便数组内的数字不再被视为无符号的8位整数。

var realArray = [audio data here]
var imagArray = [0,0,0,0,0,0,...]
transform(realArray, imagArray)

然后我会遍历数组,循环从0到N / 2,其中N是包含原始音频数据的初始缓冲区的大小,并计算每个频率仓的大小。 最后,我将这些大小的总和除以N / 2。

问题在于,在某些场合,对于以较低强度播放的音频,与以较高强度播放的音频给出的值相比,我获得较高的值。 我的方法在实现我的目标方面是否正确,还是有更好的方法去实现它? 谢谢。

注意:对于那些感兴趣的FFT使用可以在这里找到几种语言。 FFT我将音频文件的中间2 ^ 20个字节传递给FFT,然后进行我的计算。


您实际上不需要使用FFT - Parseval定理实质上意味着时域中的能量等于频域中的能量,因此FFT部分是冗余的 - 您可以在时域中计算幅度。 通常情况下,这是通过计算选定时间窗口内信号的RMS值来完成的(此时间窗口的长度取决于您试图实现的内容)。

链接地址: http://www.djcxy.com/p/33843.html

上一篇: Calculating The Average Amplitude of an Audio File Using FFT in Javascript

下一篇: Why Ideal band pass filter not working as expected?