Search code examples
jfugue

How to use MusicXmlParser in jFugue 5.0?


I'm trying to parse a Staccato Pattern into MusicXml. However, it's not working, as the parsed MusicXml contains almost nothing. I don't know if it's due to something wrong with my Staccato string, or the MusicXmlParser.

Here's my code, including the Staccato string:

public class TestMusicXml {

public static void main(String[] args) {
    Pattern p = new Pattern(
            "#Score_Beginning I[PIANO] T100 TIME:6/4 KEY:AMIN #Variation_0 #Chord_0 A4/0.25 | F#5/0.25 F#5/0.25 A4/0.25 D5/0.25 D5/0.25 A4/0.25 | #Chord_1 G4/0.25 | Eb5/0.25 Eb5/0.25 G4/0.25 C5/0.25 C5/0.25 G4/0.25 | #Chord_2 F#5/0.25 | D6/0.25 D6/0.25 F#5/0.25 B4/0.25 B4/0.25 F#5/0.25 | #Chord_3 E5/0.25 | C#6/0.25 C#6/0.25 E5/0.25 A4/0.25 A4/0.25 #Variation_1 E5/0.25 | #Chord_0 A4/0.25 | F#5/0.25 F#5/0.25 A4/0.25 D5/0.25 D5/0.25 A4/0.25 | #Chord_1 G4/0.25 | Eb5/0.25 Eb5/0.25 G4/0.25 C5/0.25 C5/0.25 G4/0.25 | #Chord_2 F#5/0.25 | D6/0.25 D6/0.25 F#5/0.25 B4/0.25 B4/0.25 F#5/0.25 | #Chord_3 E5/0.25 | C#6/0.25 C#6/0.25 E5/0.25 A4/0.25 A4/0.25 #Variation_2 E5/0.25 | #Chord_0 A4/0.25 | F#5/0.25 F#5/0.25 A4/0.25 D5/0.25 D5/0.25 A4/0.25 | #Chord_1 G4/0.25 | Eb5/0.25 Eb5/0.25 G4/0.25 C5/0.25 C5/0.25 G4/0.25 | #Chord_2 F#5/0.25 | D6/0.25 D6/0.25 F#5/0.25 B4/0.25 B4/0.25 F#5/0.25 | #Chord_3 E5/0.25 | C#6/0.25 C#6/0.25 E5/0.25 A4/0.25 A4/0.25 #Variation_3 E5/0.25 | #Chord_0 A3/0.25 | F#4/0.25 F#4/0.25 A3/0.25 D5/0.25 D5/0.25 A3/0.25 | #Chord_1 G3/0.25 | Eb4/0.25 Eb4/0.25 G3/0.25 C5/0.25 C5/0.25 G3/0.25 | #Chord_2 F#4/0.25 | D5/0.25 D5/0.25 F#4/0.25 B4/0.25 B4/0.25 F#4/0.25 | #Chord_3 E4/0.25 | C#5/0.25 C#5/0.25 E4/0.25 A4/0.25 A4/0.25 #Variation_4 E4/0.25 | #Chord_0 A3/0.25 | F#4/0.25 F#4/0.25 A3/0.25 D5/0.25 D5/0.25 A3/0.25 | #Chord_1 G3/0.25 | Eb4/0.25 Eb4/0.25 G3/0.25 C5/0.25 C5/0.25 G3/0.25 | #Chord_2 F#4/0.25 | D5/0.25 D5/0.25 F#4/0.25 B4/0.25 B4/0.25 F#4/0.25 | #Chord_3 E4/0.25 | C#5/0.25 C#5/0.25 E4/0.25 A4/0.25 A4/0.25 #Variation_5 E4/0.25 | #Chord_0 A4/0.25 | F#5/0.25 F#5/0.25 A4/0.25 D5/0.25 D5/0.25 A4/0.25 | #Chord_1 G4/0.25 | Eb5/0.25 Eb5/0.25 G4/0.25 C5/0.25 C5/0.25 G4/0.25 | #Chord_2 F#5/0.25 | D6/0.25 D6/0.25 F#5/0.25 B4/0.25 B4/0.25 F#5/0.25 | #Chord_3 E5/0.25 | C#6/0.25 C#6/0.25 E5/0.25 A4/0.25 A4/0.25 E5/0.25 |");
    StaccatoParser parser = new StaccatoParser();
    MusicXmlParserListener listener = new MusicXmlParserListener();
    parser.addParserListener(listener);
    DevLog.debug("parsing: " + p);
    parser.parse(p);
    String musicXmlStr = listener.getMusicXMLString();
    DevLog.debug("writing music xml: " + musicXmlStr);
}

}

Here is the output:

