Algorithm FMOD频率分析/归一化

Algorithm FMOD频率分析/归一化,algorithm,audio,normalization,frequency,fmod,Algorithm,Audio,Normalization,Frequency,Fmod,我正在使用FMOD库将FFT应用于音频流,为我提供不断更新的固定数量的频率箱。每个bin表示一个相等的频率范围,其值介于0和1之间,表示处理音频的该范围的强度。FMOD文件规定,这些值可以用分贝表示,其中val是介于0和1之间的值: 分贝=10.0f*(浮点)log10(val)*2.0f 我正在尝试制作一个自动的频闪式节拍检测可视化。到目前为止,我在一个固定的时间间隔进行测试,以查看特定频率单元的强度值是否超过指定的边界-如果是这种情况,频闪闪烁。虽然这是一种相当粗糙的方法,但它对于我的需求来

我正在使用FMOD库将FFT应用于音频流,为我提供不断更新的固定数量的频率箱。每个bin表示一个相等的频率范围,其值介于0和1之间,表示处理音频的该范围的强度。FMOD文件规定,这些值可以用分贝表示,其中val是介于0和1之间的值:

分贝=10.0f*(浮点)log10(val)*2.0f

我正在尝试制作一个自动的频闪式节拍检测可视化。到目前为止,我在一个固定的时间间隔进行测试,以查看特定频率单元的强度值是否超过指定的边界-如果是这种情况,频闪闪烁。虽然这是一种相当粗糙的方法,但它对于我的需求来说相当有效


但是,此指定边界仅在系统/音乐播放器的音量最大时有效。当我减小任一音量时,选通灵敏度降低,变得非常不准确或完全停止闪烁。我假设我需要以某种方式对数据进行标准化,以便独立于体积进行分析,尽管通过按
1/最大箱的值缩放数据,最大值总是最大化。这将永久超过指定的边界,导致选通无限期闪烁。我想不出还有什么别的办法可以做到这一点,而且我已经心神不宁好几天了——任何帮助或正确方向上的一点都将不胜感激

在较长的范围内进行正常化。你需要一个像信封跟随者一样的长发布时间的东西

如果你搜索“压缩器”源代码,或者自动增益控制,肯定会出现一些东西

但在伪C++中广泛使用,并且在输入的音频(FFT之前的时域信号)上工作:

现在,峰值水平随时间缓慢衰减。你可以用它来计算一个增益因子来规范你的输入音频。根据需要调整0.99f,以获得合理的衰减时间和正确的采样率


还有一个信号处理堆栈交换网站,在那里你可以更快地回答这类问题(尽管偶尔会附上一段几乎无法理解的代数:)

谢谢,现在我有地方开始学习了!没有意识到信号处理SE,很可能有一段时间会发现自己在那里。:)
auto instant_level = std::abs(signal);
peak_level *= 0.99f;
peak_level = peak_level > instant_level ? peak_level : instant_level;