xxxxxxxxxx
59
let mySong;
let positions = [];
let sizes = [];
let colors = [];
let amp;
let fft;
let palette = ["#ff00c1","#9600ff","#4900ff","#00b8ff"];
let numBins = 128;
function preload() {
mySong = loadSound("arulo-down-on-you.mp3");
}
function setup() {
createCanvas(400, 400, WEBGL);
mySong.play();
fft = new p5.FFT(0.8, numBins);
amp = new p5.Amplitude();
for (let i = 0; i < numBins; i++) {
let v = createVector(random(-width/4, width/4),
random(-height/4, height/4),
random(-width/8, width/8));
positions.push(v);
sizes.push(random(20, 40));
colors.push(palette[int(random(0, palette.length-1))]);
}
}
function draw() {
let level = amp.getLevel();
let bins = fft.analyze();
let lightColor = map(level, 0, 0.8, 10, 150);
// noStroke();
let bg = map(level, 0, 0.8, 50, 255);
background(0, bg, bg);
ambientLight(lightColor);
push();
let angle = millis() / 1500;
// let angle = 0
translate(cos(angle), sin(angle));
rotateY(angle);
camera(0, 0, (height*1.1) / tan(PI*30.0 / 180.0), 0, 0, 0, 0, 1, 0);
directionalLight(color("#333"), cos(angle), 1, sin(angle));
rotateY(-angle);
translate(-cos(angle), -sin(angle));
for (let i = 0; i < positions.length; i++) {
specularMaterial(colors[i]);
positions[i] = positions[i].add(
random(-3, 3),
random(-3, 3),
random(-3, 3)
);
translate(positions[i]);
let size = map(bins[i], 0, 255, 10, 50);
box(size);
}
pop();
}