/* * Created on Jun 28, 2009 by Nick * */ package jmsltestsuite; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Enumeration; import com.softsynth.jmsl.JMSL; import com.softsynth.jmsl.score.*; import com.softsynth.jmsl.score.util.GraceNoteMaxRollbackCalculator; public class GraceNoteTest2 { public static void main(String[] args) { System.out.println("JMSL version=" + JMSL.JMSL_VERSION); boolean showAccidentalBug = false; int w = 800; int h = 350; int numStaves = 1; Score score = new Score(numStaves, w, h); score.addMeasure(); score.setInstrumentNamesVisible(false); Note note0 = score.addNote(1, 59, 0.5, 0.8); Note noteToAddGraceNoteTo = note0; if (showAccidentalBug) { noteToAddGraceNoteTo = note0; note0.setText("gracenotes were attached to single note and should show F# and A#, but did not before the bug fix"); note0.setTextOffsetY(30); } else { Note interval = note0.addInterval(65); noteToAddGraceNoteTo = interval; note0.setText("these gracenotes were attached to interval and properly show F# and A#"); note0.setTextOffsetY(30); } Note graceNote = noteToAddGraceNoteTo.addGraceNote(0.5, 60, 0.5, 0.4, true, false, false, false, false, Note.MARK_NONE); graceNote.setBeamedOut(true); graceNote.addInterval(78); graceNote = noteToAddGraceNoteTo.addGraceNote(0.5, 70, 0.5, 0.4, true, false, false, false, false, Note.MARK_NONE); graceNote.addInterval(78); ScoreFrame scoreFrame = new ScoreFrame(); scoreFrame.addScore(score); scoreFrame.pack(); scoreFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); NotePropertiesTransform t1 = new NotePropertiesTransform() { public void operate(Score score, SelectionBuffer selectionBuffer) { for (Enumeration e = selectionBuffer.elements(); e.hasMoreElements();) { Note note = (Note) e.nextElement(); for (int i = note.getGraceNotes().size() - 1; i >= 0; i--) { Note graceNote = (Note) note.getGraceNotes().elementAt(i); graceNote.setIsGraceNote(false); note.getTrack().insertNote(graceNote, note.getTrack().indexOf(note)); } note.removeAllGraceNotes(); } score.setDirty(true, getName()); } }; t1.setName("Detach Grace Notes"); scoreFrame.addNotePropertiesTransform(t1); NotePropertiesTransform t2 = new NotePropertiesTransform() { public void operate(Score score, SelectionBuffer selectionBuffer) { Note lastNote = null; for (Enumeration e = selectionBuffer.elements(); e.hasMoreElements();) { lastNote = (Note) e.nextElement(); } Note noteToWhichGraceNotesWillBeAttached = lastNote.nextNote(); if (noteToWhichGraceNotesWillBeAttached != null) for (Enumeration e = selectionBuffer.elements(); e.hasMoreElements();) { Note graceNote = (Note) e.nextElement(); noteToWhichGraceNotesWillBeAttached.addGraceNote(graceNote); graceNote.setIsGraceNote(true); graceNote.getTrack().deleteNote(graceNote); } score.setDirty(true, getName()); } }; t2.setName("Make Grace Notes"); scoreFrame.addNotePropertiesTransform(t2); scoreFrame.setVisible(true); GraceNoteMaxRollbackCalculator graceNoteMaxRollbackCalculator = new GraceNoteMaxRollbackCalculator(); graceNoteMaxRollbackCalculator.calcMaxGraceNoteRollback(score); double maxRollback = graceNoteMaxRollbackCalculator.getMaxRollback(); System.out.println("max grace note rollback for this score=" + maxRollback); } /** * @param note */ private static Note createGraceNote(Note note, double pitch) { Note graceNote = NoteFactory.makeNote(0.5, pitch, 0.5, 0.8); graceNote.setTrack(note.getTrack()); NoteFactory.updateFromPitch(graceNote); note.addGraceNote(graceNote); graceNote.setIsGraceNote(true); // graceNote.setTiedOut(true); return graceNote; } }