package moppydesk; /** * * @author Sammy1Am */ import gnu.io.NoSuchPortException; import gnu.io.PortInUseException; import gnu.io.UnsupportedCommOperationException; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.util.logging.Level; import java.util.logging.Logger; import javax.sound.midi.InvalidMidiDataException; import javax.sound.midi.MidiSystem; import javax.sound.midi.MidiUnavailableException; import javax.sound.midi.Sequence; import javax.sound.midi.Sequencer; public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { MoppyBridge mb = null; MoppyPlayer mp = null; try { mb = new MoppyBridge("COM6"); //Create MoppyBridge on the COM port with the Arduino mp = new MoppyPlayer(mb); mb.resetDrives(); //Load a MIDI file (TODO: Make this an argument, or a GUI window) Sequence sequence = MidiSystem.getSequence(new File("samplesongs/KirbysTheme.mid")); final Sequencer sequencer = MidiSystem.getSequencer(false); //Start a new thread to listen on the command-line to exit the program early new Thread(){ @Override public void run(){ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while (true){ try { if (br.readLine().equalsIgnoreCase("exit")) { sequencer.stop(); sequencer.close(); System.exit(0); } } catch (IOException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } } } }.start(); //Start the sequencer, and set the tempo (not being read from file!) sequencer.open(); sequencer.setSequence(sequence); sequencer.setTempoInBPM(160); System.out.println(sequence.getTracks().length); sequencer.getTransmitter().setReceiver(mp); // Set MoppyPlayer as a receiver. sequencer.start(); //GO! //Wait til the sequence is done... while (sequencer.isRunning()){ Thread.sleep(3000); } //Close the sequencer sequencer.close(); } catch (MidiUnavailableException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } catch (InvalidMidiDataException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } catch (InterruptedException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } catch (NoSuchPortException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } catch (PortInUseException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } catch (UnsupportedCommOperationException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } finally { //Reset everything and close down cleanly (hopefully) if (mb != null){ mb.resetDrives(); mb.close(); } if (mp != null){ mp.close(); } } System.exit(0); } }