// libraries import cc.arduino.*; import processing.serial.*; import oscP5.*; import netP5.*; import ddf.minim.*; import ddf.minim.signals.*; //declare library entities Minim minim; AudioOutput out; SineWave sine; OscP5 oscP5; Arduino arduino; //declare pins & global var int knob = 0; int pin[] = {12, 11, 10, 9, 8, 7, 6, 5, 4}; float a,b,c,d,e,f,g,h,i; float tone[] = {200, 1000, 300, 1200, 500, 1500, 700, 1900, 900}; boolean pressed[] = {false,false,false,false,false,false,false,false,false}; void setup() { size(480,420); background(0); //set up library entities arduino = new Arduino(this, "COM5", 57600); oscP5 = new OscP5(this,8000); minim = new Minim(this); out = minim.getLineOut(); sine = new SineWave(0, 0, out.sampleRate()); out.addSignal(sine); //declare pin types for(int i =0; i<9;i++){ arduino.pinMode(pin[i], arduino.OUTPUT); } arduino.pinMode(knob, Arduino.INPUT); } void draw() { noStroke(); float values[] = {a,b,c,d,e,f,g,h,i}; int pos = 0; for(int i = 0; i < 9; i = i+2){ fill(255); rect((95 * pos) + 5, 5, 90, 290); if(values[i] == 0.0f){ fill(255); ellipse((95* pos) + 50, 260, 50, 50); arduino.digitalWrite(pin[i], arduino.LOW); if (pressed[i] == true) { soundOff(i); } } else{ fill(0,255,0); ellipse((95* pos) + 50, 260, 50, 50); arduino.digitalWrite(pin[i], arduino.HIGH); if (pressed[i] == false) { soundOn(i); } } pos++; } pos = 0; for(int i = 1; i <9; i = i+2){ fill(50); rect((95 * pos) + 85, 5, 25, 200); if(values[i] == 0.0f){ ellipse((95 * pos) + 97, 190, 20, 20); arduino.digitalWrite(pin[i], arduino.LOW); if (pressed[i] == true) { soundOff(i); } } else{ fill(0,255,0); ellipse((95 * pos) + 97, 190, 20, 20); arduino.digitalWrite(pin[i], arduino.HIGH); if (pressed[i] == false) { soundOn(i); } } pos++; } readSound(); // read the amplitude value from knob drawSound(); // draw the sound wave } void soundOff(int x){ float freq = sine.frequency() - tone[x]; sine.setFreq(freq); pressed[x] = false; delay(50); } void soundOn(int x){ float freq = sine.frequency() + tone[x]; sine.setFreq(freq); pressed[x] = true; delay(50); } void readSound(){ float val = arduino.analogRead(knob); float amp = map(val, 0, 1023, 0, 1); print("The function's amplitude: "); println(amp); println(""); println(""); sine.setAmp(amp); } void drawSound(){ fill(255,125,0); rect(5,305,470,110); stroke(0); for(int i = 0; i < out.bufferSize() - 1; i++) { float x1 = map(i, 0, out.bufferSize(), 0, width-5); float x2 = map(i+1, 0, out.bufferSize(), 0, width-5); line(x1, 360 + out.left.get(i)*50, x2, 360 + out.left.get(i+1)*50); } } void stop() { out.close(); minim.stop(); super.stop(); } void oscEvent(OscMessage theOscMessage){ String addr = theOscMessage.addrPattern(); float val = theOscMessage.get(0).floatValue(); if(addr.equals("/1/1")){ a = val;} if(addr.equals("/1/2")){ b = val;} if(addr.equals("/1/3")){ c = val;} if(addr.equals("/1/4")){ d = val;} if(addr.equals("/1/5")){ e = val;} if(addr.equals("/1/6")){ f = val;} if(addr.equals("/1/7")){ g = val;} if(addr.equals("/1/8")){ h = val;} if(addr.equals("/1/9")){ i = val;} }