]> ruin.nu Git - moosique.git/blobdiff - Moosique.java
tja...
[moosique.git] / Moosique.java
index 6efb2d1f747fa89e158abb2eefd15c40a3468391..c411cd6f38cf779e74dda15f66bb68a6856a77db 100644 (file)
@@ -2,58 +2,67 @@ import javax.sound.midi.*;
 import javax.swing.*;
 import java.io.*;
 
-/*
+/**
  * 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;
+       protected static Synthesizer synthesizer;
+       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.
+               System.out.print("Loading MIDI sequence...");
                if (args.length == 1) {
-                       if (!load(args[0])) createSequence();
+                       if (!load(args[0])) clearSequence();
                } else {
                        // Otherwise creates a new empty one.
-                       createSequence();
+                       clearSequence();
                }
+               System.out.println("Done");
 
                // Sets up channels and GUI.
-               channels = synthesizer.getChannels();
+               System.out.print("Creating GUI...");
                gui = new MooGUI(seq);
+               System.out.println("Done");
        }
 
-       /* 
+       /** 
         * Returns a pointer to the current sequence.
         * @return the current sequence
         */
@@ -61,17 +70,44 @@ public class Moosique {
                return seq;
        }
 
-       /* 
-        * Returns a pointer to the current sequence.
-        * @return the current sequence
+       /** 
+        * Returns a pointer to the MidiChannels of the selected synthesizer.
+        * @return the available MidiChannels
         */
-       public static void createSequence() {
+       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);
+                       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() {
@@ -82,21 +118,21 @@ public class Moosique {
                sequencer.start();
        }
 
-       /* 
+       /** 
         * Pauses playback of the current sequence.
         */
        public static void pause() {
                sequencer.stop();
        }
 
-       /* 
+       /** 
         * Resumes playback of the current sequence.
         */
        public static void resume() {
                sequencer.start();
        }
 
-       /* 
+       /** 
         * Stops playback of the current sequence.
         */
        public static void stop() {
@@ -104,7 +140,7 @@ public class Moosique {
                sequencer.setTickPosition(position);
        }
 
-       /* 
+       /** 
         * Rewinds the current sequence the given number of measures.
         * @param measures      the number of measures to rewind
         */
@@ -112,7 +148,7 @@ public class Moosique {
                return position;
        }
 
-       /* 
+       /** 
         * Rewinds the current sequence the given number of measures.
         * @param measures      the number of measures to rewind
         */
@@ -120,7 +156,7 @@ public class Moosique {
                position = ticks;
        }
 
-       /* 
+       /** 
         * Rewinds the current sequence the given number of measures.
         * @param measures      the number of measures to rewind
         */
@@ -128,7 +164,7 @@ public class Moosique {
                position -= ticks;
        }
 
-       /* 
+       /** 
         * Fast forwards the current sequence the given number of measures.
         * @param measures      the number of measures to fast forward
         */
@@ -136,7 +172,7 @@ public class Moosique {
                position += ticks;
        }
 
-       /* 
+       /** 
         * Loads the MooSequence in the given file.
         * @param filename      the filename to use
         */
@@ -148,12 +184,12 @@ public class Moosique {
                } catch (InvalidMidiDataException e) {
                        return false;
                } catch (IOException e) {
-                       JOptionPane.showMessageDialog(null, "File", "alert", JOptionPane.ERROR_MESSAGE); 
+                       JOptionPane.showMessageDialog(null, "Error 404", "File Not Found", JOptionPane.ERROR_MESSAGE); 
                        return false;
                }
 
                // Sends sequence to GUI
-               gui.setSequence(seq);
+               if (gui != null) gui.setSequence(seq);
 
                // Searches the sequence for NoteOn events
                Track[] tracks = seq.getTracks();
@@ -191,31 +227,27 @@ public class Moosique {
                return true;
        }
 
-       /* 
+       /** 
         * Saves the current sequence to the given filename
         * @param filename      the filename to use
         */
        public static void saveAs(String filename) throws IOException {
                MidiSystem.write(seq, 1, new File(filename));
-
        }
 
-       /* 
+       /** 
         * Saves the current sequence to the previously given filename.
         */
        public static void save() throws IOException {
                saveAs(filename);
        }
 
-       /* 
+       /** 
         * Releases all reserved devices and exits the program.
         */
        public static void quit() {
-               if (sequencer.isOpen()) {
-                       try {
-                               sequencer.open();
-                       } catch (MidiUnavailableException e) {}
-               }
+               if (sequencer.isOpen()) sequencer.close();
+               if (synthesizer.isOpen()) synthesizer.close();
                System.exit(0);
        }
 }
\ No newline at end of file