I'm running some MIDI code from a tutorial, but the program never terminates. It seems the MIDI sequencer never stops running, even though it reports that the length is 0.625s.
Do I need to do something else to make the sequencer stop?
import javax.sound.midi.*;
public class MyMidiPlayer {
public static void main(String[] args)
{
MyMidiPlayer player = new MyMidiPlayer();
player.setUpPlayer(4);
}
public void setUpPlayer(int numOfNotes)
{
try {
Sequencer sequencer = MidiSystem.getSequencer();
sequencer.open();
Sequence sequence = new Sequence(Sequence.PPQ, 4);
Track track = sequence.createTrack();
for (int i = 0; i < numOfNotes; i++)
{
track.add(makeEvent(144, 1, i+48, 100, i));
track.add(makeEvent(128, 1, i+48, 100, i + 2));
}
sequencer.setSequence(sequence);
sequencer.setTempoInBPM(88);
System.out.println("Playing (length=" + sequencer.getMicrosecondLength()/1000000f + "s)...");
sequencer.start();
while (true) {
// Never returns false, so the program never quits
if (!sequencer.isRunning()) {
sequencer.close();
System.exit(1);
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public MidiEvent makeEvent(int command, int channel, int note, int velocity, int tick)
{
MidiEvent event = null;
try {
ShortMessage a = new ShortMessage();
a.setMessage(command, channel, note, velocity);
event = new MidiEvent(a, tick);
}
catch (Exception ex) {
ex.printStackTrace();
}
return event;
}
}