[jmsl] Bug report: Transcriber

jmsl at music.columbia.edu jmsl at music.columbia.edu
Sat Jan 19 07:35:52 EST 2008


Great bug report Peter, thanks for tracing it down to a simple case I 
can reproduce.
I noticed that the rest is properly transcribed when the first measure 
is set to 2/4
I'm working on it and will fix.
Best
Nick

jmsl at music.columbia.edu wrote:
> I think I've found a bug in the Transcriber with rest transcription at 
> the beginning of measures.  This is adapted from TranscribeScore3.java.
>
> If the tempo is 60 bpm, then first-note rests are no problem and are 
> properly transcribed.  If however, the tempo of the measure is 
> anything other than 60, the rest will be ignored (or added to the end 
> of the measure?) and everything will be shifted over so that the 
> measure begins on a note.
>
> So, in this example, measure 1 @ 120 bpm is incorrect, but measure 4 
> transcribes correctly.
>
> I'm running the most recent build of JMSL on OSX 10.4.11 with JVM 1.5.0.
>
> thanks,
> Peter McCulloch
>
>
>
> 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;
>
> /**
> JMSL's com.softsynth.jmsl.score.transcribe package enables the 
> transcription of arbitrary MusicShape data into common music notation.
>
>  * This test changes tempo in measure 2 and then changes it back in 
> measure 3.  So note events that would normally get transcribed as 
> eighths are
>  * transcribed as quarters, with a tempo change.
>  *
> @author Nick Didkovsky, (c) 2002 Nick Didkovsky, All Rights reserved. */
>
> public class TranscribeScore3 {
>
>     public static void main(String args[]) {
>         JMSL.clock.setAdvance(0.1);
>         BeatDivisionSchemeList.defaultSetup();
>
>         MusicShape source = new MusicShape(4);
>         source.add(1.0, 0, 0.5, 1);    // This rest is not properly 
> transcribed
>         source.add(1.0, 61, 0.5, 1.0);
>         source.add(0.5, 62, 0.5, 0.5);
>         source.add(0.5, 63, 0.5, 0.5);
>         source.add(1.0, 64, 0.5, 1.0);
>         source.add(1.0, 65, 0.5, 1.0);
>         source.add(1.0, 0, 0.5, 1.0);    // This rest is properly 
> transcribed because tempo = 60.
>         source.add(1.0, 65, 0.5, 1.0);
>
>         source.integrate(0);
>         source.print();
>
>         // 2 staves, width, height
>         Score score = new Score(2, 1024, 800);
>         score.addMeasure();
>         score.getMeasure(0).getStaff(1).setClef(Clef.BASS_CLEF);
>
>         Transcriber transcriber = new Transcriber();
>         transcriber.setScore(score);
>         transcriber.setSourceMusicShape(source);
>
>         Vector tsVector = new Vector();
>
>         tsVector.addElement(new TempoTimeSignatureHolder(new 
> Tempo(120), new TimeSignature(4, 4)));
>         tsVector.addElement(new TempoTimeSignatureHolder(new 
> Tempo(120), new TimeSignature(2, 4)));
>         tsVector.addElement(new TempoTimeSignatureHolder(new 
> Tempo(60), new TimeSignature(2, 4)));
>
>         transcriber.setTempoTimeSignatures(tsVector);
>
>         try {
>             score.setCurrentStaffNumber(0);
>             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);
>         }
>
>         final ScoreFrame f = new ScoreFrame();
>         f.addScore(score);
>         score.getMeasure(0).setMeasureText("I should start with a rest");
>         score.getMeasure(3).setMeasureText("Transcribed correctly");
>         Score.setInstrumentNamesVisible(false);
>         Score.setStaffNumbersVisible(false);
>         //    f.loadPrefs();
>         f.addWindowListener(new java.awt.event.WindowAdapter() {
>             public void windowClosing(java.awt.event.WindowEvent e) {
>                 f.quit();
>             }
>         });
>
>         f.setVisible(true);
>
>     }
>
> }
>
> _______________________________________________
> jmsl mailing list
> jmsl at music.columbia.edu
> http://music.columbia.edu/mailman/listinfo/jmsl


More information about the jmsl mailing list