]> ruin.nu Git - moosique.git/blobdiff - Moosique.java
removed exportMIDI method; added quit, getPosition, setPosition and resume
[moosique.git] / Moosique.java
index 42c5e2e03fea09b18c15c566d3fa044502107d01..4cf89659d86a2d572c706a14febe75aeebd85943 100644 (file)
@@ -1,6 +1,15 @@
 import javax.sound.midi.*;
 import java.io.*;
-// Import external MIDIFileReader and MIDIFileWriter
+
+/* 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
@@ -14,27 +23,35 @@ import java.io.*;
 public class Moosique {
 
        private static MooGUI gui;
-       private static MooSequence mooSeq;
-       private static Sequence seq;
+       private static MooSequence seq;
+
        private static Sequencer sequencer = null;
-       private static String filename;
-       private static int position;
+       private static Synthesizer synthesizer = null;
+       private static Receiver receiver = null;
+       private static MidiChannel[] channels;
+
+       private static String file;
+       private static long position;
 
        /* 
         * Starts the application.
         */
        public static void main (String[] args) {
-               // Creates song and GUI
                seq = new MooSequence();
-               gui = new MooGUI(mooSeq);
+               gui = new MooGUI(seq);
 
-               // Initializes MIDI sequencer
+               // Acquires MIDI devices and connects them.
                try {
                        sequencer = MidiSystem.getSequencer();
                        sequencer.open();
+                       synthesizer = MidiSystem.getSynthesizer();
+                       synthesizer.open();
+                       sequencer.getTransmitter().setReceiver(synthesizer.getReceiver());
                } catch (MidiUnavailableException e) {
-                       System.exit(0);
+                       quit();
                }
+
+               channels = synthesizer.getChannels();
        }
 
        /* 
@@ -42,15 +59,15 @@ public class Moosique {
         * @return the current sequence
         */
        public static MooSequence getSequence() {
-               return mooSeq;
+               return seq;
        }
 
        /* 
         * Starts playback of the current sequence.
         */
        public static void play() {
-               seq = mooSeq.getSequence();
-               sequencer.setSequence(seq);
+               sequencer.setSequence(seq.getSequence());
+               sequencer.setTickPosition(position);
                sequencer.start();
        }
 
@@ -58,7 +75,14 @@ public class Moosique {
         * Pauses playback of the current sequence.
         */
        public static void pause() {
-       
+               sequencer.stop();
+       }
+
+       /* 
+        * Resumes playback of the current sequence.
+        */
+       public static void resume() {
+               sequencer.start();
        }
 
        /* 
@@ -66,22 +90,39 @@ public class Moosique {
         */
        public static void stop() {
                sequencer.stop();
+               sequencer.setTickPosition(position);
        }
 
        /* 
         * Rewinds the current sequence the given number of measures.
         * @param measures      the number of measures to rewind
         */
-       public static void rewind(int measures) {
-       
+       public static long getPosition() {
+               return position;
+       }
+
+       /* 
+        * Rewinds the current sequence the given number of measures.
+        * @param measures      the number of measures to rewind
+        */
+       public static void setPosition(long ticks) {
+               position = ticks;
+       }
+
+       /* 
+        * Rewinds the current sequence the given number of measures.
+        * @param measures      the number of measures to rewind
+        */
+       public static void rewind(long ticks) {
+               position -= ticks;
        }
 
        /* 
         * Fast forwards the current sequence the given number of measures.
         * @param measures      the number of measures to fast forward
         */
-       public static void forward(int measures) {
-       
+       public static void forward(long ticks) {
+               position += ticks;
        }
 
        /* 
@@ -89,7 +130,8 @@ public class Moosique {
         * @param filename      the filename to use
         */
        public static void load(String filename) throws IOException {
-       
+               file = filename;
+               seq = new MooSequence(MidiSystem.getSequence(new File(filename)));
        }
 
        /* 
@@ -97,21 +139,26 @@ public class Moosique {
         * @param filename      the filename to use
         */
        public static void saveAs(String filename) throws IOException {
-               
+               MidiSystem.write(seq.getSequence(), 1, new File(filename));
+
        }
 
        /* 
         * Saves the current sequence to the previously given filename.
         */
        public static void save() throws IOException {
-       
+               saveAs(file);
        }
 
        /* 
-        * Exports the current sequence to a standard MIDI file.
-        * @param filename      the filename to use
+        * Releases all reserved devices and exits the program.
         */
-       public static void exportMIDI(String filename) throws IOException {
-       
+       public static void quit() {
+               if (sequencer.isOpen()) {
+                       try {
+                               sequencer.open();
+                       } catch (MidiUnavailableException e) {}
+               }
+               System.exit(0);
        }
 }
\ No newline at end of file