Making Our Own Spectrogram
20 hours ago
- 傅里叶变换在时域和频域之间转换信号,从而实现频谱图的生成。
- 方波可以通过叠加余弦谐波来近似,这说明了傅里叶级数的工作原理。
- 真实世界的音频(例如嘴部爆裂声)可以通过FFT使用有限数量的余弦分量进行重建。
- 汉宁窗等窗函数通过在分块分析中逐渐减小信号边缘来防止频谱泄漏。
- 使用汉宁窗的重叠相加重建可以产生正确的音频,但边界处需要填充。
- Gabor极限迫使时间和频率分辨率之间进行权衡;选择FFT大小和重叠会影响频谱图的清晰度。
- 频率仓之间的插值提高了视觉平滑度,而禁用插值则会显示仓的边界。
- 感知均匀的颜色映射(例如colorcet)比简单的黑白渐变更能提高频谱图的可读性。
- 具有自定义插值的对数频率尺度能更好地表示人类音高感知。
- 使用cpal库通过回调函数从系统设备(例如通过回环)捕获音频输入以进行实时处理。
- UI和音频线程通过通道进行通信;有界VecDeque可防止渲染停滞期间的内存溢出。
- egui中的纹理更新涉及分配句柄、绘制到ColorImage以及每帧上传到GPU。
- 性能分析显示CPU热点:25%的周期用于克隆ColorImage,40%用于纹理上传,27%用于FFT计算。
- 频谱图可视化各种音乐流派和声音(例如颤音、频率扫描、鸟鸣)以寓教于乐。