]> ruin.nu Git - moosique.git/blobdiff - Moosique.java
Should be JDialog not JFrame
[moosique.git] / Moosique.java
index 792a7f2ba5d564e47700542e2d082c808178f9a0..32c4d375d7e43b0f7b502d0b6b25730f8b0e6771 100644 (file)
@@ -2,67 +2,64 @@ import javax.sound.midi.*;
 import javax.swing.*;
 import java.io.*;
 
-/* UPDATES
-       Killed superfluous exportMIDI method.
-       Added public static void quit()
-       Removed Sequence seq property.
-       Changed forward(int measures) and rewind(int measures) to forward(long ticks) and rewind(long ticks).
-       Added public static long getPosition()
-       Added public static void setPosition(long ticks)
-       Added public static void resume()
-*/
-
 /*
  * Moosique - The MIDI Tracker
  * 
- * Main class that handles initiation, IO and sound FX.
+ * Main class that handles initiation, IO and sound.
  * 
- * @author  Andersson, Andreen, Lanneskog, Pehrson
- * @version 1
+ * @author  Einar Pehrson
  */
  
 public class Moosique {
 
-       private static MooGUI gui;
-       private static Sequence seq;
+       protected static MooGUI gui;
+       protected static Sequence seq;
 
-       private static Sequencer sequencer = null;
-       private static Synthesizer synthesizer = null;
-       private static MidiChannel[] channels;
+       protected static Sequencer sequencer = null;
+       protected static Synthesizer synthesizer = null;
+       protected static MidiChannel[] channels;
+       protected static MidiChannel activeChannel;
 
-       private static String filename;
-       private static long position;
+       protected static String filename;
+       protected static long position;
 
        /* 
         * Starts the application.
         */
        public static void main (String[] args) {
-               System.out.println("Moosique version 1.0");
+               System.out.println("\nMoosique version 1.0\n");
                // Acquires MIDI devices and connects them.
+               System.out.print("Initializing MIDI devices.");
                try {
                        sequencer = MidiSystem.getSequencer();
+                       System.out.print(".");
                        sequencer.open();
                        synthesizer = MidiSystem.getSynthesizer();
+                       System.out.print(".");
                        synthesizer.open();
                        sequencer.getTransmitter().setReceiver(synthesizer.getReceiver());
+                       channels = synthesizer.getChannels();
+                       setActiveChannel(0);
                } catch (MidiUnavailableException e) {
-                       System.out.println("Unable to initialize MIDI devices.");
+                       System.out.println("Failed, quitting.");
                        quit();
                }
+               System.out.println("Done");
 
                //If a filename is given as the command-line argument, attempts to load a sequence from the file.
-               try {
-                       if (args.length == 1) {
-                               if (!load(args[0])) seq = new Sequence(Sequence.PPQ, 96);
-                       } else {
-                               // Otherwise creates a new empty one.
-                               seq = new Sequence(Sequence.PPQ, 96);
-                       }
-               } catch (InvalidMidiDataException e) {}
+               System.out.print("Loading MIDI sequence...");
+               if (args.length == 1) {
+                       if (!load(args[0])) clearSequence();
+               } else {
+                       // Otherwise creates a new empty one.
+                       clearSequence();
+               }
+               System.out.println("Done");
 
                // Sets up channels and GUI.
-               channels = synthesizer.getChannels();
-               gui = new MooGUI();
+               System.out.print("Creating GUI...");
+               gui = new MooGUI(seq);
+               System.out.println("Done");
        }
 
        /* 
@@ -73,14 +70,51 @@ public class Moosique {
                return seq;
        }
 
+       /* 
+        * Returns a pointer to the MidiChannels of the selected synthesizer.
+        * @return the available MidiChannels
+        */
+       public static MidiChannel[] getChannels() {
+               return channels;
+       }
+
+       /* 
+        * Returns a pointer to the currently active MidiChannel.
+        * @return the active MidiChannel
+        */
+       public static MidiChannel getActiveChannel() {
+               return activeChannel;
+       }
+
+       /* 
+        * Sets the currently active MidiChannel.
+        * @param channel       the number of the MidiChannel to activate
+        */
+       public static void setActiveChannel(int channel) {
+               activeChannel = channels[channel];
+       }
+
+       /* 
+        * Replaces the current sequence with a new one, holding three empty tracks.
+        */
+       public static void clearSequence() {
+               // Creates sequence.
+               try {
+                       seq = new Sequence(Sequence.PPQ, 96, 3);
+               } 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();
        }
 
@@ -155,7 +189,7 @@ public class Moosique {
                }
 
                // Sends sequence to GUI
-               gui.setSequence(seq);
+               if (gui != null) gui.setSequence(seq);
 
                // Searches the sequence for NoteOn events
                Track[] tracks = seq.getTracks();