我正在开发一个基于 Minim 的音频可视化项目。对于这个项目的一部分,我需要一个频率放大器阵列(我将使用这个阵列来确定监视器条的高度)。我以前从未使用过 Minim,所以我提前为我对这个主题的有限知识道歉。音频源是来自我的 PC 的任何输出声音的虚拟音频电缆的输入。
我遇到的问题是我的 amp[] (由浮点数制成)充满了 0.0 ;换句话说,它并没有充满各种频率的幅度(尽管我对 Zedd 音乐的爆破!)。
这是我的代码(用 Eclipse 编写):
import processing.core.*;
import java.awt.*;
import ddf.minim.signals.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;
public class MinimTest2 extends PApplet {
Minim minim;
FFT fft;
AudioInput in;
float[] amp = new float[2000];
public void settings() {
size(800, 600);
}
public MinimTest2()
{
minim = new Minim(this);
in = minim.getLineIn(Minim.STEREO, 2048);
fft = new FFT(in.bufferSize(), in.sampleRate());
fft.logAverages(30, 5);
}
public float[] getAmps(){
int index = 0;
for (int k=0; k<20000; k+=10){
amp[index]=fft.getFreq(k);
index++;
}
return amp;
}
}
当客户端类调用/打印 getAmps() 时,会打印 0.0。我相信人类能听到的最高声音是 20kHz(因此是 for 循环中的条件)。数组应该每 10Hz 有一次 amp 采样,所以 amp[7] 的 amp 值应该是 70Hz。我可能使用了错误的方法吗?我一直在这里阅读 Minim 的文档,这里记录了我使用的 getFreq() FFT 方法。
感谢您的耐心和指导!这是我第一次遇到堆栈溢出。
更新!我现在有一个工作的音频可视化器(至少,当你拖动鼠标时(当我处理其他部分时占位符)。请参阅代码的答案。