/** * randomComposer.java * * Implementation of abstract composer class. * Prototype of the equalTemperComposer abstract class * and its implementation in chordComposer. * * This module is part of Karl Brown's MIDI programming project. * */ package MidiApps; import java.io.*; import java.util.*; import javax.sound.midi.*; /** * * @author Karl Brown * @version 1.0 * last updated 2/16/2003 */ class playerGroupx { byte minMidiPitch; byte pitchRangeInOctaves; byte patch; byte maxNumPitches; byte maxNoteLength; byte minVelOn; byte minVelOff; byte maxVelOn; byte maxVelOff; float chanceRest; } public class randomComposer extends composer { player p; int numDivisions; int numGroups; playerGroupx group[] = new playerGroupx[15]; public void setPatch(byte patchIn, int index) { if (index < 15) { group[index].patch = patchIn; } } public byte getPatch(int index) { return group[index].patch; } public void compose() { try { if (s == null) { createSequence(); } String TrackName; Track t; bentPlayer bp; bentPitch bh; equalTemperedBentPitchFactory fact = new equalTemperedBentPitchFactory(); fact.setTracer(tr); fact.setBaseMidiPitch((byte)C_DOWN_4); fact.setDivisions((short)5); fact.setStepPosition((short)0); bentScale bs; equalTemperedScale ets = new equalTemperedScale(); bs = (bentScale)ets; bs.setTracer(tr); Random ran = new Random(); short randomNum; //track 0 - control t = s.createTrack(); controlPlayer cp = new controlPlayer(); cp.setTrack(t); cp.setTrackName("Control track 0"); cp.generalMidiOn(); cp.setTempo((byte)0x02, (byte)0xA1, (byte)0x20); cp.endOfTrack(); //track 1 bp = new bentPlayer(); p = (player)(bp); t = s.createTrack(); p.setTracer(tr); p.setTrack(t); p.setTick(0); p.setTrackName("random track 1"); p.addChannel(0); p.omniOff(); p.polyOff(); setPatch(PIANO,0); p.setPatch(getPatch(0)); p.setVelOn(0x60); p.setVelOff(0x60); p.setDur((long)60); for (short i = 0; i <= 40; i++) { fact.setStepPosition(i); fact.calculateBendAmount(); fact.calculateBendBytes(); bh = fact.getBentPitch(); bs.addBentPitch(bh); } for (int i = 0; i <= 200; i++) { randomNum = (short)(ran.nextInt(41)); bh = (bentPitch)(bs.elementAt(randomNum)); bp.setBentPitch(bh); bp.play(); } p.endOfTrack(); //track 2 bp = new bentPlayer(); p = (player)(bp); t = s.createTrack(); p.setTracer(tr); p.setTrack(t); p.setTick(0); p.setTrackName("random track 2"); p.addChannel(1); p.omniOff(); p.polyOff(); p.setPatch(JAZZ_GUITAR); p.setVelOn(0x60); p.setVelOff(0x60); p.setDur((long)60); for (short i = 0; i <= 40; i++) { fact.setStepPosition(i); fact.calculateBendAmount(); fact.calculateBendBytes(); bh = fact.getBentPitch(); bs.addBentPitch(bh); } for (int i = 0; i <= 200; i++) { randomNum = (short)(ran.nextInt(41)); bh = (bentPitch)(bs.elementAt(randomNum)); bp.setBentPitch(bh); bp.play(); } p.endOfTrack(); //end track 2 } //try catch(Exception e) { tr.trace("randomComposer::compose: Exception caught:"); tr.trace(e.toString()); } //catch } }