javax.sound.sampled
库,我该如何为此编写音频频谱
This answer基本上描述了我到目前为止所做的事情
首先,我想"获取时域数据"。关于我,我有一个愚蠢的(?)问题,时域数据是什么。根据{{3}},它是一个图表,"显示信号如何随时间变化"。因此,它将是表示数据的函数的导数?页面右侧的示例动画看起来并不像那样,所以我抓住了这个想法。
然后在最后一点,提到的答案是根据频率"绘制"对数幅度(适当缩放);在哪里我想问一下,究竟要从哪里获得频率。
最终我得到的代码:
int n = (int)Math.pow(2, 9);
Complex[] timedomain = new Complex[n];
for (int i = 0; i < n; i++) {
timedomain[i] = new Complex(Hann(/*get time domain data i*/), 0);
}
Complex[] fft = FFT.fft(timedomain);
fft = FFT.convolve(fft, fft);
double[] logMag = new double[fft.length];
for (int i = 0; i < fft.length; i++) {
double re = fft[i].re();
double im = fft[i].im();
logMag[i] = Math.log10(re*re + im*im);
}
int l = logMag.length;
int y = (int)(getHeight()*2.0f/3);
Polygon poly = new Polygon();
poly.addPoint(0, y);
//Note that I am currently plotting the logMag data only!
float barW = ((float)getWidth())/l;
for (int x = 0; x < l; x++) {
g.setColor(new Color(35, 111, 233));
int h = (int)(logMag[x]);
poly.addPoint((int)(x*(barW)), y-h);
poly.addPoint((int)((x+1)*(barW)), y-h);
}
poly.addPoint(getWidth(), y);
g.fillPolygon(poly);
任何帮助表示感谢,提前谢谢你!