private MooView view;
private JLabel statusBar;
private java.util.Timer timer;
+ private boolean drawEmptyTracks = false;
public static final int statusResetDelay = 3000;
public static final Font FONT = new Font("Helvetica", Font.PLAIN, 10);
public static final Color bgColor = new Color(192, 224, 255);
toolbar.updateProgInd(tickPosition);
}
+ /**
+ * Shows the given message in the status bar.
+ * @param text the message to show
+ */
+ public boolean drawEmptyTracks() {
+ return drawEmptyTracks;
+ }
+
+ /**
+ * Shows the given message in the status bar.
+ * @param text the message to show
+ */
+ public void setDrawEmptyTracks(boolean state) {
+ drawEmptyTracks = state;
+ }
+
private Action createOctaveAction(final int octave) {
Action octaveAction = new AbstractAction() {
public void actionPerformed(ActionEvent ae) {
private static MidiChannel[] channels;
private static MidiChannel activeChannel;
private static MidiEvent[] timeSignatures, tempoChanges;
+ private static ArrayList emptyTracks;
private static String filename, fileArg;
private static long editPosition;
// Disables input to volatile components
// gui.disable();
- System.out.println("Ticks/16: " + seq.getResolution()/4);
-
// Creates the visualisation thread and starts it.
player = new Thread () {
public void run() {
+ long ticksPerSixteenth = seq.getResolution()/4;
+ System.out.println("Ticks/16: " + ticksPerSixteenth);
long position = sequencer.getTickPosition();
while(sequencer.isRunning()) {
long pos = sequencer.getTickPosition();
- System.out.print(" ... " + (pos - position));
+ long tickDiff = pos - position;
+ System.out.print(" ... " + tickDiff);
position = pos;
// Updates the GUI with the current tick position.
// Puts the thread to sleep for as long as it takes
// the sequencer to reach the next sixteenth.
try {
- sleep((long)(15000 / getTempo()));
+ sleep((long)((15000 / getTempo()) * (tickDiff / ticksPerSixteenth)));
} catch (InterruptedException e) {
Moosique.stop();
}
isEdited = false;
Track[] tracks = seq.getTracks();
+ emptyTracks = new ArrayList();
// Searches track 0 for changes in tempo and time signature.
MidiEvent event;
}
noteOns.trimToSize();
noteOffs.trimToSize();
+ boolean isEmpty = (noteOns.size() == 0);
+ String text = "Track " + i + " has " + noteOns.size() + "/" + noteOffs.size() + "/" + tracks[i].size();
+ if (isEmpty) text += " and will not be removed.";
+ System.out.println(text);
+ emptyTracks.add(tracks[i]);
// Sorts the note lists by tick position.
Comparator c = new Comparator() {