X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=Moosique.java;h=4cf89659d86a2d572c706a14febe75aeebd85943;hb=2f2b387add66ddc0d8f8c1e301f4718792e969b6;hp=42c5e2e03fea09b18c15c566d3fa044502107d01;hpb=ade446bcfe30be5e4a058926387763f72fc3d4a7;p=moosique.git diff --git a/Moosique.java b/Moosique.java index 42c5e2e..4cf8965 100644 --- a/Moosique.java +++ b/Moosique.java @@ -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