xxxxxxxxxx
118
let MeterAnalyser;
let mic;
let fftAnalyser;
let mouthRange;
let eyebrowRange;
let eyeOpenRange;
function setup() {
rectMode(CENTER);
createCanvas(400, 400);
fftAnalyser= new Tone.Analyser({
"type" : "fft",
"size" : 32,
"smoothingg":0.9
});
MeterAnalyser= new Tone.Meter(0.8);
mic = new Tone.UserMedia();
mic.open();
mic.connect(MeterAnalyser);
mic.connect(fftAnalyser);
}
function draw() {
background(10,200,200);
// console.log(round(MeterAnalyser.getValue()));
// noStroke();
// for(let i=0; i<fftAnalyser.getValue().length;i++){
// let amp=fftAnalyser.getValue();
// let y = map(amp[i],-200,0,height,0);
// fill(0,y);
// rect(i*width/32,height,width/64, y-height);
// }
drawface();
}
function drawface(){
let faceX=map(mouseX,-500,300,-5,5);
let faceY=map(mouseY,-500,300,-5,5);
push();
translate(width/10*0.5,height/10*0.3);
scale(1.2);
beginShape();
fill("#FFFDED");
stroke("#FFF7AD");
vertex(263.9,162.3);
bezierVertex(299.59999999999997,231,271.2,314.4,205.89999999999998,314.3);
bezierVertex(117.29999999999998,314.2,156.7,257.90000000000003,77.29999999999998,249.9);
bezierVertex(-28.500000000000014,239.3,-0.8000000000000114,158.3,19.899999999999984,127.60000000000001);
bezierVertex(33.7,107.2,7.2,71,20.5,38.2);
bezierVertex(35.7,0.8,87.1,-9.2,126.4,10.1);
bezierVertex(159.5,26.4,178.8,-6.9,232.9,24);
bezierVertex(305.6,65.6,244.5,125.1,263.9,162.3);
endShape();
pop();
noStroke(0);
fill("#FF9930");
ellipse(width/2,height/2,200,200);
//mouth
push();
fill(0,0,0);
translate(faceX,faceY);
mouthRange= map(round(MeterAnalyser.getValue()),-40,0,0,20,true);
// triangle(width/2,height/2-10,width/2-20,height/2+25,width/2+150,height/2+25);
// triangle(width/2,height/2+60+mouthRange,width/2-20,height/2+25+mouthRange,width/2+150,height/2+25+mouthRange);
// triangle(width/2,height/2+10+mouthRange*1.5,width/2-20-mouthRange*0.5,height/2+10,width/2+20+mouthRange*0.5,height/2+10)
arc(width/2,height/2-mouthRange*0.5, 40,10+mouthRange*4.5,QUARTER_PI*0.5,-QUARTER_PI*4.5, PIE);
pop();
//eyes blink
push();
translate(faceX,faceY);
eyeOpenRange=map(round(fftAnalyser.getValue()[28]),-100,-80,30,0,true);
noStroke();
fill(255);
ellipse(width/2-20,height/2-30,20,eyeOpenRange);
ellipse(width/2+20,height/2-30,20,eyeOpenRange);
pop();
// eyebrow raise
push();
translate(faceX,faceY);
eyebrowRange=map(round(fftAnalyser.getValue()[5]),-200,-10,0,50);
fill(0);
rect(width/2-20,height/2-90+eyebrowRange,20,5);
rect(width/2+20,height/2-90+eyebrowRange,20,5);
pop();
}