import ddf.minim.*; import ddf.minim.ugens.*; import processing.serial.*; Serial myPort; Minim minim; AudioOutput out; Oscil wave; float inX; float inY; float inZ; float inBend; float inR; float inG; float inB; float inT; float inH; float bX; float bY; float bZ; int check = 0; float sensors[]; int ch = 0; String myString; void setup(){ size(800,500); minim = new Minim(this); // use the getLineOut method of the Minim object to get an AudioOutput object out = minim.getLineOut(); // create a sine wave Oscil, set to 440 Hz, at 0.5 amplitude wave = new Oscil( 440, 0.5f, Waves.SINE ); // patch the Oscil to the output wave.patch( out ); String portName = Serial.list()[2]; myPort = new Serial(this, portName, 9600); myPort.bufferUntil('\n'); } void draw() { background(0); stroke(255); strokeWeight(1); // draw the waveform of the output for(int i = 0; i < out.bufferSize() - 1; i++) { line( i, 250 - out.left.get(i)*50, i+1, 250 - out.left.get(i+1)*50 ); line( i, 350 - out.right.get(i)*50, i+1, 350 - out.right.get(i+1)*50 ); } // draw the waveform we are using in the oscillator stroke( 128, 0, 0 ); strokeWeight(4); for( int i = 0; i < width-1; ++i ) { point( i, height/2 - (height*0.49) * wave.getWaveform().value( (float)i / width ) ); } noStroke(); fill(80); rect(100,40,400,20); rect(100,80,400,20); rect(100,120,400,20); textSize(12); fill(255); textAlign(RIGHT); text("X AXIS",90,55); text("Y AXIS",90,95); text("Z AXIS",90,135); /// 3 axis of the accelorometer fill(0,255,255); rect(290 + (bX-inX)/2,40,inX-bX,20); rect(290 + (bY-inY)/2,80,inY-bY,20); rect(290 + (bZ-inZ)/2,120,inZ-bZ,20); if(inX > 0 && check == 0){ bX = inX; bY = inY; bZ = inZ; check = 1; } if (myString != null) { myString = trim(myString); float sensors[] = float(split(myString, ',')); inX=sensors[0]; inY=sensors[1]; inZ=sensors[2]; inBend=sensors[6]; inR=sensors[3]; inG=sensors[4]; inB=sensors[5]; inT=sensors[7]; inH=sensors[8]; } float amp = map( bX-inX, -200, 200, 1, 0 ); wave.setAmplitude( amp ); float freq = map( bZ-inZ, -200, 200, 110, 880 ); wave.setFrequency( freq ); } void keyPressed() { switch( key ) { case '1': wave.setWaveform( Waves.SINE ); break; case '2': wave.setWaveform( Waves.TRIANGLE ); break; case '3': wave.setWaveform( Waves.SAW ); break; case '4': wave.setWaveform( Waves.SQUARE ); break; case '5': wave.setWaveform( Waves.QUARTERPULSE ); break; default: break; } } void serialEvent(Serial myPort) { // read the serial buffer: myString = myPort.readStringUntil('\n'); }