xxxxxxxxxx
152
let mic, fft;
let lpf;
let tick = 0;
let bw = 512;
let running = false;
let centerOffX = 0;
let centerOffY = 0;
let pcenterOffX = 0;
let pcenterOffY = 0;
let buffer = [512];
let pbuffer = [512];
let psum = 0.0;
function setup() {
createCanvas(768, 512,WEBGL);
mic = new p5.AudioIn();
mic.start();
lpf = new p5.LowPass();
// mic.connect(lpf);
lpf.set(12400); // set the cutoff frequency of the filter
fft = new p5.FFT();
fft.setInput(mic); //the cutoff frequency of the filter
background(44);
}
let main_rot = 0;
function mousePressed(){
centerOffX = mouseX-width;
centerOffY = mouseY-height;
tick=0;
// background(44);
main_rot = int(random(-2,2))*.4;
}
function draw() {
if(mouseIsPressed){
running = true;
centerOffX = mouseX-width;
centerOffY = mouseY-height;
}else{
running = false;
}
translate(width/2+centerOffX,height/2+centerOffY,12);
//rotateY(.25);
// rotateX(1.25);
//rotate(millis()*.001);
// rotate(main_rot);
if(running){
// analyze frequency data
let spectrum = fft.analyze();
let sum = 0.1;
// loop through spectrum data
for (let i = 0; i < spectrum.length; i++) {
// calculate bar height based on amplitude of frequency
// let loga = 20 * Math.log10(spectrum[i]);
let loga = 10 * Math.log2(spectrum[i]);
noStroke();
sum += float(spectrum[i]);
let shrink = 1- tick / (height*.5);
loga *= psum*.01;
let filli = (sin (loga*.24)+1)*122;
filli += random(0,3);
if(loga <10){
filli = 0;
}
fill( 255,filli*.6 );
buffer[i] = filli;
// draw in both directions mirored
/*
rect( i*.25,tick,1, 1);
rect(-(i*.25) ,tick,1, 1);
rect( i*.25,-tick,1, 1);
rect(-(i*.25) ,-tick,1, 1);
*/
// draw in position mirrored
// rect( i*.25,0,1, 1);
// rect(-(i*.25) ,0,1, 1);
}
sum /= float(spectrum.length);
drawBuffer();
psum = sum;
pcenterOffX = centerOffX;
pcenterOffY = centerOffY;
tick++;
}
}
function drawBuffer(){
for (let i = 0; i < buffer.length; i++) {
buffer[i] += random(-10,10);
fill( 255, buffer[i]*.6 );
let absy = abs(pcenterOffY - centerOffY);
if(pcenterOffY<centerOffY){ absy*=-1;}
if(tick==0){ absy=1;}
rect( i*.31,0,1,absy );
rect(-((i)*.31) ,0,1,absy);
//stroke(i*.25,0, i*.25+pcenterOffX,0+pcenterOffY);
}
}