/********** * LegoMusic has methods for playing musical tunes * on the RCX Lego brick. * * @author Jim Mahoney * @version 1.0, October 13, 2002 *********/ import josx.platform.rcx.*; class LegoMusic { // Frequencies of notes and sharped notes, in Hz. final public static int C1 = 131; final public static int Cs1 = 139; final public static int D1 = 147; final public static int Ds1 = 156; final public static int E1 = 165; final public static int F1 = 175; final public static int Fs1 = 185; final public static int G1 = 196; final public static int Gs1 = 208; final public static int A1 = 220; final public static int As1 = 233; final public static int B1 = 247; final public static int C2 = 262; final public static int Cs2 = 278; final public static int D2 = 294; final public static int Ds2 = 311; final public static int E2 = 330; final public static int F2 = 349; final public static int Fs2 = 370; final public static int G2 = 392; final public static int Gs2 = 415; final public static int A2 = 440; final public static int As2 = 466; final public static int B2 = 494; final public static int C3 = 523; final public static int Cs3 = 554; final public static int D3 = 587; final public static int Ds3 = 622; final public static int E3 = 659; final public static int F3 = 698; final public static int Fs3 = 740; final public static int G3 = 784; final public static int Gs3 = 831; final public static int A3 = 880; final public static int As3 = 932; final public static int B3 = 989; final public static int C4 = 1046; final public static int Cs4 = 1109; final public static int D4 = 1175; final public static int Ds4 = 1245; final public static int E4 = 1318; final public static int F4 = 1397; final public static int Fs4 = 1480; final public static int G4 = 1568; final public static int Gs4 = 1661; final public static int A4 = 1760; final public static int As4 = 1865; final public static int B4 = 1976; final public static int C5 = 2093; final public static int bugle1 = A2; final public static int bugle2 = D3; final public static int bugle3 = Fs3; final public static int bugle4 = A3; final private static int NOTE_PAUSE = 2; // centi-seconds between notes. private static double beatTime; // time for one beat, in centi-seconds. public static void setTempo(double theTempo){ // tempo in beats per minute beatTime = 100.0 * 60.0/theTempo; } public static void play(int whichNote, int beats){ play(whichNote,(double)beats); } public static void play(int whichNote, double beats){ int timeInCents = (int)(beats*beatTime); Sound.playTone(whichNote, timeInCents - NOTE_PAUSE ); waitCents(timeInCents); } public static void waitCents(int cents){ try { Thread.sleep( (long)(10*cents) ); } catch (InterruptedException e1){ } } public static void playSoundTheCharge(){ setTempo(3*120.0); play(bugle1, 1); play(bugle2, 1); play(bugle3, 1); play(bugle4, 2); play(bugle3, 1); play(bugle4, 3); } public static void playStartTheRace(){ setTempo(3*100.0); play(bugle1, 1); play(bugle2, 1); play(bugle3, 1); play(bugle4, 1); play(bugle4, 1./3.); play(bugle4, 1./3.); play(bugle4, 1./3.); play(bugle3, 1); play(bugle3, 1./3.); play(bugle3, 1./3.); play(bugle3, 1./3.); play(bugle2, 1); play(bugle3, 1); play(bugle2, 1); play(bugle1, 3); } }