package testmidishare; import java.awt.*; import java.awt.event.*; import grame.midishare.*; /** Test for MidiShare's Java API. Sends Midi and receives Midi, printing message types of incoming MIDI. * * Uses MidiShare's Java API (no JMSL at all). * Get this working before troubeshooting JMSL + MidiShare * * IMPORTANT: Change inport and output values in main() for your system !!!!!!!!!! * * @author Nick Didkovsky, didkovn@mail.rockefeller.edu 4/15/04 */ public class MidiShareIOTest extends MidiAppl { int inport; int outport; public MidiShareIOTest(int inport, int outport) { this.inport = inport; this.outport = outport; } public void Open(String name) throws MidiException { super.Open(name); configureFilter(); } /* kill active sensing */ void configureFilter() { int i; for (i = 0; i < 256; i++) { //Midi.AcceptPort(filter, i, 1); Midi.AcceptPort(filter, i, 0); Midi.AcceptType(filter, i, 1); } for (i = 0; i < 16; i++) { Midi.AcceptChan(filter, i, 1); } Midi.AcceptPort(filter, inport, 1); Midi.AcceptType(filter, Midi.typeActiveSens, 0); // Midi.AcceptType(filter, Midi.typeSysEx, 0); // System.out.println("MidiShare configureFilter() filter#" + filter); } /** Simply notify that an input event occurred, print what kind */ public void ReceiveAlarm(int ev) { switch (Midi.GetType(ev)) { case Midi.typeNote : System.out.println("MidiShareIOTest, received typeNote"); break; case Midi.typeKeyOn : System.out.println("MidiShareIOTest, received typeKeyOn"); break; case Midi.typeKeyOff : System.out.println("MidiShareIOTest, received typeKeyOff"); break; case Midi.typeKeyPress : System.out.println("MidiShareIOTest, received typeKeyPress"); break; case Midi.typeCtrlChange : System.out.println("MidiShareIOTest, typeCtrlChange"); break; case Midi.typeProgChange : System.out.println("MidiShareIOTest, received typeProgChange"); break; case Midi.typeChanPress : System.out.println("MidiShareIOTest, received typeChanPress"); break; case Midi.typePitchWheel : System.out.println("MidiShareIOTest, received typePitchWheel"); break; case Midi.typeSysEx : System.out.println("MidiShareIOTest, received typeSysEx"); break; default : break; } Midi.FreeEv(ev); } void playNotes() { int channel = 1; int pitch = 60; int vel = 80; for (int interval = 0; interval < 4; interval++) { int event = Midi.NewEv(Midi.typeKeyOn); // ask for a new note event if (event != 0) { // if the allocation was succesfull Midi.SetChan(event, channel); // set the Midi channel Midi.SetPort(event, outport); // set the destination port Midi.SetField(event, 0, pitch + interval); // set the pitch field Midi.SetField(event, 1, vel); // set the velocity field Midi.SendIm(refnum, event); } System.out.println("Sent Midi note on " + (pitch + interval)); try { Thread.sleep(200); } catch (InterruptedException e) { } event = Midi.NewEv(Midi.typeKeyOff); if (event != 0) { Midi.SetChan(event, channel); Midi.SetPort(event, outport); Midi.SetField(event, 0, pitch + interval); Midi.SetField(event, 1, vel); Midi.SendIm(refnum, event); } System.out.println("Sent Midi note off " + (pitch + interval)); try { Thread.sleep(200); } catch (InterruptedException e) { } } } public static void main(String args[]) { // set these how you want them int inport = 0; int outport = 1; int installed = 0; try { installed = Midi.Share(); } catch (UnsatisfiedLinkError e) { e.printStackTrace(); System.out.println( "\nMidiShare Java API probably not installed properly, grame.midishare.Midi.Share() barfed.\n" + e); System.exit(0); } System.out.println("installed = " + installed); int version = Midi.GetVersion(); System.out.println("version = " + version); int numberOfAppl = Midi.CountAppls(); System.out.println("numberOfAppl = " + numberOfAppl); final MidiShareIOTest midiHandler = new MidiShareIOTest(inport, outport); Frame f = new Frame("Watch console for incoming midi messages. Close this frame to quit"); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("Closing Midi, byebye"); midiHandler.Close(); System.exit(0); } }); Button playButton = new Button("play notes"); f.add(playButton); playButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { midiHandler.playNotes(); } }); f.setSize(600, 100); f.setVisible(true); try { midiHandler.Open("MidiShareIOTest"); Midi.Connect(midiHandler.refnum, 0, 1); Midi.Connect(0, midiHandler.refnum, 1); // Check output connection int connected = Midi.IsConnected(midiHandler.refnum, 0); System.out.println("Connected for input? " + connected); // Check input connection connected = Midi.IsConnected(0, midiHandler.refnum); System.out.println("Connected for output? " + connected); StringBuffer text = new StringBuffer(); short i; int ref, n = Midi.CountAppls(); text.append("List of MidiShare client applications\n"); text.append("-------------------------------------\n"); for (i = 1; i <= n; i++) { ref = Midi.GetIndAppl(i); // get the refnum from the order number text.append(String.valueOf(i)); text.append(" : reference number "); text.append(String.valueOf(ref)); text.append(" name : "); text.append(Midi.GetName(ref)); text.append("\n"); } text.append("-------------------------------------"); System.out.println(text.toString()); } catch (MidiException e1) { System.out.println("Error opening MidiShareIOTest: " + e1); e1.printStackTrace(); } } }