I've been learning about midi and trying my hand at creating something, but I'm stumped by the Sequencer-Synthesizer connection. I can't figure out why this doesn't generate sound when I use the sequencer. When I send messages directly to the Synthesizer's receiver, it works, but no such luck when I try to set the Sequencer's sequence and start it.
Probably nothing incredibly big, but I don't know much about midi just yet, so I'm stuck. Thanks in advance for any and all help!Code:import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.MidiEvent;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiUnavailableException;
import javax.sound.midi.Receiver;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import javax.sound.midi.ShortMessage;
import javax.sound.midi.Synthesizer;
import javax.sound.midi.Track;
import javax.sound.midi.Transmitter;
class MusiCube {
/**
* @param args
* @throws MidiUnavailableException
* @throws InterruptedException
* @throws InvalidMidiDataException
*/
public static void main(String[] args) throws MidiUnavailableException, InterruptedException, InvalidMidiDataException {
Sequence seq = new Sequence(Sequence.PPQ, 8);
Track track = seq.createTrack ();
ShortMessage msg1 = new ShortMessage ();
msg1.setMessage (ShortMessage.PROGRAM_CHANGE, 1, 0, 0/*ignored*/);
track.add (new MidiEvent (msg1, -1));
ShortMessage msg2 = new ShortMessage();
msg2.setMessage (ShortMessage.NOTE_ON, 1, 60, 90);
track.add (new MidiEvent(msg2,2));
Sequencer sequencer = MidiSystem.getSequencer ();
sequencer.open ();
Synthesizer synth = MidiSystem.getSynthesizer ();
synth.open ();
Transmitter seqTrans = sequencer.getTransmitter ();
Receiver rec = synth.getReceiver ();
seqTrans.setReceiver (rec);
sequencer.setSequence (seq);
sequencer.start ();
//if I take out the Sequencer and use these, it works. why?
//rec.send (msg1, 1);
//rec.send (msg2, 2);
Thread.sleep(3000);
sequencer.close();
synth.close ();
}
}

