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

     2023-02-25     127

关键词:

【中文标题】在 Javascript 中使用 FFT 计算音频文件的平均幅度【英文标题】:Calculating The Average Amplitude of an Audio File Using FFT in Javascript 【发布时间】: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 是什么。 我认为 jaket 的重点是需要对 AAC 文件数据进行解压缩/解码以获得实际的音频样本值 (PCM) - 你不能只使用原始的您从文件中读取的字节数。 哦,好的。我假设我可以只使用原始字节。感谢您的洞察力。 所以我正在解码音频数据,然后将解码后的音频分成两个通道。在获得单独的通道数据后,我对如何找到平均幅度感到困惑。 【参考方案1】:

你真的不需要为此使用 FFT - Parseval's theorem 本质上意味着时域中的能量等于频域中的能量,因此 FFT 部分是多余的 - 你可以只计算幅度时域。通常这是通过在选定的时间窗口内计算信号的RMS value 来完成的(此时间窗口的长度取决于您要达到的目标)。

【讨论】:

感谢您的回答。我会这样实现。

在 Java 中使用 FFT 算法进行音频频谱分析

】在Java中使用FFT算法进行音频频谱分析【英文标题】:AudiospectrumanalysisusingFFTalgorithminJava【发布时间】:2011-07-0816:13:04【问题描述】:我想用Java(ME)分析音频文件的频谱。我想像一些媒体播放器一样绘制频谱。但是有些地方我不... 查看详情

使用 FFT 查找音频频率变化的非常简单的解释 [关闭]

】使用FFT查找音频频率变化的非常简单的解释[关闭]【英文标题】:VerysimpleexplanationforusingFFTtofindaudiofrequencychanges[closed]【发布时间】:2016-01-2619:59:36【问题描述】:我无法理解使用FFT计算频率变化的概念。我一直在浏览大量关于... 查看详情

Python FFT音频文件

...样率为44.1KHz,我只想计算前100个样本的FFT,因为我正在使用np.fft.fft()但是我得到了意想不到的结果,请参见图1。当我计算至少2048个样本的FFT时,我只会得到预期的结果。为什么?这是我的代码:importnumpyasnpi 查看详情

iOS 如何从歌曲(ipod 库)中获取音频样本?

...风的音频样本进行FFT分析。我让用户从ipod库播放歌曲,使用扬声器、麦克风捕捉声音,我可以计算FFT。我对这个解决方案不满意。我想直接从音频文件(ipod库)中获取样本并计算FFT。我 查看详情

是否可以捕获音频并将其存储在数组中?

...他输入设备捕获声音并将该数据存储在数组中,然后使用javascript使用FFT对其进行分析,搜索了大量网站和主题,找不到任何有用的东西【问题讨论】:使用纯JavaScript?没门。也许与Flash的一些集成使之成为可 查看详情

怎么利用fft算法对音频噪声进行处理

...换,它是频谱分析的一种重要工具,例如,在处理过程中使用了快速傅立叶变换fft,因此用平均周期图法计算功率谱密度函数估计是非常迅速的 参考技术B对信号进行分帧-》加窗-》fft-》幅度值减去噪声能量幅度-》ifft可用matlab... 查看详情

从歌曲中获取当前音频频率 - Java(也许使用 FFT?)

】从歌曲中获取当前音频频率-Java(也许使用FFT?)【英文标题】:GetcurrentAudioFrequencyfromsong-Java(MaybeuseFFT?)【发布时间】:2014-02-0122:14:38【问题描述】:我正在尝试做一个学校项目,我正在尝试用Java构建一个应用程序,我必须分... 查看详情

fft 在 matlab 中的音频文件样本上

...音文件中提取信息,以便在我正在研究的视频分类算法中使用它。我的问题是我不知道如何在Matlab中准确处理音频文件。以下是我需要完成的:打开音频文件并获取采样率/频率我需要在一个2秒的窗口上工作,所以我必须循环文... 查看详情

JTransforms 在 Android 音频中的使用

】JTransforms在Android音频中的使用【英文标题】:JTransformsusageinAndroidaudio【发布时间】:2014-06-2411:45:36【问题描述】:我一直在寻找快速和完整的DSPjava库来与android音频操作一起使用。我遇到了FFT高度计算的问题。然后我找到了JTra... 查看详情

使用 JavaScript 进行 FFT 分析:如何找到特定频率?

】使用JavaScript进行FFT分析:如何找到特定频率?【英文标题】:FFTanalysiswithJavaScript:Howtofindaspecificfrequency?【发布时间】:2015-09-2512:43:00【问题描述】:我有以下问题:我使用javascript和FFT分析音频数据。我已经可以将FFT数据写入... 查看详情

如何使用 KissFFT 计算峰值?

】如何使用KissFFT计算峰值?【英文标题】:HowcanicalculatethepeakusingkissFFT?【发布时间】:2013-06-0507:37:01【问题描述】:我想在真实的音频设备上应用FFT并从中计算峰值这是我的代码..N=8192kiss_fft_cpxout[N/2+1];intlen=fft->N/2+1;kiss_fft_scal... 查看详情

在android上使用FFT进行实时音频降噪

】在android上使用FFT进行实时音频降噪【英文标题】:Real-timeaudiodenoiseusingFFTonandroid【发布时间】:2013-05-1311:30:59【问题描述】:我正在考虑启动一个android项目,该项目记录音频信号并进行一些处理以进行降噪。我的问题是,由... 查看详情

如何在每个FFT计算中检索不同的原始频率并且在java中没有任何频率泄漏

】如何在每个FFT计算中检索不同的原始频率并且在java中没有任何频率泄漏【英文标题】:howtoretrievethedifferentoriginalfrequencyineachFFTcaculatingandwithoutanyfrequencyleakageinjava【发布时间】:2012-09-0810:21:10【问题描述】:我正在为诸如从麦... 查看详情

C# 应用程序:来自音频输出的示例音频 -> FFT 算法 -> 可视化

...:27【问题描述】:我是一名新手音频程序员,我是第一次使用FFT。我想从我的音频输出中采样音频。之后,我想用FFT算法计算这些数据。我正在使用Naudio.dll。抽 查看详情

使用 FFT 从音频中过滤 hit-hat 节拍

】使用FFT从音频中过滤hit-hat节拍【英文标题】:Filteringhit-hatbeatfromanaudiowithFFT【发布时间】:2020-12-0214:34:56【问题描述】:所以我正在编写一个节拍检测算法,它工作起来很酷,但它会检测每个节拍(鼓、语音、踩镲等)。而且... 查看详情

在 fft 中应用窗口函数的正确方法

...2015-03-2914:09:40【问题描述】:我明白为什么我需要在fft中使用窗口函数,我录制了一个正弦波(16位pcm格式),我有我想要分析的正弦波音频记录,我已经将麦克风音频录制成一个字节数组,将其转换回表示正弦波的样本数组,... 查看详情

FFT的大小实际上是啥意思

...是什么意思【发布时间】:2013-03-2005:53:05【问题描述】:使用Apple文档中的FFT示例代码时,N、log2n、n和nOver2究竟是什么意思?N是指fft的窗口大小还是给定音频中的样本总数,以及如何从音频文件中计算N?它们与音频采样率(即4... 查看详情

区分注释FFT算法

...一个音符的时间?我已经做的是从音频文件中读取样本并使用JTransforms库对这些样本进行傅里叶变换。这是我得到的:.然后我根据FFT返回的数据计算了频谱,这就是我得到的结果:. 查看详情