xxxxxxxxxx
131
// a shader variable
let theShader;
let mic, fft;
let bassfreq = 0.;
let lmfreq = 0.;
let midfreq = 0.;
let himidfreq = 0.;
let hifreq = 0.;
let centerfreq = 0.;
let mainfreq = 0.;
let smooth_center_freq = 0.1;
let spectrum;
let debug = false;
let nyquist = 22050;
let mainticker = 1.;
function preload(){
// load the shader
theShader = loadShader('texcoord.vert', 'texcoord.frag');
}
function setup() {
// shaders require WEBGL mode to work
createCanvas(windowWidth, windowHeight, WEBGL);
noStroke();
mic = new p5.AudioIn();
mic.start();
fft = new p5.FFT();
fft.setInput(mic);
smooth_center_freq = centerfreq;
}
function analyzeMicInput(){
spectrum = fft.analyze();
let spectralCentroid = fft.getCentroid();
let mean_freq_index = spectralCentroid/(nyquist/spectrum.length+1);
centerfreq = map(log(mean_freq_index+1), 0, log(spectrum.length), 0, 1.);
bassfreq = fft.getEnergy("bass")/255;
lmfreq = fft.getEnergy("lowMid")/255;
midfreq = fft.getEnergy("mid")/255;
himidfreq = fft.getEnergy("highMid")/255;
hifreq = fft.getEnergy("treble")/255;
mainfreq = fft.getEnergy(500,12000)/255;
mainticker += mainfreq*.2;
//console.log("yo. " + smooth_center_freq);
smooth_center_freq = lerp( smooth_center_freq , centerfreq, 0.02 ) ;
//smooth_center_freq = centerfreq;
}
function draw() {
background(0);
analyzeMicInput();
if(!debug){
// shader() sets the active shader with our shader
shader(theShader);
}
//console.log(smooth_center_freq);
theShader.setUniform("iResolution", [width, height]);
theShader.setUniform("main_freq", smooth_center_freq);
theShader.setUniform("main_vol", mainfreq);
theShader.setUniform("iMouse", [mouseX, map(mouseY, 0, height, height, 0)]);
theShader.setUniform("iTime", mainticker);
// rect gives us some geometry on the screen
rect(0,0,width, height);
if(debug){
drawAudioData();
}
}
function windowResized(){
resizeCanvas(windowWidth, windowHeight);
}
function drawAudioData(){
background(222);
fill(22);
// FREQUENCIES
rect(10,10,bassfreq*100,10);
rect(10,30, lmfreq*100,10);
rect(10,50, midfreq*100,10);
rect(10,70, himidfreq*100 ,10);
rect(10,90, hifreq*100 ,10);
rect(10,120, mainfreq*100 ,10);
fill(122);
rect(10,130, 100,10);
fill(222,11,66);
rect(10,130, (centerfreq)*100,10);
}