音で動きを変える沢山のボール
import ddf.minim.*; import ddf.minim.analysis.*; import ddf.minim.effects.*; import ddf.minim.signals.*; import ddf.minim.spi.*; import ddf.minim.ugens.*; Minim minim; AudioPlayer music; FFT fft; //高速フーリエ変換をするための変数 float [] x = new float[512]; //バッファサイズより小さく float [] y = new float[512]; //バッファサイズより小さく float [] vx = new float[512]; //バッファサイズより小さく float [] vy = new float[512]; //バッファサイズより小さく void setup() { size(512, 400); for (int i = 0; i < x.length; i++) { x[i] = random(width); y[i] = random(height); vx[i] = random(3)-1.5; vy[i] = random(3)-1.5; } minim = new Minim(this); String s = "http://www.is.kyusan-u.ac.jp/~goshi/d/irish.mp3"; music = minim.loadFile(s, 512); //loadFile("音声ファイル", バッファサイズ) music.play(); fft = new FFT( music.bufferSize(), music.sampleRate() ); //音声ファイルをFFTにセット } void draw() { background(255); float right = 0; float left = 0; for (int i = 0; i < music.bufferSize() - 1; i++) { left += abs(music.left.get(i)); right += abs(music.right.get(i)); } left = 1000*left/music. bufferSize(); right = 1000*right/music. bufferSize(); fft.forward( music.mix ); //FFTを実行 for (int i = 0; i < x.length; i++) { fill(left, right, 0); ellipse(x[i], y[i], fft.getBand(i), fft.getBand(i)); x[i] += vx[i]; y[i] += vy[i]; if (x[i] < 0 || x[i] > width) { vx[i] *= -1; } if (y[i] < 0 || y[i] > height) { vy[i] *= -1; } } }
Copy