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() {