/** Open JavaSound MIDI for input and print incoming noteon's to the console * @author Nick Didkovsky Dec 13, 2018 */ package jmslexamples.simple; import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.IOException; import com.softsynth.jmsl.JMSL; import com.softsynth.jmsl.MusicDevice; import com.softsynth.jmsl.midi.*; public class MidiInputExample implements MidiListener { public void handleNoteOn(double timeStamp, int channel, int pitch, int velocity) { System.out.println("NoteOn: timeStamp=" + timeStamp + ", pitch=" + pitch + ", velocity=" + velocity + ", MIDI channel=" + channel); } public void handleNoteOff(double timeStamp, int channel, int pitch, int velocity) { } public void handlePolyphonicAftertouch(double timeStamp, int channel, int pitch, int pressure) { } public void handleControlChange(double timeStamp, int channel, int id, int value) { } public void handleProgramChange(double timeStamp, int channel, int program) { } public void handleChannelAftertouch(double timeStamp, int channel, int pressure) { } public void handlePitchBend(double timeStamp, int channel, int lsb, int msb) { } public void handleSysEx(double timeStamp, byte[] data) { } public static void main(String args[]) { Frame f = new Frame("Listen to MIDI note on's"); WindowAdapter windowAdapter = new WindowAdapter() { public void windowClosing(WindowEvent e) { JMSL.closeMusicDevices(); System.exit(0); } }; f.addWindowListener(windowAdapter); f.setSize(320, 200); f.setVisible(true); MusicDevice dev; try { dev = new MidiIOFactory().getMidiIO(MidiIOFactory.MidiIO_JAVASOUND); dev.edit(f); dev.open(); MidiParser parser = new MidiParser(); JMSL.midi.addMidiParser(parser); parser.addMidiListener(new MidiInputExample()); } catch (IOException e1) { e1.printStackTrace(); } } }