You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
4.5 KiB
188 lines
4.5 KiB
|
|
import org.openkinect.freenect.*;
|
|
import org.openkinect.processing.*;
|
|
import processing.sound.*;
|
|
|
|
SoundFile drone1;
|
|
SoundFile drone2;
|
|
SoundFile drone3;
|
|
SoundFile drone4;
|
|
|
|
Kinect kinect;
|
|
|
|
PImage touchImg;
|
|
int tintCount = 0;
|
|
int tintDir = 0;
|
|
|
|
int minDepth = 795;
|
|
int maxDepth = 805;
|
|
|
|
float deg;
|
|
|
|
boolean ir = false;
|
|
boolean colorDepth = true;
|
|
boolean mirror = false;
|
|
float freqs[] = {0, 0, 0, 0};
|
|
|
|
void setup() {
|
|
//size(1024, 768, P3D);
|
|
//size(800, 600, P3D);
|
|
fullScreen(2);
|
|
|
|
touchImg = loadImage("touch.png");
|
|
|
|
kinect = new Kinect(this);
|
|
kinect.initDepth();
|
|
kinect.initVideo();
|
|
//kinect.enableIR(ir);
|
|
kinect.enableColorDepth(colorDepth);
|
|
kinect.enableMirror(mirror);
|
|
|
|
deg = kinect.getTilt();
|
|
|
|
drone1 = new SoundFile(this, "drone1.wav");
|
|
drone2 = new SoundFile(this, "drone2.wav");
|
|
drone3 = new SoundFile(this, "drone3.wav");
|
|
drone4 = new SoundFile(this, "drone5.wav");
|
|
|
|
drone1.amp(0.1);
|
|
drone2.amp(0.1);
|
|
drone3.amp(0.1);
|
|
drone4.amp(0.1);
|
|
|
|
drone1.loop();
|
|
drone2.loop();
|
|
drone3.loop();
|
|
drone4.loop();
|
|
|
|
colorMode(HSB, 255, 100, 100);
|
|
background(255);
|
|
noStroke();
|
|
smooth();
|
|
//frameRate(15);
|
|
}
|
|
|
|
|
|
void draw() {
|
|
background(255);
|
|
//image(kinect.getVideoImage(), 0, 0);
|
|
//image(kinect.getDepthImage(), 640, 0);
|
|
|
|
PImage img = kinect.getDepthImage();
|
|
int[] rawDepth = kinect.getRawDepth();
|
|
color c = color(255);
|
|
int skip = 10;
|
|
int freqsCnt[] = {0, 0, 0, 0};
|
|
|
|
//fill(c, 20);
|
|
//rect(0, 0, width, height);
|
|
|
|
//image(img, 0, 0);
|
|
|
|
for(int x = 0; x < img.width; x += skip){
|
|
for(int y = 0; y < img.height; y += skip){
|
|
int index = x + y * img.width;
|
|
float cDepth = 30-map(rawDepth[index], minDepth, maxDepth, 0, 30);
|
|
float cColor = map(rawDepth[index], minDepth, maxDepth, 0, 255);
|
|
|
|
c = color(cColor, 100, 100);
|
|
|
|
if (rawDepth[index] >= minDepth && rawDepth[index] <= maxDepth) {
|
|
fill(c, 150);
|
|
ellipse(x*1.55, y*1.40, cDepth*2, cDepth*2);
|
|
|
|
if(cColor <= 64){
|
|
freqsCnt[0]++;
|
|
}
|
|
if(cColor > 64 && cColor <= 128){
|
|
freqsCnt[1]++;
|
|
}
|
|
if(cColor > 128 && cColor <= 196){
|
|
freqsCnt[2]++;
|
|
}
|
|
if(cColor > 196){
|
|
freqsCnt[3]++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
drone1.amp(map(freqsCnt[0],0,300,0.01,.9));
|
|
drone2.amp(map(freqsCnt[1],0,300,0.01,1));
|
|
drone3.amp(map(freqsCnt[2],0,300,0.01,.6));
|
|
drone4.amp(map(freqsCnt[3],0,300,0.01,.7) );
|
|
|
|
|
|
if(freqsCnt[0] == 0 && freqsCnt[1] == 0 && freqsCnt[2] == 0 && freqsCnt[3] == 0) {
|
|
tint(255, tintCount);
|
|
image(touchImg, (width/2)-touchImg.width/2, (height/2)-touchImg.height/2);
|
|
if(tintDir==0) {
|
|
tintCount++;
|
|
} else {
|
|
tintCount--;
|
|
}
|
|
if(tintCount >= 255) {tintDir = 1;}
|
|
if(tintCount <= 0) {tintDir = 0;}
|
|
println(freqsCnt[0] + " - " + freqsCnt[1] + " - " + freqsCnt[2] + " - " + freqsCnt[3] + " - " + tintCount + " - " + tintDir);
|
|
} else {
|
|
if(tintCount > 0) {
|
|
tintCount--;
|
|
tint(255, tintCount);
|
|
image(touchImg, (width/2)-touchImg.width/2, (height/2)-touchImg.height/2);
|
|
}
|
|
}
|
|
|
|
/*
|
|
fill(0);
|
|
text("TILT: " + deg, 10, 20);
|
|
text("THRESHOLD: [" + minDepth + ", " + maxDepth + "]", 10, 36);
|
|
text("FREQS: [" + freqsCnt[0] + ", " + freqsCnt[1] + ", " + freqsCnt[2] + ", " + freqsCnt[3] + "]", 10, 52);
|
|
*/
|
|
|
|
/*
|
|
fill(255);
|
|
text(
|
|
"Press 'i' to enable/disable between video image and IR image, " +
|
|
"Press 'c' to enable/disable between color depth and gray scale depth, " +
|
|
"Press 'm' to enable/diable mirror mode, "+
|
|
"UP and DOWN to tilt camera " +
|
|
"Framerate: " + int(frameRate), 10, 515);
|
|
*/
|
|
}
|
|
|
|
void keyPressed() {
|
|
if (key == 'i') {
|
|
ir = !ir;
|
|
kinect.enableIR(ir);
|
|
} else if (key == 'c') {
|
|
colorDepth = !colorDepth;
|
|
kinect.enableColorDepth(colorDepth);
|
|
} else if(key == 'm'){
|
|
mirror = !mirror;
|
|
kinect.enableMirror(mirror);
|
|
} else if (key == 'a') {
|
|
minDepth = constrain(minDepth+10, 0, maxDepth);
|
|
println("minDepth: "+minDepth);
|
|
} else if (key == 's') {
|
|
minDepth = constrain(minDepth-10, 0, maxDepth);
|
|
println("minDepth: "+minDepth);
|
|
} else if (key == 'z') {
|
|
maxDepth = constrain(maxDepth+10, minDepth, 2047);
|
|
println("maxDepth: "+maxDepth);
|
|
} else if (key =='x') {
|
|
maxDepth = constrain(maxDepth-10, minDepth, 2047);
|
|
println("maxDepth: "+maxDepth);
|
|
}
|
|
|
|
if (key == CODED) {
|
|
if (keyCode == UP) {
|
|
deg++;
|
|
} else if (keyCode == DOWN) {
|
|
deg--;
|
|
}
|
|
}
|
|
|
|
deg = constrain(deg, 0, 30);
|
|
kinect.setTilt(deg);
|
|
|
|
}
|