/**
* 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();
}