[jmsl] Comparator for notes
jmsl at music.columbia.edu
jmsl at music.columbia.edu
Sat Nov 1 17:43:08 EDT 2008
If you find yourself needing to order the contents of the
SelectionBuffer or another collection of notes, you can use this
comparator class to order notes by position in the score.
(using Collections.sort(yourCollection, NoteOrder.getMeasureOrder());
Peter McCulloch
/**
* The Megalo Project. Copyright Peter McCulloch, 2005-2008.
*
*/
package com.petermcculloch.megalo.compare;
import java.util.Comparator;
import com.softsynth.jmsl.score.Note;
/**
* @author peter mcculloch
*
*/
public class NoteOrder {
/**
* Order notes by Measure, Staff, Track, TrackIndex, Pitch
*
* @return
*/
public static Comparator<Note> getMeasureOrder() {
return new MeasureOrder();
}
/**
* Order notes by Staff, Measure, Track, TrackIndex, Pitch
*
* @return
*/
public static Comparator<Note> getStaffOrder() {
return new StaffOrder();
}
private static class MeasureOrder implements Comparator<Note> {
/*
* (non-Javadoc)
*
* @see java.util.Comparator#compare(java.lang.Object,
java.lang.Object)
*/
public int compare(Note n1, Note n2) {
int val = 0;
if (n1.getMeasureIndex() < n2.getMeasureIndex()) {
val = -1;
} else if (n1.getMeasureIndex() == n2.getMeasureIndex()) {
if (n1.getStaffIndex() < n2.getStaffIndex()) {
val = -1;
} else if (n1.getStaffIndex() == n2.getStaffIndex()) {
if (n1.getTrack().getTrackIndex() <
n2.getTrack().getTrackIndex()) {
val = -1;
} else if (n1.getTrack().getTrackIndex() ==
n2.getTrack().getTrackIndex()) {
if (n1.getNoteIndex() < n2.getNoteIndex()) {
val = -1;
} else if (n1.getNoteIndex() == n2.getNoteIndex()) {
Note.resortChord(n1);
Note.resortChord(n2);
if (n1.getPitchData() < n2.getPitchData()) {
val = -1;
} else if (n1.getPitchData() == n2.getPitchData()) {
val = 0;
} else {
val = 1;
}
}
} else {
val = 1;
}
} else {
val = 1;
}
} else {
val = 1;
}
return val;
}
}
private static class StaffOrder implements Comparator<Note> {
/*
* (non-Javadoc)
*
* @see java.util.Comparator#compare(java.lang.Object,
java.lang.Object)
*/
public int compare(Note n1, Note n2) {
int val = 0;
if (n1.getStaffIndex() < n2.getStaffIndex()) {
val = -1;
} else if (n1.getStaffIndex() == n2.getStaffIndex()) {
if (n1.getMeasureIndex() < n2.getMeasureIndex()) {
val = -1;
} else if (n1.getMeasureIndex() == n2.getMeasureIndex()) {
if (n1.getTrack().getTrackIndex() <
n2.getTrack().getTrackIndex()) {
val = -1;
} else if (n1.getTrack().getTrackIndex() ==
n2.getTrack().getTrackIndex()) {
if (n1.getNoteIndex() < n2.getNoteIndex()) {
val = -1;
} else if (n1.getNoteIndex() == n2.getNoteIndex()) {
Note.resortChord(n1);
Note.resortChord(n2);
if (n1.getPitchData() < n2.getPitchData()) {
val = -1;
} else if (n1.getPitchData() == n2.getPitchData()) {
val = 0;
} else {
val = 1;
}
}
} else {
val = 1;
}
} else {
val = 1;
}
} else {
val = 1;
}
return val;
}
}
}
More information about the jmsl
mailing list