* Calls on the main view to update the track views,
* and on the toolbar to update the progress indicator.
*/
- public void update(){
- view.update();
- toolbar.updateProgInd();
+ public void update(long tickPosition){
+ view.update(tickPosition);
+ toolbar.updateProgInd(tickPosition);
}
class MooGUICloser extends WindowAdapter {
* @param mn the note that will be graphically represented
* @param rows the number of rows that the note will occupy
*/
- public MooNoteElement (MooNote mn, int rows) {
+ public MooNoteElement (MooNote mn) {
note = mn;
columns = mn.getDuration() / 24;
}
/**
* Updates the progress indicator.
+ * @param tickPosition the tick position to visualize
*/
- public void updateProgInd() {
- long pos = Moosique.getSequencer().getTickPosition();
+ public void updateProgInd(long tickPosition) {
int ticksPerBeat = Moosique.getSequence().getResolution();
int beatsPerMeasure = 4;
- long measures = pos / (beatsPerMeasure * ticksPerBeat);
- long beats = (pos - measures * beatsPerMeasure * ticksPerBeat) / ticksPerBeat;
- long ticks = pos - measures * beatsPerMeasure * ticksPerBeat - beats * ticksPerBeat;
+ long measures = tickPosition / (beatsPerMeasure * ticksPerBeat);
+ long beats = (tickPosition - measures * beatsPerMeasure * ticksPerBeat) / ticksPerBeat;
+ long ticks = tickPosition - measures * beatsPerMeasure * ticksPerBeat - beats * ticksPerBeat;
measureValue.setText(Long.toString(measures));
beatsValue.setText(Long.toString(beats));
ticksValue.setText(Long.toString(ticks));
class MooMouseAdapter extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
if (((JButton)e.getSource()).getToolTipText() == "Play") {
- Moosique.play();
playpause.setIcon(pauseIcon);
playpause.setToolTipText("Pause");
- while(Moosique.getSequencer().isRunning()) {
- Moosique.getGUI().update();
- }
+ Moosique.play();
} else if (((JButton)e.getSource()).getToolTipText() == "Pause") {
- Moosique.pause();
playpause.setIcon(playIcon);
playpause.setToolTipText("Resume");
+ Moosique.pause();
} else if (((JButton)e.getSource()).getToolTipText() == "Resume") {
- Moosique.resume();
playpause.setIcon(pauseIcon);
playpause.setToolTipText("Pause");
- while(Moosique.getSequencer().isRunning()) {
- Moosique.getGUI().update();
- }
+ Moosique.resume();
} else if (((JButton)e.getSource()).getToolTipText() == "Stop") {
- Moosique.stop();
playpause.setIcon(playIcon);
playpause.setToolTipText("Play");
+ Moosique.stop();
}
}
/**
* Updates the track view.
*/
- public void update() {
+ public void update(long tickPosition) {
repaint();
}
/**
* Calls on each track view to update itself.
*/
- public void update() {
+ public void update(long tickPosition) {
Component[] comps = getComponents();
for (int i = 0; i < comps.length; i++) {
- if(comps[i] instanceof MooTrackView) ((MooTrackView)comps[i]).update();
+ if(comps[i] instanceof MooTrackView) ((MooTrackView)comps[i]).update(tickPosition);
}
}
private static String filename, fileArg;
private static long position;
private static boolean makeGUI = true, isEdited;
+ private static Thread player;
/**
* Starts the application.
*/
public static void play() {
sequencer.setTickPosition(position);
- sequencer.start();
+ resume();
+
}
/**
*/
public static void pause() {
sequencer.stop();
+ player.destroy();
}
/**
*/
public static void resume() {
sequencer.start();
+
+ // Disables input to volatile components
+ // gui.disable();
+
+ // Creates the visualization thread and starts it.
+ player = new Thread () {
+ public void run() {
+ gui.update(sequencer.getTickPosition());
+ }
+ };
+ player.start();
}
/**
public static void stop() {
sequencer.stop();
sequencer.setTickPosition(position);
+ player.destroy();
+ gui.update((long)0);
}
/**