【发布时间】:2016-01-22 00:36:57
【问题描述】:
我目前正在参与一个项目,我想在给定的 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 中,然后进行计算。
【问题讨论】:
-
dataArray是直接读取AAC数据还是先解码成PCM? -
直接读取。我不知道 PCM 是什么。
-
哦,好的。我假设我可以只使用原始字节。感谢您的洞察力。
-
所以我正在解码音频数据,然后将解码后的音频分成两个通道。在获得单独的通道数据后,我对如何找到平均幅度感到困惑。
标签: javascript audio signal-processing fft