c++ - 改进音乐频率分析仪的参数

标签 c++ audio fft frequency equalizer

我对音频数据使用 FFT 来输出分析器,就像您在 Winamp 或 Windows Media Player 中看到的那样。然而输出看起来并不那么好。我使用对数刻度进行绘图,并将 FFT 的线性结果平均到相应的对数箱中。例如,我使用的垃圾箱如下:

16k,8k,4k,2k,1k,500,250,125,62,31,15 [赫兹]

然后我绘制幅度 (dB) 与频率 [hz] 的关系。该图确实对音乐做出了“ react ”,我可以看到鼓样本或高音调的响应。但该图在接近较低频率时非常“饱和”,并且总体看起来与您在应用程序中看到的不太一样,应用程序往往分布更均匀。我觉得显示视觉输出的应用程序往往会对数据执行不同的操作,以使其看起来更好。

我可以对数据执行哪些操作,使其看起来更像典型的音乐播放器应用程序?

一些有用的信息: 我下采样至单 channel 32kHz,并指定 35ms 的时间窗口。这意味着 FFT 获得约 1100 点。我改变这些值进行实验(即尝试 16kHz,并增加/减少间隔长度),但我得到了类似的结果。

最佳答案

使用 1100 点的 FFT,您可能无法以较高的频率分辨率捕获低频。

想一想,30 Hz 对应于 33ms 的周期,在 32kHz 下大约是 1000 个样本。因此,您此时只能捕获大约 1 个周期。

因此,您需要更长的 FFT 窗口来捕获具有清晰频率分辨率的低频。

您可能需要 4000 个样本或更多的时间窗 Eloquent 能开始在低频处获得明显更高的频率分辨率。这也没什么问题,因为您仍然会每秒获得大约 8-10 次频谱更新。

如果您想要非常快速地更新高频箱,但想要在低频处获得良好的频率分辨率,还有一个选择是更快地更新高频箱(例如使用您当前使用的窗口)但计算低频箱的频率较低(并且需要较大的窗 Eloquent 能获得良好的频率分辨率。)

关于c++ - 改进音乐频率分析仪的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7829713/

相关文章:

c++ - 双项目解决方案中的 Visual Studio : Include . h 或 .cpp

ios - 如何在不在设备上下载 mp3 文件的情况下从 URL 流式传输音频

javascript - 动态生成HTML5中音频的时间和小数点格式

javascript - 嵌入声音无法播放 Firefox

fft.rfft 的 Python 绘图频率

fft - Ron Mayer FFT 卷积算法

c++ - substr 导致段错误

c++ - 从 const void * 转换为 float 数组

c++ - 在 C++ 中使用 openmp 进行多线程

c++ - CImg - 获取图像的逆 FFT