2017-07-16 05:36:16.649 1 D [SysProp] song.devlog.printDateTimeInSystemOut=DefaultVal: true, SetVal : null 2017-07-16 05:36:16.649 1 D [SysProp] song.devlog.printNothingInSystemOut=DefaultVal: false, SetVal : null 2017-07-16 05:36:16.649 1 D [SysProp] issac.logLevel=DefaultVal: -S-T-D-I-W-E-, SetVal : null 2017-07-16 05:36:16.626 1 D parsing: #Score_Beginning I[PIANO] T100 TIME:6/4 KEY:AMIN #Variation_0 #Chord_0 A4/0.25 | F#5/0.25 F#5/0.25 A4/0.25 D5/0.25 D5/0.25 A4/0.25 | #Chord_1 G4/0.25 | Eb5/0.25 Eb5/0.25 G4/0.25 C5/0.25 C5/0.25 G4/0.25 | #Chord_2 F#5/0.25 | D6/0.25 D6/0.25 F#5/0.25 B4/0.25 B4/0.25 F#5/0.25 | #Chord_3 E5/0.25 | C#6/0.25 C#6/0.25 E5/0.25 A4/0.25 A4/0.25 #Variation_1 E5/0.25 | #Chord_0 A4/0.25 | F#5/0.25 F#5/0.25 A4/0.25 D5/0.25 D5/0.25 A4/0.25 | #Chord_1 G4/0.25 | Eb5/0.25 Eb5/0.25 G4/0.25 C5/0.25 C5/0.25 G4/0.25 | #Chord_2 F#5/0.25 | D6/0.25 D6/0.25 F#5/0.25 B4/0.25 B4/0.25 F#5/0.25 | #Chord_3 E5/0.25 | C#6/0.25 C#6/0.25 E5/0.25 A4/0.25 A4/0.25 #Variation_2 E5/0.25 | #Chord_0 A4/0.25 | F#5/0.25 F#5/0.25 A4/0.25 D5/0.25 D5/0.25 A4/0.25 | #Chord_1 G4/0.25 | Eb5/0.25 Eb5/0.25 G4/0.25 C5/0.25 C5/0.25 G4/0.25 | #Chord_2 F#5/0.25 | D6/0.25 D6/0.25 F#5/0.25 B4/0.25 B4/0.25 F#5/0.25 | #Chord_3 E5/0.25 | C#6/0.25 C#6/0.25 E5/0.25 A4/0.25 A4/0.25 #Variation_3 E5/0.25 | #Chord_0 A3/0.25 | F#4/0.25 F#4/0.25 A3/0.25 D5/0.25 D5/0.25 A3/0.25 | #Chord_1 G3/0.25 | Eb4/0.25 Eb4/0.25 G3/0.25 C5/0.25 C5/0.25 G3/0.25 | #Chord_2 F#4/0.25 | D5/0.25 D5/0.25 F#4/0.25 B4/0.25 B4/0.25 F#4/0.25 | #Chord_3 E4/0.25 | C#5/0.25 C#5/0.25 E4/0.25 A4/0.25 A4/0.25 #Variation_4 E4/0.25 | #Chord_0 A3/0.25 | F#4/0.25 F#4/0.25 A3/0.25 D5/0.25 D5/0.25 A3/0.25 | #Chord_1 G3/0.25 | Eb4/0.25 Eb4/0.25 G3/0.25 C5/0.25 C5/0.25 G3/0.25 | #Chord_2 F#4/0.25 | D5/0.25 D5/0.25 F#4/0.25 B4/0.25 B4/0.25 F#4/0.25 | #Chord_3 E4/0.25 | C#5/0.25 C#5/0.25 E4/0.25 A4/0.25 A4/0.25 #Variation_5 E4/0.25 | #Chord_0 A4/0.25 | F#5/0.25 F#5/0.25 A4/0.25 D5/0.25 D5/0.25 A4/0.25 | #Chord_1 G4/0.25 | Eb5/0.25 Eb5/0.25 G4/0.25 C5/0.25 C5/0.25 G4/0.25 | #Chord_2 F#5/0.25 | D6/0.25 D6/0.25 F#5/0.25 B4/0.25 B4/0.25 F#5/0.25 | #Chord_3 E5/0.25 | C#6/0.25 C#6/0.25 E5/0.25 A4/0.25 A4/0.25 E5/0.25 | 2017-07-16 05:36:16.674 1 D writing music xml: JFugue MusicXMLRenderer

So the parsed musicXml result is:

<?xml version="1.0"?>
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 1.1 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
<score-partwise><identification><creator type="software">JFugue MusicXMLRenderer</creator></identification><part-list /></score-partwise>

All my notes are gone. What am I missing?

Thanks in advance.


Solution

  • It's buried too far in JFugue's Download page to be immediately obvious, but: "Please note that there is no current implementation for MusicXmlParserListener. JFugue still needs: a MusicXmlParserListener updated for JFugue 5.0, more thorough tests for MusicXMLParser, ..."

    (I'll work on making that more obvious for others who download the code).

    The MusicXML functionality in JFugue is contributed by volunteers, and there have been some gaps in updating the code for the most recent version of MusicXML and the most recent version of JFugue.