amelie
YaBB Newbies
Offline
Posts: 5
control frequency with minim
Jul 5th , 2009, 9:02am
Hej, I started programming couple weeks ago and getting really into it. But for a few days now I ve been trying to figure out a way to control the frequency of a soundfile by analog input of pressure sensors. I'm using arduino and processing. (My soundfile is not a regular sine/saw wave, but an existing peace of sound which Iwant to loop the whole time) I'm building on this example code on minim, but simply exchanging the sine wave with a Snippet just won't work... Probably its a typical beginner's question... but if anyone would care to answer I'd be soooo happy to hear from anyone! Amelie import ddf.minim.*; import ddf.minim.signals.*; Minim minim; AudioOutput out; SineWave sine; void setup() { size(512, 200, P3D); minim = new Minim(this); // get a line out from Minim, default bufferSize is 1024, default sample rate is 44100, bit depth is 16 out = minim.getLineOut(Minim.STEREO); // create a sine wave Oscillator, set to 440 Hz, at 0.5 amplitude, sample rate from line out sine = new SineWave(440, 0.5, out.sampleRate()); // set the portamento speed on the oscillator to 200 milliseconds sine.portamento(200); // add the oscillator to the line out out.addSignal(sine); } void draw() { background(0); stroke(255); // draw the waveforms for(int i = 0; i < out.bufferSize() - 1; i++) { float x1 = map(i, 0, out.bufferSize(), 0, width); float x2 = map(i+1, 0, out.bufferSize(), 0, width); line(x1, 50 + out.left.get(i)*50, x2, 50 + out.left.get(i+1)*50); line(x1, 150 + out.right.get(i)*50, x2, 150 + out.right.get(i+1)*50); } } void mouseMoved() { // with portamento on the frequency will change smoothly float freq = map(mouseY, 0, height, 1500, 60); sine.setFreq(freq); // pan always changes smoothly to avoid crackles getting into the signal // note that we could call setPan on out, instead of on sine // this would sound the same, but the waveforms in out would not reflect the panning float pan = map(mouseX, 0, width, -1, 1); sine.setPan(pan); } void stop() { out.close(); minim.stop(); super.stop(); }