/** * randomComposer.java * * Implementation of abstract composer class. * Creates a one-note mid sequence.. * Demonstrates how a composer creates midi events * and how a composer can be configurable, in this * case the midi pitch and patch * * 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 */ public class hardCodedComposer extends composer { int note; int patch; public void setNote(int noteIn) { note = noteIn; } public void setPatch(int patchIn) { patch = patchIn; } public void compose() { try { if (s == null) { createSequence(); } Track t = s.createTrack(); ShortMessage mm = new ShortMessage(); SysexMessage sm = new SysexMessage(); MetaMessage mt = new MetaMessage(); MidiEvent me; String TrackName; // General MIDI sysex; byte[] b = {(byte)0xF0, 0x7E, 0x7F, 0x09, 0x01, (byte)0xF7}; sm = new SysexMessage(); sm.setMessage(b, 6); me = new MidiEvent(sm,(long)0); t.add(me); // set tempo (meta event); mt = new MetaMessage(); byte[] bt = {0x02, (byte)0xA1, 0x20}; mt.setMessage(0x51 ,bt, 3); me = new MidiEvent(mt,(long)0); t.add(me); // set track name (meta event); mt = new MetaMessage(); TrackName = new String("Automatic Pilot track"); mt.setMessage(0x03 ,TrackName.getBytes(), TrackName.length()); me = new MidiEvent(mt,(long)0); t.add(me); // set omni on; mm = new ShortMessage(); mm.setMessage(0xB0, 0x7D,0x00); me = new MidiEvent(mm,(long)0); t.add(me); // set poly on; mm = new ShortMessage(); mm.setMessage(0xB0, 0x7F,0x00); me = new MidiEvent(mm,(long)0); t.add(me); // set instrument channel 1; mm = new ShortMessage(); mm.setMessage(0xC0, (byte)patch, 0x00); me = new MidiEvent(mm,(long)0); t.add(me); // note on; mm = new ShortMessage(); mm.setMessage(0x90,(byte)note,0x60); me = new MidiEvent(mm,(long)0); t.add(me); // note off; mm = new ShortMessage(); mm.setMessage(0x80,(byte)note,0x60); me = new MidiEvent(mm,(long)480); t.add(me); // set end of track (meta event) channel 1; mt = new MetaMessage(); byte[] bet = {}; mt.setMessage(0x2F,bet,0); me = new MidiEvent(mt, (long)480); t.add(me); } //try catch(Exception e) { tr.trace("

Exception caught:
"); tr.trace(e.toString() + "
"); } //catch } }