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] は 70Hz での amp 値を持ちます。間違った方法を使用している可能性がありますか? 私はMinimのドキュメントをここで読んでいます。
あなたの忍耐と指導に感謝します! スタックオーバーフローは初めてです。
アップデート!現在、オーディオビジュアライザーが機能しています(少なくとも、マウスをドラッグしている間(他の部分で作業している間はプレースホルダー)。コードについては回答を参照してください。