xxxxxxxxxx
193
let buttonRestart, buttonPlay, buttonSave;
let video;
let poseNet;
let poses = [];
let pg;
let noseX;
let noseY;
let pNoseX;
let pNoseY;
let volume, spectrum, volumeMap;
let mover = 0;
let reader;
let osc, playing, freq, amp;
let img;
let drawingMode = true;
function setup() {
createCanvas(windowWidth, windowHeight);
background(0);
rectMode(CENTER);
video = createCapture(VIDEO);
video.size(width, height);
mic = new p5.AudioIn();
mic.start();
fft = new p5.FFT();
fft.setInput(mic);
pixelDensity(1);
//pg = createGraphics(width, height);
background(0);
poseNet = ml5.poseNet(video, modelReady);
poseNet.on('pose', function(results) {
poses = results;
pg = createGraphics(width, height);
});
buttonRestart = createButton('restart');
buttonRestart.position(50, height - 40);
buttonRestart.size(80);
buttonRestart.mousePressed(restart);
buttonPlay = createButton('play');
buttonPlay.position(width / 2 - 40, height - 40);
buttonPlay.size(80);
buttonPlay.mousePressed(play);
buttonSave = createButton('save');
buttonSave.position(width - 150, height - 40);
buttonSave.size(80);
buttonSave.mousePressed(saved);
buttonPause = createButton('pause');
buttonPause.position(50, height - 100);
buttonPause.size(80);
buttonPause.mousePressed(pause);
/*
buttonStart = createButton('start');
buttonStart.position(width /2, 80);
buttonStart.size(80);
buttonStart.mousePressed(start);
*/
osc = new p5.Oscillator('sine');
video.hide();
}
function draw() {
translate(width, 0);
scale(-1.0,1.0);
//background(0);
volume = mic.getLevel();
volumeMap = map(volume, 0.001, 0.2, 1, 20);
spectrum = fft.analyze();
print("volume " + volume);
lows = fft.getEnergy(20, 50);
mids = fft.getEnergy(50, 400);
highs = fft.getEnergy(400, 1000);
//image(pg, 0, 0, width, height);
if(drawingMode){
drawKeypoints();
}
stroke(0,0,255);
/*translate(mover,0);
line(0,0,0,height)
mover = (mover +1) % width;
*/
for(i=0;i<height; i = i + 2){
reader = get(mover,i);
if(reader[0]>1){
freq = map(i, 400, 1, 300, 700);
amp = 0.1;
osc.freq(freq);
osc.amp(amp);
}
}
}
function pause(){
drawingMode = false;
}
function drawKeypoints() {
for (let i = 0; i < min(poses.length, 1); i++) {
for (let j = 0; j < poses[i].pose.keypoints.length; j++) {
let keypoint = poses[i].pose.keypoints[j];
if (keypoint.score > 0.2) {
if (j == 0) {
noseX = keypoint.position.x;
noseY = keypoint.position.y;
pg.stroke(255, 255, 255);
pg.strokeWeight(volumeMap);
pg.line(noseX, noseY, pNoseX, pNoseY);
if(volume < 0.05){
stroke(0);
}
pNoseX = noseX;
pNoseY = noseY;
}
}
}
}
}
function restart() {
background(0);
}
function start(){
drawKeypoints();
}
function play(){
osc.start();
stroke(0,0,255);
/*translate(mover,0);
line(0,0,0,height)
mover = (mover +1) % 400;
*/
for(i=0;i<height; i = i + 2){
reader = get(mover,i);
if(reader[0]>1){
freq = map(i, 400, 1, 300, 700);
amp = 0.1;
osc.freq(freq);
osc.amp(amp);
}
}
}
function saved() {
save("PARANOiSE.png");
}
function gotPoses(results) {
poses = results;
}
function modelReady() {
select('#status').html('model Loaded');
}