java - 来自 FFT 的有用音频数据

标签 java signal-processing fft

我正在尝试用 java 做一个简单的音乐可视化。我设置了两个线程,一个用于播放剪辑,另一个用于从剪辑中提取一大块字节以使用 FFT 进行处理。然后,处理后的数组可以发送到将处理绘图的 JFrame,并用作某种视觉效果的参数。

但是,我不太确定如何处理这些数据。我现在只是使用功率谱,这给了我非常有限的响应,而且我意识到对于我想要做的事情来说太笼统了。如果有一个特别有帮助的特定 FFT 库,我愿意使用任何 FFT 库。但是,一般来说,进行 FFT 后我可以从数据中得到什么,以及如何使用它在视觉效果中显示相当准确的结果?

最佳答案

给定相同的数据,所有 FFT 都会做几乎相同的事情。您可以改变的 FFT 参数包括比例因子、FFT 长度(较长将为您提供更高的频率分辨率,较短将为您提供更好的时间响应)以及(预)数据加窗,这将减少“飞溅”或光谱峰的光谱泄漏。您可以对 FFT 进行零填充,以插值看起来更平滑的结果。您可以对多个连续 FFT 的幅度结果进行平均,以降低本底噪声。您还可以使用缩放函数,例如对数缩放(或对数对数,例如两个轴上的对数)来呈现 FFT 幅度结果。

复杂 FFT 的相位通常对于任何可视化都不重要,除非您正在进行某种类型的相位声码器分析+再合成。

关于java - 来自 FFT 的有用音频数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5054762/

相关文章:

java - 如何在 Java 中定义一个接口(interface)方法来接受一个类或其任何子类?

java - Tomcat java.io.IOException : Invalid keystore format when loading keystore via Classloader 异常

r - 为 R 中的 signal::filter 函数提供初始值

signal-processing - FFT归一化

python - 在 Python 中计算单位的 n 次根

java - 从表和连接表中选择部分列 Criteria API

java - Java中基类中父类(super class)的 protected 方法会发生什么?

Python 相当于 Matlab 的 resample()

c - 如何编写长信号和长核卷积的 C 代码

iPhone 加速框架 FFT 与 Matlab FFT