Processing #1 visualizer circle color
result
code
import ddf.minim.*;
import ddf.minim.analysis.*;
Minim minim;
AudioPlayer player;
AudioInput in;
FFT fft;
// 周波数帯域を限定する変数
int minBand = 10;
int maxBand = 80;
// 色調を確定する変数
float R = 150;
float G = 150;
float B = 150;
float bgColor = 0;
// 初期化関数
void setup() {
//minim初期化
minim = new Minim(this);
in = minim.getLineIn();
fft = new FFT(in.bufferSize(),in.sampleRate());
size(600, 600);
strokeWeight(1);
background(255);
blendMode(ADD);
}
// 毎フレーム呼ばれる関数
void draw() {
background(bgColor);
setColor();
//-------------------------
//左ラインインから音声を取得
fft.forward(in.left);
//-------------------------
circle();
}
//円を描画する関数
void circle() {
for (int j = minBand; j < maxBand; j++) {
//-------------------------
//ある帯域の音量を取得
float volume = fft.getBand(j);
//-------------------------
println(R);
if (volume > 0.3 && volume < 4) {
float w = map(j, minBand, maxBand, 0, width);
float h = map(volume, 0, 5, 0, height/2);
fill(R, G, B, 100); stroke(R, G, B);
ellipse(w, height/2, h, h);
}
}
}
//色を変化させる関数
void setColor() {
// ランダムに設定
R = R + 1;
G = G + 2;
B = B + 3;
if (R > 255) {
R = R - 255;
}
if (G > 255) {
G = G - 255;
}
if (B > 255) {
B = B - 255;
}
}
memo
背景
随分前運営してた技術解説ブログで作ってたものの焼き直し
技術
fft.forward(in.left);は、PCへの左ラインインの音を取得。mp3とか使いたかったら、この辺いじる。
fft.getBand()は、FFTによって帯域幅毎に分割された音声の、ある個所の音量を取得する関数。
fft = new FFT(in.bufferSize(),in.sampleRate());
初期設定ではbufferSize()は1024、sampleRateは44100Hz。
これは44100Hzの音声を1024のバッファで分割する、ということ。
FFTによって分割された各帯域幅は44100/1024≒43.06Hzfft.getBand(10)とは、『分割された帯域幅の10番目の帯域の音量』を示す。
fft.getBand(10)≒43.06Hz x 10 ≒430Hz
fft.getBand(80)≒43.06Hz x 80 ≒3KHzベース音は別にいいかって感じにして、中音域から高音域までを取得するようにしたのが、今回のプログラム
動画は画像を出力し、Aviutlで読み込んで作った(うろ覚え)
この記事が気に入ったらサポートをしてみませんか?