public class KeyboardOne { BeeThree keyboard[3]; // three keyboard UGens to make chords //connects the keyboards to the dac keyboard[0] => Echo ech => ResonZ r => dac; keyboard[1] => ech => r => dac; keyboard[2] => ech => r => dac; ech.delay(0.2 :: second); ech.mix(0.02); r.gain(0.2); BPM t; t.quarterNote => dur q; t.eighthNote => dur e; t.sixteenthNote => dur s; // key of the song, with 0 being key of C and 11 being key of B t.randomKeyNum => int key; // int for which octave above/below midde C 0 => int octave; (octave*12) +=> key; fun void playVerse() { while(true) { playChord("VI", q); playChord("VI", q); playChord("VI", e); playChord("VI", q); playChord("VI", e); playChord("V", q); playChord("V", q); playChord("V", e); playChord("V", q); playChord("V", e); playChord("IV", q); playChord("IV", q); playChord("IV", e); playChord("IV", q); playChord("IV", e); playChord("V", q); playChord("V", q); playChord("V", e); playChord("V", q); playChord("V", e); } } fun void playChorus() { while(true) { playChord("I", q*2); playChord("I", q*2); playChord("III", q*2); playChord("III", q*2); playChord("IV", q*2); playChord("IV", q*2); playChord("V", q*2); playChord("V", q*2); } } fun void playChord(string chord, dur chordDur) { if(chord == "I") { setNotes(67, 72, 76); } else if(chord == "II") { setNotes(62, 65, 69); } else if(chord == "III") { setNotes(71, 76, 79); } else if(chord == "IV") { setNotes(65, 69, 72); } else if(chord == "V") { setNotes(67, 71, 74); } else if(chord == "VI") { setNotes(69, 72, 76); } else if(chord == "VII") { setNotes(71, 74, 77); } keyboard[0].noteOn(1); keyboard[1].noteOn(1); keyboard[2].noteOn(1); 0.9*chordDur => now; keyboard[0].noteOff(1); keyboard[1].noteOff(1); keyboard[2].noteOff(1); 0.1*chordDur => now; } // sets the notes to the keyboard fun void setNotes(int first, int third, int fifth) { keyboard[0].freq(Std.mtof(first + key)); keyboard[1].freq(Std.mtof(third + key)); keyboard[2].freq(Std.mtof(fifth + key)); } } KeyboardOne k; spork ~ k.playVerse(); while(1) { 1::second => now; }