package jmsltestsuite; import java.io.IOException; import com.softsynth.jmsl.*; import com.softsynth.jmsl.midi.*; /** * Play the hierarchy silently in non-realtime and log to MidiFile. * * Basic idea is: turn midi logging ON, then when collection stops, call JMSL.midi.writeMidiFile(); * * @author Nick Didkovsky, (c) 2017 Nick Didkovsky, nick@didkovsky.com * */ public class MidiLoggerNonRealTimeTest { public static void main(String[] args) { JMSL.clock = new NonRealTimeMusicClock(); JMSL.clock.setAdvance(0.1); JMSL.midi = MidiIO_JavaSound.instance(); JMSL.midi.open(); JMSL.midi.setMidiLogging(true); // LOOK!!!! JMSL.midi.setQuiet(true); Instrument ins1 = new MidiInstrument(1); MusicShape s1 = new MusicShape(ins1.getDimensionNameSpace()); s1.add(1.0, 60, 100, 0.5); s1.add(1.0, 64, 80, 0.5); s1.add(1.0, 67, 100, 0.5); s1.setInstrument(ins1); s1.setRepeats(4); s1.setName("Piano"); ParallelCollection col = new ParallelCollection(); col.add(s1); col.addStopPlayable(new Playable() { public double play(double time, Composable parent) throws InterruptedException { try { JMSL.midi.writeMidiFile("MusicShapeToMIDIFile.MID"); System.exit(0); } catch (IOException e) { e.printStackTrace(); } return time; } }); col.launch(JMSL.now()); } }