package jmsltestsuite; import java.util.Vector; import com.softsynth.jmsl.JMSL; import com.softsynth.jmsl.MusicShape; import com.softsynth.jmsl.score.*; import com.softsynth.jmsl.score.transcribe.*; import com.softsynth.jmsl.util.TimeSignature; /** * * * Test adding redundant beat division scheme to BeatDivisionSchemeList which results in long * transcription waits. You should see a warning when adding 32nds to default which already includes * 16ths * * * * @author Nick Didkovsky, (c) 2002 Nick Didkovsky, All Rights reserved. */ public class TranscribeScore23 { /* Java reproduce the MaxScore bug Georg reported */ static void addBeatDivisionScheme(double timeSpan, int numberOfDivisions, int minRequired, double minTimeSpan, boolean conformToBeat) { BeatDivisionScheme b = new BeatDivisionScheme(); b.setTimeSpan(timeSpan); b.setMinTimeSpan(minTimeSpan); b.setMinRequired(minRequired); b.setNumberOfDivisions(numberOfDivisions); b.setConformToBeat(conformToBeat); BeatDivisionSchemeList.addBeatDivisionScheme(b); } public static void main(String args[]) { JMSL.clock.setAdvance(0.1); boolean useDefaultBeatDivisionScheme = true; // false generates warning if (useDefaultBeatDivisionScheme) { BeatDivisionSchemeList.defaultSetup(); } else { BeatDivisionSchemeList.defaultSetup(); double minTimeSpan = 1 / 8.0; double timeSpan = 1.0; int numberOfDivisions = 8; addBeatDivisionScheme(timeSpan, numberOfDivisions, 0, minTimeSpan, true); // BeatDivisionSchemeList.removebeatDivisionScheme(1, 4); // addBeatDivisionScheme(1, 4, 0, 0.25, true); /* * BeatDivisionSchemeList.removeAllBeatDivisionSchemes(); BeatDivisionScheme b = new * BeatDivisionScheme(); b.setTimeSpan(1.0); b.setMinTimeSpan(0.25); * b.setMinRequired(0); b.setNumberOfDivisions(4); b.setConformToBeat(true); * BeatDivisionSchemeList.addBeatDivisionScheme(b); */ } MusicShape source1 = new MusicShape(4); source1.useStandardDimensionNameSpace(); source1.add(0., 0., 1., 1.); source1.add(0.37501, 70., 64., 0.5); source1.add(0.87501, 72., 64., 0.5); source1.add(1.37501, 69., 64., 0.495); source1.add(1.87501, 69., 64., 0.396); source1.add(2.37501, 71., 64., 0.396); source1.add(3.87501, 74., 64., 0.396); source1.add(4.37501, 71., 64., 0.396); source1.add(4.87501, 77., 64., 0.396); source1.add(5.37501, 69., 64., 0.396); source1.add(5.87501, 72., 64., 0.396); source1.add(6.37501, 72., 64., 0.396); source1.add(6.87501, 69., 64., 0.396); source1.add(7.37501, 71., 64., 0.396); Score score = new Score(1, 800, 400); score.addMeasure(); Transcriber transcriber = new Transcriber(); Vector tsVector = new Vector(); tsVector.add(new TempoTimeSignatureHolder(new Tempo(120), new TimeSignature(15, 16))); tsVector.add(new TempoTimeSignatureHolder(new Tempo(120), new TimeSignature(4, 4))); tsVector.add(new TempoTimeSignatureHolder(new Tempo(120), new TimeSignature(4, 4))); tsVector.add(new TempoTimeSignatureHolder(new Tempo(120), new TimeSignature(4, 4))); tsVector.add(new TempoTimeSignatureHolder(new Tempo(120), new TimeSignature(1, 16))); long millisBefore = System.currentTimeMillis(); transcriber.setTempoTimeSignatures(tsVector); try { score.setCurrentStaffNumber(0); // score.setCurrentTrackNumber(1); transcriber.setScore(score); score.rewind(); transcriber.setSourceMusicShape(source1); transcriber.transcribe(); } catch (ElementMissedException e) { e.printStackTrace(); System.out.println("ERROR: " + e); System.exit(0); } catch (SearchPathListExpansionException e) { e.printStackTrace(); System.out.println("ERROR: " + e); System.exit(0); } long millisAfter = System.currentTimeMillis(); System.out.println("That took " + (millisAfter - millisBefore) + " millis"); final ScoreFrame f = new ScoreFrame(); f.addScore(score); f.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { f.quit(); } }); f.setVisible(true); } }