/* * Created on Oct 2, 2005 by Nick Didkovsky * */ package jmsltestsuite; import java.io.IOException; import com.softsynth.jmsl.JMSL; import com.softsynth.jmsl.JMSLRandom; import com.softsynth.jmsl.midi.MidiIO; import com.softsynth.jmsl.midi.MidiLogger; /** * You can use MidiLogger to simply write MIDI events into the logger and finally write out a MIDI * file. Do not expect to hear anything in this example. Just writes a few events to the logger and * creates a MIDI file. * * @author Nick Didkovsky, (c) 2005 Nick Didkovsky, didkovn@mail.rockefeller.edu * */ public class TestMidiLoggerNonRealTime { public static void main(String[] args) { MidiLogger logger = new MidiLogger(); double startTime = JMSL.realTime(); logger.setMidiLogging(true); // opening chord with higher pitch sustaining a little longer // log(double timestamp, int status, int data1, int data2) logger.log(startTime, MidiIO.NOTE_ON, 48, 100); logger.log(startTime + 2.0, MidiIO.NOTE_OFF, 48, 0); logger.log(startTime, MidiIO.NOTE_ON, 67, 100); logger.log(startTime + 3.0, MidiIO.NOTE_OFF, 67, 0); // now a fast chromatic run starting 5 sec into the piece startTime += 5; for (int i = 0; i < 25; i++) { logger.log(startTime, MidiIO.NOTE_ON, 60 + i, 100); logger.log(startTime + 0.1, MidiIO.NOTE_OFF, 60 + i, 0); startTime += 0.0625; } // Now for some out-of-order time stamps which MidiLogger will sort before writing file. // Fill a four second span with a uniformly random distribution of note events for (int i = 0; i < 25; i++) { double onTime = startTime + JMSLRandom.choose(4.0); double offTime = onTime + JMSLRandom.choose(2.0); int pitch = JMSLRandom.choose(60, 84); int vel = JMSLRandom.choose(30, 70); logger.log(onTime, MidiIO.NOTE_ON, pitch, vel); logger.log(offTime, MidiIO.NOTE_OFF, pitch, 0); } try { // write out the MIDI file logger.writeMidiFile("JMSL_SONG.MID"); } catch (IOException e) { e.printStackTrace(); } } }