]> ruin.nu Git - moosique.git/blobdiff - Moosique.java
Updated command-line handling in Moosique,
[moosique.git] / Moosique.java
index c411cd6f38cf779e74dda15f66bb68a6856a77db..c2006faff375c1c093596acc32fe5c2e5f988e2e 100644 (file)
@@ -12,22 +12,29 @@ import java.io.*;
  
 public class Moosique {
 
-       protected static MooGUI gui;
-       protected static Sequence seq;
+       private static MooGUI gui;
+       private static Sequence seq;
+       private static Sequencer sequencer;
+       private static Synthesizer synthesizer;
+       private static MidiChannel[] channels;
+       private static MidiChannel activeChannel;
 
-       protected static Sequencer sequencer;
-       protected static Synthesizer synthesizer;
-       protected static MidiChannel[] channels;
-       protected static MidiChannel activeChannel;
-
-       protected static String filename;
-       protected static long position;
+       private static String filename, fileArg;
+       private static long position;
+       private static boolean makeGUI = true;
 
        /** 
         * Starts the application.
         */
        public static void main (String[] args) {
                System.out.println("\nMoosique version 1.0\n");
+
+               // Parses command-line arguments.
+               for (int i = 0; i < args.length; i++) {
+                       if (args[i].equals("-n")) {makeGUI = false;}
+                       else if (fileArg == null) {fileArg = args[i];}
+               }
+
                // Acquires MIDI devices and connects them.
                System.out.print("Initializing MIDI devices.");
                try {
@@ -47,19 +54,27 @@ public class Moosique {
                System.out.println("Done");
 
                //If a filename is given as the command-line argument, attempts to load a sequence from the file.
-               System.out.print("Loading MIDI sequence...");
-               if (args.length == 1) {
-                       if (!load(args[0])) clearSequence();
+               if (fileArg != null) {
+                       System.out.print("Loading MIDI sequence from " + fileArg + "...");
+                       if (!load(fileArg)) clearSequence();
+                       System.out.println("Done");
                } else {
                        // Otherwise creates a new empty one.
                        clearSequence();
                }
-               System.out.println("Done");
 
-               // Sets up channels and GUI.
-               System.out.print("Creating GUI...");
-               gui = new MooGUI(seq);
-               System.out.println("Done");
+               // If n-flag is set, plays song and then exits. Otherwise builds GUI.
+               if (makeGUI) {
+                       System.out.print("Building GUI...");
+                       gui = new MooGUI(seq);
+                       System.out.println("Done");
+               } else {
+                       System.out.print("Playing...");
+                       play();
+                       while (sequencer.isRunning()) {}
+                       System.out.println("Done");
+                       quit();
+               }
        }
 
        /** 
@@ -98,23 +113,20 @@ public class Moosique {
         * Replaces the current sequence with a new one, holding three empty tracks.
         */
        public static void clearSequence() {
-               // Creates sequence.
+               // Creates a new sequence and sends it to the sequencer.
                try {
                        seq = new Sequence(Sequence.PPQ, 96, 3);
+                       sequencer.setSequence(seq);
                } catch (InvalidMidiDataException e) {}
                // Sends sequence to GUI.
                if (gui != null) gui.setSequence(seq);
-       
        }
 
        /** 
         * Starts playback of the current sequence.
         */
        public static void play() {
-               try {
-                       sequencer.setSequence(seq);
-                       sequencer.setTickPosition(position);
-               } catch (InvalidMidiDataException e) {}
+               sequencer.setTickPosition(position);
                sequencer.start();
        }
 
@@ -188,8 +200,11 @@ public class Moosique {
                        return false;
                }
 
-               // Sends sequence to GUI
+               // Sends sequence to GUI and sequencer
                if (gui != null) gui.setSequence(seq);
+               try {
+                       sequencer.setSequence(seq);
+               } catch (InvalidMidiDataException e) {}
 
                // Searches the sequence for NoteOn events
                Track[] tracks = seq.getTracks();