]> ruin.nu Git - moosique.git/blobdiff - Moosique.java
*** empty log message ***
[moosique.git] / Moosique.java
index b4c4259e0b02a6be66ef48f63c821f7229f65c4d..df94b478e464f79277871e4d95d80265b03da463 100644 (file)
@@ -21,9 +21,10 @@ public class Moosique {
        private static MidiChannel activeChannel;
 
        private static String filename, fileArg;
-       private static long position;
+       private static long editPosition;
        private static boolean makeGUI = true, isEdited;
        private static Thread player;
+       public static final int RESOLUTION = 96, DEFAULT_TRACKS = 4;
 
        /** 
         * Starts the application.
@@ -118,6 +119,14 @@ public class Moosique {
                return channels;
        }
 
+       /** 
+        * Returns the MidiChannels of the selected synthesizer.
+        * @return the available MidiChannels
+        */
+       public static MidiChannel getChannel(int i) {
+               return channels[i];
+       }
+
        /** 
         * Returns the currently active MidiChannel.
         * @return the active MidiChannel
@@ -140,7 +149,7 @@ public class Moosique {
        public static void clearSequence() {
                // Creates a new sequence and sends it to the sequencer.
                try {
-                       seq = new Sequence(Sequence.PPQ, 96, 3);
+                       seq = new Sequence(Sequence.PPQ, RESOLUTION, DEFAULT_TRACKS);
                        sequencer.setSequence(seq);
                } catch (InvalidMidiDataException e) {}
                // Sends sequence to GUI.
@@ -151,23 +160,25 @@ public class Moosique {
         * Starts playback of the current sequence.
         */
        public static void play() {
-               sequencer.setTickPosition(position);
+               sequencer.setTickPosition(editPosition);
                resume();
-               
        }
 
        /** 
         * Pauses playback of the current sequence.
         */
        public static void pause() {
-               sequencer.stop();
-               player.destroy();
+               if (sequencer.isRunning()) {
+                       sequencer.stop();
+               }
+               if (player != null) player.interrupt();
        }
 
        /** 
         * Resumes playback of the current sequence.
         */
        public static void resume() {
+               gui.update(0);
                sequencer.start();
 
                // Disables input to volatile components
@@ -176,7 +187,8 @@ public class Moosique {
                // Creates the visualization thread and starts it.
                player = new Thread () {
                        public void run() {
-                               gui.update(sequencer.getTickPosition());
+                               while(sequencer.isRunning()) gui.update(sequencer.getTickPosition());
+                               Moosique.stop();
                        }
                };
                player.start();
@@ -186,26 +198,28 @@ public class Moosique {
         * Stops playback of the current sequence.
         */
        public static void stop() {
-               sequencer.stop();
-               sequencer.setTickPosition(position);
-               player.destroy();
+               if (sequencer.isRunning()) {
+                       sequencer.stop();
+               }
+               sequencer.setTickPosition(editPosition);
+               if (player != null) player.interrupt();
                gui.update((long)0);
        }
 
        /** 
-        * Returns the current tick position of the sequencer.
+        * Returns the current editing position of the sequencer.
         * @return the tick position
         */
        public static long getPosition() {
-               return position;
+               return editPosition;
        }
 
        /** 
-        * Sets the current tick position of the sequencer.
+        * Sets the current editing position of the sequencer.
         * @param ticks         the tick position
         */
        public static void setPosition(long ticks) {
-               position = ticks;
+               editPosition = ticks;
        }
 
        /** 
@@ -228,7 +242,7 @@ public class Moosique {
         * @param measures      the number of measures to rewind
         */
        public static void rewind(long ticks) {
-               setPosition(position - ticks);
+               editPosition -= ticks;
        }
 
        /** 
@@ -236,7 +250,7 @@ public class Moosique {
         * @param measures      the number of measures to fast forward
         */
        public static void forward(long ticks) {
-               setPosition(position + ticks);
+               editPosition += ticks;
        }
 
        /**