package org.jfugue.examples;

import org.jfugue.MusicStringParser;
import org.jfugue.MusicStringRenderer;
import org.jfugue.MusicXmlParser;
import org.jfugue.MusicXmlRenderer;
import org.jfugue.Pattern;

public class MusicXmlExamples
{
    private void writeMusicXML()
    {
        // Write the first few notes of "Fuer Elise" to MusicXML
        Pattern pattern = new Pattern("V0 E5s D#5s | E5s D#5s E5s B4s D5s C5s | A4i ");
        
        MusicStringParser parser = new MusicStringParser();
        MusicXmlRenderer renderer = new MusicXmlRenderer();
        parser.addParserListener(renderer);
        parser.parse(pattern);
        System.out.println(renderer.getMusicXMLString());
    }
    
    private void readMusicXML()
    {
        // Take a MusicXML rendering of the first few notes of "Fuer Elise" and convert to a MusicString
        String musicXmlString = 
            "<?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-part id=\"V0\"><part-name /></score-part></part-list><part id=\"V0\"><measure number=\"1\"><attributes><divisions>4</divisions><time><beats>4</beats><beat-type>4</beat-type></time><clef><sign>G</sign><line>2</line></clef><key><fifths>0</fifths><mode>major</mode></key></attributes><direction placement=\"above\"><direction-type><metronome><beat-unit>quarter</beat-unit><per-minute>120</per-minute></metronome></direction-type></direction><note><pitch><step>E</step><octave>5</octave></pitch><duration>1</duration><type>16th</type></note><note><pitch><step>E</step><alter>-1</alter><octave>5</octave></pitch><duration>1</duration><type>16th</type></note></measure><measure number=\"2\"><note><pitch><step>E</step><octave>5</octave></pitch><duration>1</duration><type>16th</type></note><note><pitch><step>E</step><alter>-1</alter><octave>5</octave></pitch><duration>1</duration><type>16th</type></note><note><pitch><step>E</step><octave>5</octave></pitch><duration>1</duration><type>16th</type></note><note><pitch><step>B</step><octave>4</octave></pitch><duration>1</duration><type>16th</type></note><note><pitch><step>D</step><octave>5</octave></pitch><duration>1</duration><type>16th</type></note><note><pitch><step>C</step><octave>5</octave></pitch><duration>1</duration><type>16th</type></note></measure><measure number=\"3\"><note><pitch><step>A</step><octave>4</octave></pitch><duration>2</duration><type>eighth</type></note></measure></part></score-partwise>";
        
        MusicXmlParser parser = new MusicXmlParser();
        MusicStringRenderer renderer = new MusicStringRenderer();
        parser.addParserListener(renderer);
        parser.parse(musicXmlString);
        System.out.println(renderer.getPattern());
    }
    
    public static void main(String[] args)
    {
        MusicXmlExamples examples = new MusicXmlExamples();
        examples.writeMusicXML();
        System.out.println("----------------------");
        examples.readMusicXML();
    }
}
