/* * Created on Oct 5, 2018 by nick * */ package jmsltestsuite; import com.softsynth.jmsl.MusicShape; import com.softsynth.jmsl.ParallelCollection; import com.softsynth.jmsl.score.*; import com.softsynth.jmsl.score.transcribe.TranscriberListener; public class TranscribeScore26 { static int note = 60; static MusicShape generateTwoMeasures() { MusicShape source = new MusicShape(4); int step = 1; double recordTime = 0.0D; while (recordTime < 8.0D) { source.add(recordTime, note, 1.0D, 0.1D); recordTime += 1.0D; note += step; if (note > 72) { step = -1; } else if (note < 60) { step = 1; } } return source; } static MusicShape generateBuggyMeasure() { MusicShape source = new MusicShape(4); source.add(2.5300000000000002D, 60.0D, 33.0D, 1.19392753764987D); source.add(2.5300000000000002D, 48.0D, 33.0D, 1.19392753764987D); source.add(4.184205322265625D, 62.0D, 11.0D, 1.255643009394407D); source.add(4.184205322265625D, 50.0D, 11.0D, 1.255643009394407D); source.add(4.97158935546875D, 64.0D, 37.0D, 0.3069733731448654D); source.add(4.97158935546875D, 52.0D, 37.0D, 0.3069733731448654D); source.add(6.456605224609375D, 64.0D, 109.0D, 0.2539370767772198D); source.add(6.456605224609375D, 52.0D, 109.0D, 0.2539370767772198D); source.add(7.5474560546875D, 63.0D, 18.0D, 1.3732007615268236D); source.add(7.5474560546875D, 51.0D, 18.0D, 1.3732007615268236D); source.add(8.996094970703126D, 65.0D, 57.0D, 0.3853214494884014D); source.add(8.996094970703126D, 53.0D, 57.0D, 0.3853214494884014D); source.add(9.898225097656251D, 63.0D, 78.0D, 0.10191451236605609D); source.add(9.898225097656251D, 51.0D, 78.0D, 0.10191451236605609D); return source; } /** this bug came up during the Zero Waste distributable project Oct 2018 */ public static ParallelCollection generateMoreBuggy() { MusicShape musicShape_3 = new MusicShape(4); musicShape_3.setDimensionName(0, "dim_0"); musicShape_3.setLimits(0, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); musicShape_3.setDefault(0, 0.0); musicShape_3.setDimensionName(1, "dim_1"); musicShape_3.setLimits(1, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); musicShape_3.setDefault(1, 0.0); musicShape_3.setDimensionName(2, "dim_2"); musicShape_3.setLimits(2, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); musicShape_3.setDefault(2, 0.0); musicShape_3.setDimensionName(3, "dim_3"); musicShape_3.setLimits(3, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); musicShape_3.setDefault(3, 0.0); musicShape_3.add(0.0, 68.0, 0.046875, 0.49200864860667154); musicShape_3.add(0.6150108107583394, 79.0, 0.03125, 0.4024303310218724); musicShape_3.add(1.1180487245356798, 80.0, 0.5234375, 0.2584605998317006); musicShape_3.add(1.4411244743253055, 81.0, 0.5, 0.259244430912228); musicShape_3.add(1.7651800129655906, 83.0, 0.5390625, 0.12436358688579002); musicShape_3.add(1.9206344965728281, 64.0, 0.59375, 1.0014091609390563); musicShape_3.add(3.1723959477466486, 78.0, 0.609375, 0.3303234538115514); musicShape_3.add(3.585300265011088, 79.0, 0.5859375, 0.5386245449219776); musicShape_3.add(4.25858094616356, 69.0, 0.5625, 0.3561438243684065); musicShape_3.add(4.703760726624068, 63.0, 0.5703125, 0.1620574293072533); musicShape_3.add(4.9063325132581355, 70.0, 0.5703125, 0.2556713118142543); musicShape_3.add(5.225921653025953, 79.0, 0.578125, 0.12475698536687836); musicShape_3.add(5.381867884734551, 72.0, 0.5703125, 0.28715617829109635); musicShape_3.add(5.740813107598422, 75.0, 0.5625, 0.3449648552116377); musicShape_3.add(6.172019176612969, 76.0, 0.5625, 0.2574621912430828); musicShape_3.add(6.493846915666823, 78.0, 0.578125, 0.5707611720465787); musicShape_3.add(7.207298380725046, 64.0, 0.5625, 0.14474906329856801); musicShape_3.add(7.3882347098482555, 73.0, 0.5078125, 0.2694223798545854); musicShape_3.add(7.7250126846664875, 70.0, 0.5, 0.7266273278204074); MusicShape musicShape_4 = new MusicShape(4); musicShape_4.setDimensionName(0, "dim_0"); musicShape_4.setLimits(0, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); musicShape_4.setDefault(0, 0.0); musicShape_4.setDimensionName(1, "dim_1"); musicShape_4.setLimits(1, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); musicShape_4.setDefault(1, 0.0); musicShape_4.setDimensionName(2, "dim_2"); musicShape_4.setLimits(2, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); musicShape_4.setDefault(2, 0.0); musicShape_4.setDimensionName(3, "dim_3"); musicShape_4.setLimits(3, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); musicShape_4.setDefault(3, 0.0); musicShape_4.add(0.0, 50.0, 0.046875, 0.08259285189815467); musicShape_4.add(0.10324106487269333, 42.0, 0.03125, 0.052778773517836476); musicShape_4.add(0.1692145317699889, 53.0, 0.5234375, 0.08252688506691047); musicShape_4.add(0.27237313810362695, 49.0, 0.5, 0.10160589404021309); musicShape_4.add(0.39938050565389327, 38.0, 0.5390625, 0.24199702384308874); musicShape_4.add(0.7018767854577541, 51.0, 0.59375, 0.16666283972477627); musicShape_4.add(0.9102053351137245, 36.0, 0.609375, 0.09887469083682127); musicShape_4.add(1.0337986986597512, 58.0, 0.5859375, 0.38773048159104273); musicShape_4.add(1.5184618006485546, 40.0, 0.5625, 0.23300820527038513); musicShape_4.add(1.809722057236536, 40.0, 0.5703125, 0.3888866830502865); musicShape_4.add(2.295830411049394, 44.0, 0.5703125, 0.4911175827492749); musicShape_4.add(2.9097273894859876, 45.0, 0.578125, 0.08104835473781842); musicShape_4.add(3.0110378329082605, 53.0, 0.5703125, 0.16667288504563355); musicShape_4.add(3.2193789392153023, 55.0, 0.5625, 0.21547798107798638); musicShape_4.add(3.4887264155627853, 50.0, 0.5625, 0.2758281360365621); musicShape_4.add(3.833511585608488, 56.0, 0.578125, 0.1502947509849959); musicShape_4.add(4.021380024339733, 50.0, 0.5625, 0.18426038863115696); musicShape_4.add(4.251705510128679, 44.0, 0.5078125, 0.055249475220206526); musicShape_4.add(4.320767354153937, 50.10, 0.5, 0.41684242555616885); musicShape_4.add(4.841820386099148, 40.0, 0.765625, 0.0654856414243367); musicShape_4.add(4.92367743787957, 52.0, 0.78125, 0.08640283762674233); musicShape_4.add(5.031680984912997, 52.0, 0.7890625, 0.17637754923798543); musicShape_4.add(5.252152921460479, 41.0, 0.7890625, 0.3785109854324005); musicShape_4.add(5.72529165325098, 42.0, 0.78125, 0.16849944929106314); musicShape_4.add(5.935915964864809, 56.0, 0.7890625, 0.3172522715784124); musicShape_4.add(6.332481304337825, 52.0, 0.75, 0.15146438474031138); musicShape_4.add(6.521811785263214, 45.0, 0.7734375, 0.05028769209047878); musicShape_4.add(6.584671400376313, 58.0, 0.75, 0.05395312589785141); musicShape_4.add(6.652112807748627, 59.0, 0.7734375, 0.2967552924490097); musicShape_4.add(7.023056923309889, 42.0, 0.515625, 0.08457537912039127); musicShape_4.add(7.128776147210378, 58.0, 0.5546875, 0.23642437296019106); musicShape_4.add(7.424306613410617, 38.0, 0.5546875, 0.06129013609674795); musicShape_4.add(7.500919283531552, 58.0, 0.5546875, 0.16092970784470473); musicShape_4.add(7.702081418337433, 41.0, 0.546875, 0.07005590120574036); musicShape_4.add(7.789651294844608, 54.0, 0.6171875, 0.09719264712081438); musicShape_4.add(7.911142103745626, 51.0, 0.609375, 0.505402715916065); return new ParallelCollection(musicShape_3, musicShape_4); } public static void main(String[] args) { com.softsynth.jmsl.score.transcribe.BeatDivisionSchemeList.defaultSetup(); Score score = new Score(2, 1024, 600); score.addMeasure(); score.getMeasure(0).getStaff(1).setClef(Clef.BASS_CLEF); com.softsynth.jmsl.score.transcribe.Transcriber transcriber = new com.softsynth.jmsl.score.transcribe.Transcriber(); transcriber.setScore(score); score.setCurrentStaffNumber(0); score.setTurnPages(false); com.softsynth.jmsl.score.ScoreFrame f = new com.softsynth.jmsl.score.ScoreFrame(); f.setVisible(true); f.addScore(score); f.loadPrefs(); f.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { // quit(); System.exit(0); } }); boolean firstTime = true; int i = 0; if (i < 4) { int numMeasuresSoFar = i * 2; while (score.size() <= numMeasuresSoFar) { score.addMeasure(); } score.setCurrentMeasureNumber(i * 2); ParallelCollection par = generateMoreBuggy(); // transcriber.setSourceMusicShape(generateBuggyMeasure()); transcriber.addTranscriberListener(new TranscriberListener() { public void notifyCarriedOverMusicShape(Score score, int currentMeasureNumber, MusicShape musicShape) { if (musicShape.size() > 0) { System.out.println("Carried over MusicShape, current measure number = " + currentMeasureNumber); musicShape.print(); } } public void noteAdded(Score score, Note note) { } }); try { transcriber.setSourceMusicShape((MusicShape) par.get(0)); // NEW METHOD FOR ZERO WASTE!!! transcriber.setAddCarriedOverMusicShapeToEnd(false); transcriber.transcribe(); score.rewind(); score.setCurrentStaffNumber(1); transcriber.setSourceMusicShape((MusicShape) par.get(1)); transcriber.transcribe(); } catch (com.softsynth.jmsl.score.transcribe.ElementMissedException e) { e.printStackTrace(); System.out.println("ERROR: " + e); } catch (com.softsynth.jmsl.score.transcribe.SearchPathListExpansionException e) { e.printStackTrace(); System.out.println("ERROR: " + e); } score.render(Math.max(0, numMeasuresSoFar - 2)); } } }