X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=Moosique.java;h=c2006faff375c1c093596acc32fe5c2e5f988e2e;hb=99b83588ad553537f891efaf5fbe95e7b9e5442b;hp=c411cd6f38cf779e74dda15f66bb68a6856a77db;hpb=5c89e592698dba86380de9bebc21edeaf03ebbd2;p=moosique.git diff --git a/Moosique.java b/Moosique.java index c411cd6..c2006fa 100644 --- a/Moosique.java +++ b/Moosique.java @@ -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();