]> git.donarmstrong.com Git - lilypond.git/commitdiff
MusicXML: Convert accordion registrations
authorReinhold Kainhofer <reinhold@kainhofer.com>
Fri, 8 Feb 2008 20:28:25 +0000 (21:28 +0100)
committerReinhold Kainhofer <reinhold@kainhofer.com>
Fri, 8 Feb 2008 20:28:25 +0000 (21:28 +0100)
They are converted as \mark\markup{...}, where I need to generate
the markup manually (following the LSR snipplet
 http://lsr.dsi.unimi.it/LSR/Item?id=194 )

input/regression/musicxml/03b-AccordionRegistrations-MusicXML.xml [new file with mode: 0644]
scripts/musicxml2ly.py

diff --git a/input/regression/musicxml/03b-AccordionRegistrations-MusicXML.xml b/input/regression/musicxml/03b-AccordionRegistrations-MusicXML.xml
new file mode 100644 (file)
index 0000000..ad6fa3c
--- /dev/null
@@ -0,0 +1,356 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 2.0 Partwise//EN"\r
+                                "http://www.musicxml.org/dtds/partwise.dtd">\r
+<score-partwise version="2.0">\r
+  <movement-title>Accordion registrations</movement-title>\r
+  <identification/>\r
+  <defaults/>\r
+  <part-list>\r
+    <score-part id="P1">\r
+      <part-name></part-name>\r
+    </score-part>\r
+  </part-list>\r
+  <!--=========================================================-->\r
+  <part id="P1">\r
+    <!-- Direction type can contain the following child types:\r
+         rehearsal+ | segno+ | words+ |\r
+         coda+ | wedge | dynamics+ | dashes | bracket | pedal | \r
+         metronome | octave-shift | harp-pedals | damp | \r
+         damp-all | eyeglasses | scordatura | image |\r
+         accordion-registration | other-direction -->\r
+    <!-- Rehearsal marks -->\r
+    <measure number="1">\r
+      <attributes>\r
+        <divisions>1</divisions>\r
+        <key>\r
+          <fifths>0</fifths>\r
+          <mode>major</mode>\r
+        </key>\r
+        <time symbol="common">\r
+          <beats>4</beats>\r
+          <beat-type>4</beat-type>\r
+        </time>\r
+        <clef>\r
+          <sign>G</sign>\r
+          <line>2</line>\r
+        </clef>\r
+      </attributes>\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-low/>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>0/0/1</text></lyric>\r
+      </note>\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-middle>1</accordion-middle>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>0/1/0</text></lyric>\r
+      </note>\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-middle>1</accordion-middle>\r
+              <accordion-low/>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>0/1/1</text></lyric>\r
+      </note>\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-middle>2</accordion-middle>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>0/2/0</text></lyric>\r
+      </note>\r
+    </measure>\r
+    <measure number="2">\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-middle>2</accordion-middle>\r
+              <accordion-low/>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>0/2/1</text></lyric>\r
+      </note>\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-middle>3</accordion-middle>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>0/3/0</text></lyric>\r
+      </note>\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-middle>3</accordion-middle>\r
+              <accordion-low/>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>0/3/1</text></lyric>\r
+      </note>\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-high/>\r
+              <accordion-low/>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>1/0/1</text></lyric>\r
+      </note>\r
+    </measure>\r
+    <measure number="3">\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-high/>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>1/0/0</text></lyric>\r
+      </note>\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-high/>\r
+              <accordion-middle>1</accordion-middle>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>1/1/0</text></lyric>\r
+      </note>\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-high/>\r
+              <accordion-middle>1</accordion-middle>\r
+              <accordion-low/>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>1/1/1</text></lyric>\r
+      </note>\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-high/>\r
+              <accordion-middle>2</accordion-middle>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>1/2/0</text></lyric>\r
+      </note>\r
+    </measure>\r
+    <measure number="4">\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-high/>\r
+              <accordion-middle>2</accordion-middle>\r
+              <accordion-low/>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>1/2/1</text></lyric>\r
+      </note>\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-high/>\r
+              <accordion-middle>3</accordion-middle>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>1/3/0</text></lyric>\r
+      </note>\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-high/>\r
+              <accordion-middle>3</accordion-middle>\r
+              <accordion-low/>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>1/3/1</text></lyric>\r
+      </note>\r
+      <!-- Special cases: No accordion-(high|middle|low) given, empty middle, \r
+           middle with invalid value, middle with 0 -->\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>empty</text></lyric>\r
+      </note>\r
+    </measure>\r
+    <measure number="5">\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-high/>\r
+              <accordion-middle/>\r
+              <accordion-low/>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>empty M</text></lyric>\r
+      </note>\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-high/>\r
+              <accordion-middle>test</accordion-middle>\r
+              <accordion-low/>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>inval.M</text></lyric>\r
+      </note>\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-high/>\r
+              <accordion-middle>0</accordion-middle>\r
+              <accordion-low/>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>M=0</text></lyric>\r
+      </note>\r
+      <direction>\r
+        <direction-type>\r
+          <accordion-registration>\r
+              <accordion-high/>\r
+              <accordion-middle>5</accordion-middle>\r
+              <accordion-low/>\r
+          </accordion-registration>\r
+        </direction-type>\r
+      </direction>\r
+      <note>\r
+        <pitch><step>C</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>quarter</type>\r
+        <lyric number="1"><text>M=5</text></lyric>\r
+      </note>\r
+      \r
+      <barline location="right">\r
+        <bar-style>light-heavy</bar-style>\r
+      </barline>\r
+    </measure>\r
+    <!--=======================================================-->\r
+  </part>\r
+  <!--=========================================================-->\r
+</score-partwise>\r
index ebad1a51d51f9ed86f4a7940ef167588b2b4f889..b7460dced4994427b94138735407cf8e1e0e5156 100644 (file)
@@ -946,7 +946,7 @@ def musicxml_dynamics_to_lily_event (dynentry):
         dynamicstext = dynamicsname
         dynamicsname = string.replace (dynamicsname, "-", "")
         additional_definitions[dynamicsname] = dynamicsname + \
-              "=#(make-dynamic-script \"" + dynamicstext + "\")"
+              " = #(make-dynamic-script \"" + dynamicstext + "\")"
         needed_additional_definitions.append (dynamicsname)
     event = musicexp.DynamicsEvent ()
     event.type = dynamicsname
@@ -1026,6 +1026,69 @@ def musicxml_words_to_lily_event (words):
     return event
 
 
+# convert accordion-registration to lilypond.
+# Since lilypond does not have any built-in commands, we need to create
+# the markup commands manually and define our own variables.
+# Idea was taken from: http://lsr.dsi.unimi.it/LSR/Item?id=194
+def musicxml_accordion_to_markup (mxl_event):
+    commandname = "accReg"
+    command = ""
+
+    high = mxl_event.get_maybe_exist_named_child ('accordion-high')
+    if high:
+        commandname += "H"
+        command += """\\combine
+          \\raise #2.5 \\musicglyph #\"accordion.accDot\"
+          """
+    middle = mxl_event.get_maybe_exist_named_child ('accordion-middle')
+    if middle:
+        txt = 1
+        try:
+          txt = string.atoi (middle.get_text ())
+        except ValueError:
+            pass
+        if txt == 3:
+            commandname += "MMM"
+            command += """\\combine
+          \\raise #1.5 \\musicglyph #\"accordion.accDot\"
+          \\combine
+          \\raise #1.5 \\translate #(cons 1 0) \\musicglyph #\"accordion.accDot\"
+          \\combine
+          \\raise #1.5 \\translate #(cons -1 0) \\musicglyph #\"accordion.accDot\"
+          """
+        elif txt == 2:
+            commandname += "MM"
+            command += """\\combine
+          \\raise #1.5 \\translate #(cons 0.5 0) \\musicglyph #\"accordion.accDot\"
+          \\combine
+          \\raise #1.5 \\translate #(cons -0.5 0) \\musicglyph #\"accordion.accDot\"
+          """
+        elif not txt <= 0:
+            commandname += "M"
+            command += """\\combine
+          \\raise #1.5 \\musicglyph #\"accordion.accDot\"
+          """
+    low = mxl_event.get_maybe_exist_named_child ('accordion-low')
+    if low:
+        commandname += "L"
+        command += """\\combine
+          \\raise #0.5 \musicglyph #\"accordion.accDot\"
+          """
+
+    command += "\musicglyph #\"accordion.accDiscant\""
+    command = "\\markup { \\normalsize %s }" % command
+    additional_definitions[commandname] = "%s = %s" % (commandname, command)
+    print additional_definitions
+    needed_additional_definitions.append (commandname)
+    return "\\%s" % commandname
+
+def musicxml_accordion_to_ly (mxl_event):
+    txt = musicxml_accordion_to_markup (mxl_event)
+    if txt:
+        ev = musicexp.MarkEvent (txt)
+        return ev
+    return
+
 
 def musicxml_rehearsal_to_ly_mark (mxl_event):
     text = mxl_event.get_text ()
@@ -1040,13 +1103,12 @@ def musicxml_rehearsal_to_ly_mark (mxl_event):
     ev = musicexp.MarkEvent ("\\markup { %s }" % text)
     return ev
 
-
 # translate directions into Events, possible values:
 #   -) string  (MarkEvent with that command)
 #   -) function (function(mxl_event) needs to return a full Event-derived object
 #   -) (class, name)  (like string, only that a different class than MarkEvent is used)
 directions_dict = {
-    'accordion-registration' : musicxml_accordion_to_ly,
+    'accordion-registration' : musicxml_accordion_to_ly,
     'coda' : (musicexp.MusicGlyphMarkEvent, "coda"),
 #     'damp' : ???
 #     'damp-all' : ???