import ddf.minim.signals.*; import ddf.minim.*; import ddf.minim.analysis.*; import ddf.minim.effects.*; import ddf.minim.ugens.*; Minim minim; AudioOutput out; float waveSize = 100; void setup() { size( 800, 400 ); colorMode(HSB, 360, 1, 1); minim = new Minim(this); out = minim.getLineOut(); // pause time when adding a bunch of notes at once out.pauseNotes(); // we set the tempo of the output so that the time and duration arguments // of playNote now are expressed in beats out.setTempo( 120.f ); // here's our sick beat float kickDur = 0.8; float snareDur = 0.2; for(int i = 0; i < 16; i++) { // we set the note offset so that each loop we are queuing up a new measure out.setNoteOffset( i * 4 ); out.playNote( 0, kickDur, new KickInstrument( ) ); out.playNote( 1, snareDur, new SnareInstrument( ) ); out.playNote( 1.5, kickDur, new KickInstrument( ) ); out.playNote( 2.5, kickDur, new KickInstrument( ) ); out.playNote( 3, snareDur, new SnareInstrument( ) ); out.playNote( 3.5, snareDur, new SnareInstrument( ) ); // every other measure give a little kick at the end if ( i % 2 == 1 ) { out.playNote( 3.75, 0.1, new KickInstrument( ) ); } if ( i > 7 ) { Shake( 1, -0.5 ); Shake(1.25, 0.5); Shake(1.5, -0.5); Shake(1.75, 0.5); Shake(2.5, -0.5); Shake(2.75, 0.5); Shake(3.25, -0.5); Shake(3.5, 0.5); } } out.playNote( 4, kickDur, new KickInstrument() ); out.setNoteOffset( 4 * 4 ); Blip( 0, "E4" ); Blip( 0.25, "G4" ); Blip( 0.5, "G4" ); Bass( 0.5, "C2" ); Blip( 0.75, "E4" ); Blip( 1, "G4" ); Bass( 1, "C2" ); Blip( 1.5, "E4" ); Bass( 1.25, "C2" ); Blip( 1.75, "G4" ); Blip( 2, "A4" ); Bass( 2, "C2" ); Blip( 2.5, "G4" ); Bass(2.75, "C2" ); Blip( 3, "E4" ); Blip( 3.25, "D4" ); Bass(3.25, "A1" ); Blip( 3.5, "C4" ); Bass(3.5, "A1" ); Bass(3.75, "A1" ); Blip( 4, "A3" ); Blip( 4.25, "C4" ); Blip( 4.5, "C4" ); Bass( 4.5, "C2" ); Blip( 4.75, "A4" ); Blip( 5, "C4" ); Bass( 5, "C2" ); Blip( 5.25, "A3" ); Bass( 5.5, "C2" ); Blip( 5.5, "D4" ); Blip( 5.75, "E4" ); Bass(6, "C2" ); Bass(6.75, "G2" ); Blip( 7, "C7", 1 ); Blip( 7.16, "A6", 0.5 ); Blip( 7.33, "G6", 0.25 ); Blip( 7.5, "E6", 0 ); Bass(7.5, "G2" ); Blip( 7.66, "D6", -0.5 ); Blip( 7.83, "C6", -1 ); out.setNoteOffset( 4 * 6 ); Blip( 0, "E4" ); Blip( 0.25, "G4" ); Blip( 0.5, "G4" ); Bass( 0.5, "C2" ); Blip( 0.75, "E4" ); Blip( 1, "G4" ); Bass( 1, "C2" ); Blip( 1.5, "E4" ); Bass( 1.25, "C2" ); Blip( 1.75, "G4" ); Blip( 2, "A4" ); Bass( 2, "C2" ); Blip( 2.5, "G4" ); Bass(2.75, "C2" ); Blip( 3, "E4" ); Blip( 3.25, "D4" ); Bass(3.25, "A1" ); Blip( 3.5, "C4" ); Bass(3.5, "A1" ); Bass(3.75, "A1" ); Blip( 4, "E4" ); Blip( 4.25, "D4" ); Blip( 4.5, "D4" ); Bass(4.5, "G2" ); Blip( 4.75, "C4" ); Blip( 5, "D4" ); Bass(5, "G2" ); Blip( 5.25, "D4" ); Bass(5.25, "G2" ); Blip( 5.5, "E4" ); Blip( 5.75, "D4" ); Bass(6, "G2" ); Bass(6.75, "G1" ); Blip( 7, "C6", -1 ); Blip( 7.16, "D6", -0.5 ); Blip( 7.33, "E6", -0.25 ); Blip( 7.5, "G6", 0 ); Bass(7.5, "G1" ); Blip( 7.66, "A6", 0.5 ); Blip( 7.83, "C7", 1 ); out.setNoteOffset( 4 * 8 ); Blip( 0, "E4" ); Whine( 0, 1.5, "C6" ); Blip( 0.25, "G4" ); Blip( 0.5, "G4" ); Bass( 0.5, "C2" ); Blip( 0.75, "E4" ); Blip( 1, "G4" ); Bass( 1, "C2" ); Blip( 1.5, "E4" ); Bass( 1.25, "C2" ); Whine(1.5, 1.5, "B5" ); Blip( 1.75, "G4" ); Blip( 2, "A4" ); Bass( 2, "C2" ); Blip( 2.5, "G4" ); Bass(2.75, "C2" ); Blip( 3, "E4" ); Whine(3, 1, "G5" ); Blip( 3.25, "D4" ); Bass(3.25, "A1" ); Blip( 3.5, "C4" ); Bass(3.5, "A1" ); Bass(3.75, "A1" ); Blip( 4, "A3" ); Whine(4, 1.5, "A5" ); Blip( 4.25, "C4" ); Blip( 4.5, "C4" ); Bass( 4.5, "C2" ); Blip( 4.75, "A4" ); Blip( 5, "C4" ); Bass( 5, "C2" ); Blip( 5.25, "A3" ); Bass( 5.5, "C2" ); Blip( 5.5, "D4" ); Whine(5.5, 1.5, "G5" ); Blip( 5.75, "E4" ); Bass(6, "C2" ); Bass(6.75, "G2" ); Blip( 7, "C7", 1 ); Whine(7, 1, "C4"); Blip( 7.16, "A6", 0.5 ); Blip( 7.33, "G6", 0.25 ); Blip( 7.5, "E6", 0 ); Bass(7.5, "G2" ); Blip( 7.66, "D6", -0.5 ); Blip( 7.83, "C6", -1 ); out.setNoteOffset( 4 * 10 ); Blip( 0, "E4" ); Whine( 0, 1.5, "C6" ); Blip( 0.25, "G4" ); Blip( 0.5, "G4" ); Bass( 0.5, "C2" ); Blip( 0.75, "E4" ); Blip( 1, "G4" ); Bass( 1, "C2" ); Blip( 1.5, "E4" ); Bass( 1.25, "C2" ); Whine(1.5, 1.5, "B5" ); Blip( 1.75, "G4" ); Blip( 2, "A4" ); Bass( 2, "C2" ); Blip( 2.5, "G4" ); Bass(2.75, "C2" ); Blip( 3, "E4" ); Whine(3, 1.5, "G5" ); Blip( 3.25, "D4" ); Bass(3.25, "A1" ); Blip( 3.5, "C4" ); Bass(3.5, "A1" ); Bass(3.75, "A1" ); Blip( 4, "E4" ); Blip( 4.25, "D4" ); Blip( 4.5, "D4" ); Bass(4.5, "G2" ); Whine(4.5, 1.5, "E6" ); Blip( 4.75, "C4" ); Blip( 5, "D4" ); Bass(5, "G2" ); Blip( 5.25, "D4" ); Bass(5.25, "G2" ); Blip( 5.5, "E4" ); Blip( 5.75, "D4" ); Bass(6, "G2" ); Whine(6, 1.5, "D6" ); Bass(6.75, "G1" ); Blip( 7, "C6", -1 ); Blip( 7.16, "D6", -0.5 ); Blip( 7.33, "E6", -0.25 ); Blip( 7.5, "G6", 0 ); Bass(7.5, "G1" ); Whine(7.5, 2, "C6" ); Blip( 7.66, "A6", 0.5 ); Blip( 7.83, "C7", 1 ); out.setNoteOffset( 4 * 12 ); Bass( 0.5, "C2" ); Bass( 1, "C2" ); Bass( 1.25, "C2" ); Whine(1.5, 1.5, "B5" ); Bass( 2, "C2" ); Bass(2.75, "C2" ); Whine(3, 1, "G5" ); Bass(3.25, "A1" ); Bass(3.5, "A1" ); Bass(3.75, "A1" ); Whine(4, 1.5, "A5" ); Bass( 4.5, "C2" ); Bass( 5, "C2" ); Bass( 5.5, "C2" ); Whine(5.5, 1.5, "G5" ); Bass(6, "C2" ); Bass(6.75, "G2" ); Blip( 7, "C7", 1 ); Whine(7, 1, "C4"); Blip( 7.16, "A6", 0.5 ); Blip( 7.33, "G6", 0.25 ); Blip( 7.5, "E6", 0 ); Bass(7.5, "G2" ); Blip( 7.66, "D6", -0.5 ); Blip( 7.83, "C6", -1 ); out.setNoteOffset( 4 * 14 ); Whine( 0, 1.5, "C6" ); Bass( 0.5, "C2" ); Bass( 1, "C2" ); Bass( 1.25, "C2" ); Whine(1.5, 1.5, "B5" ); Bass( 2, "C2" ); Bass(2.75, "C2" ); Whine(3, 1.5, "G5" ); Bass(3.25, "A1" ); Bass(3.5, "A1" ); Bass(3.75, "A1" ); Bass(4.5, "G2" ); Whine(4.5, 1.5, "E6" ); Bass(5, "G2" ); Bass(5.25, "G2" ); Bass(6, "G2" ); Whine(6, 1.5, "D6" ); Bass(6.75, "G1" ); Blip( 7, "C6", -1 ); Blip( 7.16, "D6", -0.5 ); Blip( 7.33, "E6", -0.25 ); Blip( 7.5, "G6", 0 ); Bass(7.5, "G1" ); Whine(7.5, 8.5, "C6" ); Blip( 7.66, "A6", 0.5 ); Blip( 7.83, "C7", 1 ); // activate the line and unpause the output out.resumeNotes(); } float hueForSample( float sample ) { return map( abs(sample), 0, 1, 120, 450 ); } void Blip( float time, String note ) { Blip( time, note, 0 ); } void Blip( float time, String note, float pan ) { out.playNote( time, 0.1, new BlipInstrument( Frequency.ofPitch(note).asHz(), pan ) ); } void Bass( float time, String note ) { out.playNote( time, 0.5, new BassInstrument( Frequency.ofPitch(note).asHz() ) ); } void Whine( float time, float duration, String note ) { out.playNote( time, duration, new WhineInstrument( Frequency.ofPitch(note).asHz() ) ); } void Shake( float time, float pan ) { out.playNote( time, 0.1, new SnareInstrument( 2200.f, pan ) ); } // draw is run many times void draw() { // erase the window to black background( 0 ); // draw using a white stroke stroke( 255 ); // draw the waveforms for( int i = 0; i < out.bufferSize() - 1; i++ ) { // find the x position of each buffer value float x1 = map( i, 0, out.bufferSize(), 0, width ); float x2 = map( i+1, 0, out.bufferSize(), 0, width ); // draw a line from one buffer position to the next for both channels stroke( hueForSample(out.left.get(i)), 1, 1 ); line( x1, height/2 - waveSize + out.left.get(i)*waveSize, x2, height/2 - waveSize + out.left.get(i+1)*waveSize); stroke( hueForSample(out.right.get(i)), 1, 1 ); line( x1, height/2 + waveSize + out.right.get(i)*waveSize, x2, height/2 + waveSize + out.right.get(i+1)*waveSize); } } // stop is run when the user presses stop void stop() { // close the AudioOutput out.close(); // stop the minim object minim.stop(); super.stop(); }