/** * A realization of Mozart's Dice Game * @author Andrew Troedson */ import jm.JMC; import jm.music.data.*; import jm.music.tools.*; import jm.midi.*; import jm.util.*; public final class MozartDiceGame implements JMC { public static void main(String[] args){ MozartPhraseList MPL = new MozartPhraseList(); //the class in which all the phrases are stored //Create the data objects we want to use Score score = new Score("MozartDiceGame"); score.setTempo(120.0); //Parts can have a name, channel, and instrument. Part piano = new Part("Piano", PIANO); for (int j=0; j<4; j++){ //repeates the full waltz twice (ie form ABAB) for (int i=0; i<8; i++){ //create the first part of the waltz int randNum = (int)rollDice(2); //roll the dice System.out.println("roll " + (i+1) + ": " + randNum); CPhrase nextBar = new CPhrase(0.0); nextBar = MPL.barArray[i][randNum-2].copy(); //get the appropriate phrase nextBar.setStartTime((float)((i*3)+(j*24))); //set the phrases start time piano.addCPhrase(nextBar); //add it to the main part } j++; //required to set the correct start times in the second section of the waltz for (int i=0; i<8; i++){ //create the second part of the waltz int randNum = (int)rollDice(2); System.out.println("roll " + (i+9) + ": " + randNum); CPhrase nextBar = new CPhrase(0.0); nextBar = MPL.barArray2[i][randNum-2].copy();//get the phrase from the second phrase table nextBar.setStartTime((float)((i*3)+(j*24))); piano.addCPhrase(nextBar); } } //add the main piano part (instrument) to the score score.addPart(piano); Mod.transpose(score, 12); // create a MIDI file of the score Write.midi(score, "mozart.mid"); } //method which automates the rolling of a specified number of die static int rollDice(int dieNum){ int roll = 0; for (int i=0; i<dieNum; i++){ roll += ((int)(java.lang.Math.random()*6)) + 1; } return roll; } }