Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 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;}
- }
Advertisement
Add Comment
Please, Sign In to add comment