我正在为OpenFrameworks做一些教程(在编码方面我还是个菜鸟,但到目前为止有一些经验,有一些教程,并了解过去几年来的情况和内容),以及该代码包括获取音频样本的声谱并将这些值扔到数组中以控制浮点值。但是我似乎无法全神贯注于这里发生的事情。
这是相关的代码(这是一个VJ整形器,可根据声谱的输入来旋转和更改形状的大小):
header:
float * fftSmooth;
int bands;
cpp setup:
fftSmooth = new float[8192];
for (int i = 0; i < 8192; i++) {
fftSmooth[i] = 0;
}
bands = 64;
cpp update:
float * value = ofSoundGetSpectrum(bands);
for (int i = 0; i < bands; i++) {
fftSmooth[i] *= release; //"release" is a float
if (fftSmooth[i] < value[i]) {
fftSmooth[i] = value[i];
}
}
如果有人可以引导我逐步进行操作,那将很棒。我了解(在某种程度上)在安装程序中,正在创建一个名为“fftSmooth”的数组,其中包含8192浮点数,然后在for循环中用零填充,然后为int“band”赋值64然后,在更新中,通过查看“bands”来创建另一个名为“value”的数组,其中包含64个浮点,这也是ofSoundGetSpectrum中的band数,它在播放时从声音文件中获取频率级别。我已经看过openframeworks引用页上的声音频谱信息,但在这种情况下并没有真正了解它在做什么,而且我不知道for循环和update部分中的if语句在做什么。要么。
不知道发生了什么并不会影响我是否可以真正使用该代码,但是我觉得如果我想实际构建此代码(获取不同的频率范围等),我需要知道什么for循环并且更新中的if语句正在执行。
最佳答案
这似乎是在进行瞬时FFT,并返回每个频带的“强度”。
我假设代码的后半部分在循环中运行。第一次,它只是将当前的频段强度复制到fftSmooth
中。在随后的过程中,将release
乘以旨在将fftSmooth
中的值减小一定百分比。然后,任何大于已过滤频段的新频段强度都将覆盖旧值。
如果您对fftSmooth
的图进行动画处理,则应该得到这样的图像(减去颜色):