What I tried to do was figure out a way of setting up the Kinect in a way where it would be able to- using brightness/depth thresholding- sense the movement of people (whether they’re in front of the display or simply walking in the background) in order to play the soundtrack or pause it/replay it. I used a sample soundtrack, but I’ll start working on the actual soundtrack today and tomorrow.
One of the challenges is figuring out whether I’ll have two separate soundtracks for the two parts of the exhibit, or simply have one that plays as long as someone is standing in front of the exhibit. I’ll have to do some tests in order to figure this out.
Here is my code so far:
// Credits: Daniel Shiffman, Depth thresholding example import org.openkinect.freenect.*; import org.openkinect.processing.*; import processing.sound.*; Kinect kinect; SoundFile soundfile; // Depth image PImage depthImg; //soundtrack playing boolean playing = false; // pixels to be shown int minDepth = 60; int maxDepth = 860; // kinect's angle float angle; void setup() { size(1280, 480); kinect = new Kinect(this); kinect.initDepth(); angle = kinect.getTilt(); // blank image showing everything depthImg = new PImage(kinect.width, kinect.height); //load soundtrack soundfile = new SoundFile(this, "soundtrack.aiff"); println("SFSampleRate= " + soundfile.sampleRate() + " Hz"); println("SFSamples= " + soundfile.frames() + " samples"); println("SFDuration= " + soundfile.duration() + " seconds"); } void draw() { // draw the raw image image(kinect.getDepthImage(), 0, 0); // threshold the depth image int[] rawDepth = kinect.getRawDepth(); int counter =0; for (int i=0; i < rawDepth.length; i++) { if (rawDepth[i] >= minDepth && rawDepth[i] <= maxDepth) { depthImg.pixels[i] = color(255); counter++; } else { depthImg.pixels[i] = color(0); } } if (counter > 10000){ if (!playing) { soundfile.play(); playing = true; } } else { if (playing) { soundfile.stop(); playing = false; } } // Draw the thresholded image depthImg.updatePixels(); image(depthImg, kinect.width, 0); fill(0); text("TILT: " + angle, 10, 20); text("THRESHOLD: [" + minDepth + ", " + maxDepth + "]", 10, 36); } //// Adjust the angle and the depth threshold min and max //void keyPressed() { // if (key == CODED) { // if (keyCode == UP) { // angle++; // } else if (keyCode == DOWN) { // angle--; // } // angle = constrain(angle, 0, 30); // kinect.setTilt(angle); // } else if (key == 'a') { // minDepth = constrain(minDepth+10, 0, maxDepth); // } else if (key == 's') { // minDepth = constrain(minDepth-10, 0, maxDepth); // } else if (key == 'z') { // maxDepth = constrain(maxDepth+10, minDepth, 2047); // } else if (key =='x') { // maxDepth = constrain(maxDepth-10, minDepth, 2047); // } //}