gpt4 book ai didi

arrays - 使用 Minim 创建音频幅度数组

转载 作者:行者123 更新时间:2023-12-02 22:39:03 26 4
gpt4 key购买 nike

我正在开发一个基于 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 here 的文档,使用我正在使用的 getFreq() FFT 方法记录 here .

感谢您的耐心和指导!这是我第一次遇到堆栈溢出。

更新!我现在有一个工作音频可视化器(至少,当你拖动鼠标时(当我处理其他部分时占位符)。请参阅代码的答案。

最佳答案

这行得通。

最小测试2:

    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[430];
float[] temp;

public void settings() {
size(800, 600);
}

public MinimTest2()
{
minim = new Minim(this);
in = minim.getLineIn();
fft = new FFT(in.bufferSize(), in.sampleRate());
}

public float[] getAmps(){
fft.forward(in.left);
amp = new float[430];
temp = new float[fft.specSize()];
int index = 0;
for (int k=0; k<fft.specSize(); k++){
temp[index]=fft.getBand(k);
index++;
}
for (int i=0; i<amp.length; i++)
amp[i]=temp[i];
return amp;
}
public int getFFTSize(){
return fft.specSize();
}


}

客户(进行中):
import objectdraw.*;
import java.awt.*;

public class Client extends WindowController{
MinimTest2 listener = new MinimTest2();
float[] amps = new float[430];
FilledRect[] bars = new FilledRect[430];

public void begin(){
resize(430,430);
System.out.println(canvas.getWidth());
System.out.println(canvas.getHeight());
}

public void onMouseDrag(Location point){
canvas.clear();
graphAmps();
listAmps();
}

public void ampUp(){
amps=listener.getAmps();
}

public void listAmps(){
ampUp();
for (int k=0; k<amps.length; k++)
System.out.println(amps[k]);
}

public void graphAmps(){
ampUp();
double xPos =0;
double rectWidth = canvas.getWidth()/430;
for (int k=0; k<430; k++){
bars[k] = new FilledRect (xPos, (canvas.getHeight()-(amps[k])*5) , rectWidth, (amps[k])*5, canvas);
xPos+=rectWidth;
bars[k].setColor(Color.BLUE);
}
}

}

关于arrays - 使用 Minim 创建音频幅度数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35006420/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com