import ddf.minim.signals.*; import ddf.minim.*; import ddf.minim.analysis.*; import ddf.minim.effects.*; int [] ebscale = new int[10]; AudioSnippet progression; final int D = 62; final int Eb = 63; final int F = 65; final int Gb = 66; final int Ab = 68; final int Bb = 70; final int B = 71; final int Db = 73; AudioOutput out; SawWave saw; int counter = 0; Minim minim = new Minim(this); void setup() { size(200, 200); //Minim.start(this); out = minim.getLineOut(Minim.STEREO, 512); // create a sine wave Oscillator, set to 440 Hz, at 0.5 amplitude, sample rate 44100 to match the line out saw = new SawWave(midiToFreq(Eb), 0.1, 44100); // set the portamento speed on the oscillator to 200 milliseconds saw.portamento(200); // add the oscillator to the line out out.addSignal(saw); progression = minim.loadSnippet("29833__HerbertBoland__PianoMood28.wav"); ebscale[0] = D; ebscale[1] = Eb; ebscale[2] = F; ebscale[3] = Gb; ebscale[4] = Ab; ebscale[5] = Bb; ebscale[6] = B; ebscale[7] = Db; progression.cue(0); progression.loop(); progression.play(); } void keyPressed() { println("keypressed"); if (key == CODED) { if (keyCode == UP) { println("up"); counter++; if (counter == 16) counter = 0; } if (keyCode == DOWN) { println("down"); counter--; if (counter == -2) counter = 0; } println((counter%8 + 1)); println(ebscale[((counter%7) + 1)]); playNote(ebscale[((counter%7) + 1)] + (12*(counter/7))); } } void draw () { //progression.cue(0); //delay(progression.length()-2500); //progression.play(); } public void playNote (int midiValue){ saw.setFreq(midiToFreq(midiValue)); } public float midiToFreq(float midi) { float freq = (8.1758 * pow(2,midi/12.0)); return freq; } public void stop() { progression.close(); out.close(); super.stop(); }