CS1 Standard Demo Page

The following text was written to the standard output stream when the Chromesthesia program was executed from Netbeans.

/*
*ThisprograminterpretsmelodiclinesgiveninABCnotationasa
*chromesthetemight.
*
*APitchclasswillbedefined,andwilltakecenterstageinthe
*processing.
*
*InterpretingamelodyinABCnotationwillamounttoflashing
*coloredrectanglesforprescribeddurations,whilesounding
*thepitch!Thecoloroftherectanglewillcorrespondtopitch
*class.Thedurationwillcorrespondtothedurationofthenote.
118
*
*Forthisfirstversionoftheprogram,thedurationwillbeheld
*constantat1beat.
*
*Threesortsofimageswillappearonthescreen,thechromesthetic
*outputbox,atextinputbox,andanerrormessagebox.Simplicity
*ofdesignisrenderedbypermittingonlyoneboxtobeonthescreen
*atatime.
*
*ABCrepresentsnotesinamannerconsistentwiththeseexamples:
*C,D,E,CDEcde
*
*GoogleABCmusicrepresentationifyouwouldliketoknowmoreaboutit.
*/
package chromesthesia0;
import java.util.Scanner;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import painter.SPainter;
/**
*
*@author dmaslows
*/
public class Chromesthesia {
// INFRASTRUCTURE FOR THE PROGRAM -- LAUNCHING A "GRAPHICS" THREAD
public static void main(String[] args) {
SwingUtilities.invokeLater(new ThreadForGUI());
}
private static class ThreadForGUI implements Runnable {
@Override
public void run() {
new Chromesthesia();
}
}
public Chromesthesia() {
interpreter();
}
// FEATURED VARIABLES
private static SPainter miro;
private static Pitch[] pitches;
// THE INTERPRETER
public static void interpreter() {
initialization(); // miro and pitches
while ( true ) {
String input = getInput();
if ( input.equalsIgnoreCase("EXIT") ) {
break;
}else{
try {
playMelody(input,pitches);
}catch(Exception ex){
showErrorMessage(ex.toString());
}
}
}
cleanup(); // miro has to go
}
// METHODS PERTAINING TO THE CHROMESTHETIC PITCHES
private static Pitch[] establishPitches(SPainter painter) {
Pitch[] pitches = new Pitch[21];
Pitch pitchMiddleC = new Pitch("C",painter);
pitches[0] = pitchMiddleC;
Pitch pitchLowC = new Pitch("C,",painter);
pitches[1] = pitchLowC;
Pitch pitchHighC = new Pitch("c",painter);
pitches[2] = pitchHighC;
Pitch pitchMiddleD = new Pitch("D",painter);
pitches[3] = pitchMiddleD;
Pitch pitchLowD = new Pitch("D,",painter);
pitches[4] = pitchLowD;
Pitch pitchHighD = new Pitch("d",painter);
pitches[5] = pitchHighD;
Pitch pitchMiddleE = new Pitch("E",painter);
pitches[6] = pitchMiddleE;
Pitch pitchLowE = new Pitch("E,",painter);
pitches[7] = pitchLowE;
Pitch pitchHighE = new Pitch("e",painter);
pitches[8] = pitchHighE;
Pitch pitchMiddleA = new Pitch("A",painter);
pitches[9] = pitchMiddleA;
Pitch pitchLowA = new Pitch("A,",painter);
pitches[10] = pitchLowA;
Pitch pitchHighA = new Pitch("a",painter);
pitches[11] = pitchHighA;
Pitch pitchMiddleB = new Pitch("B",painter);
pitches[12] = pitchMiddleB;
Pitch pitchLowB = new Pitch("B,",painter);
pitches[13] = pitchLowB;
Pitch pitchHighB = new Pitch("b",painter);
pitches[14] = pitchHighB;
Pitch pitchMiddleF = new Pitch("F",painter);
pitches[15] = pitchMiddleF;
Pitch pitchLowF = new Pitch("F,",painter);
pitches[16] = pitchLowF;
Pitch pitchHighF = new Pitch("f",painter);
pitches[17] = pitchHighF;
Pitch pitchMiddleG = new Pitch("G",painter);
pitches[18] = pitchMiddleG;
Pitch pitchLowG = new Pitch("G,",painter);
pitches[19] = pitchLowG;
Pitch pitchHighG = new Pitch("g",painter);
pitches[20] = pitchHighG;
return pitches;
}
private static Pitch find(String token, Pitch[] pitches) throws Exception {
for ( int i = 0; i < pitches.length; i = i
+1){
Pitch pitch = pitches[i];
if ( pitch.abcName().equals(token) ) {
return pitch;
}
}
throw new Exception("### PITCH " + token + " NOT FOUND");
}
private static void display(Pitch[] pitches) {
for ( int i = 0; i < pitches.length; i = i
+1){
System.out.println(pitches[i].toString());
}
}
private static void playMelody(String input, Pitch[] pitches) throws Exception {
Scanner scanner = new Scanner(input);
while ( scanner.hasNext() ) {
String token = scanner.next();
String pitchName;
String duration = "";
if (token.indexOf(",") < 0 ){
    pitchName = token.substring(0,1);
    duration = token.substring(1);
} else {
     pitchName = token.substring(0,2);
    duration = token.substring(2);
}
if (duration.length() == 0) {duration = "1";}
Pitch pitch = find(pitchName,pitches);
pitch.play(duration);
}
}
// INITIALIZATION, CLEANUP, GETTING INPUT, ERROR MESSAGING
static private void showErrorMessage(String message) {
miro.setVisible(false);
JOptionPane.showMessageDialog(null, message);
}
private static void initialization() {
// ESTABLISH THE PAINTER AND GIVE IT A SUBSTANTIAL BRUSH WIDTH
miro = new SPainter("Chromesthesia",500,500);
miro.setVisible(true);
miro.setBrushWidth(25);
// ESTABLISH THE CHROMESTITIC PITCH CLASS OBJECTS
pitches = establishPitches(miro);
display(pitches);
}
private static String getInput() {
miro.setVisible(true);
String label = "Please enter a melody in ABC notation, or EXIT ...     ";
String input = JOptionPane.showInputDialog(null,label);
miro.setVisible(true);
if ( input == null ) { input = ""; }
return input;
}
static private void cleanup() {
System.exit(0);
}
}