/** * This sketch demonstrates how to use the BandPass effect.
* Move the mouse left and right to change the frequency of the pass band.
* Move the mouse up and down to change the band width of the pass band. */ import ddf.minim.*; import ddf.minim.effects.*; import ddf.minim.signals.*; import processing.serial.*; import processing.net.*; import fullscreen.*; FullScreen fs; AudioOutput out; Server server; Minim minim; AudioPlayer groove; BandPass bpf; PFont f; int lf = 10; String myString = null; Serial myPort; float num; //values from arduino across the network String clientID = ""; String serverSerial = null; float num2; void setup() { size(1024, 768, P3D); fs = new FullScreen(this); fs.enter(); fs.setShortcutsEnabled(true); // server info server = new Server(this, 5204); f = createFont("Arial",12,true); minim = new Minim(this); out = minim.getLineOut(Minim.MONO); groove = minim.loadFile("bass01.mp3"); groove.loop(); // make a band pass filter with a center frequency of 440 Hz and a bandwidth of 20 Hz // the third argument is the sample rate of the audio that will be filtered // it is required to correctly compute values used by the filter bpf = new BandPass(440, 20, groove.sampleRate()); groove.addEffect(bpf); println(Serial.list()); myPort = new Serial(this, Serial.list()[0], 9600); myPort.clear(); } void draw() { background(0); textFont(f); textAlign(LEFT); fill(0, 102, 153); stroke(255); // draw the waveforms // the values returned by left.get() and right.get() will be between -1 and 1, // so we need to scale them up to see the waveform for(int i = 0; i < groove.right.size()-1; i++) { float x1 = map(i, 0, groove.bufferSize(), 0, width); float x2 = map(i+1, 0, groove.bufferSize(), 0, width); line(x1, height/4 - groove.left.get(i)*50, x2, height/4 - groove.left.get(i+1)*50); line(x1, 3*height/4 - groove.right.get(i)*50, x2, 3*height/4 - groove.right.get(i+1)*50); } // draw a rectangle to represent the pass band. num refers to local port communication noStroke(); fill(255, 0, 0, 60); rect(num - bpf.getBandWidth()/20, 0, bpf.getBandWidth()/10, height); //Port talk while (myPort.available() > 0) { myString = myPort.readStringUntil(lf); if (myString != null) { print(myString); // Prints String num=float(myString); // Converts and prints float println(num); } } // map the mouse position to the range [100, 10000], an arbitrary range of passBand frequencies float passBand = map(num, 0, width, 70, 2000); bpf.setFreq(passBand); float bandWidth = map(num2, 0, height, 20, 2000); bpf.setBandWidth(bandWidth); // prints the new values of the coefficients in the console bpf.printCoeff(); // server talk Client client = server.available(); if(client!= null) { serverSerial = client.readString(); print(serverSerial); num2 = float(serverSerial); if (Float.isNaN(num2)) { num2 = 2; } if (num2 <= 1) { num2 = 12; } if (num2 >= 200) { num2 = 95; } text(clientID, 20, 20); } } void serverEvent(Server server, Client client) { clientID = "A new client has connected: " + client.ip(); println(clientID); // Reset newMessageColor to black } void stop() { // always close Minim audio classes when you finish with them groove.close(); // always stop Minim before exiting minim.stop(); super.stop(); }