]> git.donarmstrong.com Git - lilypond.git/commitdiff
MusicXML: Ignore lyrics on beamed notes (melismata)
authorReinhold Kainhofer <reinhold@kainhofer.com>
Sat, 23 Feb 2008 17:53:49 +0000 (18:53 +0100)
committerReinhold Kainhofer <reinhold@kainhofer.com>
Sat, 23 Feb 2008 17:53:49 +0000 (18:53 +0100)
input/regression/musicxml/06h-Lyrics-BeamsMelismata.xml [new file with mode: 0644]
scripts/musicxml2ly.py

diff --git a/input/regression/musicxml/06h-Lyrics-BeamsMelismata.xml b/input/regression/musicxml/06h-Lyrics-BeamsMelismata.xml
new file mode 100644 (file)
index 0000000..419c60d
--- /dev/null
@@ -0,0 +1,303 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 1.1 Partwise//EN"\r
+                                "http://www.musicxml.org/dtds/partwise.dtd">\r
+<score-partwise version="1.1">\r
+  <movement-title>Lyrics and melismata</movement-title>\r
+  <identification/>\r
+  <defaults/>\r
+  <credit/>\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
+    <measure number="1">\r
+      <attributes>\r
+        <divisions>2</divisions>\r
+      </attributes>\r
+      <note>\r
+        <pitch><step>C</step><octave>5</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <beam number="1">begin</beam>\r
+        <lyric number="1">\r
+          <syllabic>begin</syllabic>\r
+          <text>Me</text>\r
+        </lyric>\r
+      </note>\r
+      <note>\r
+        <pitch><step>A</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <beam number="1">continue</beam>\r
+      </note>\r
+      <note>\r
+        <pitch><step>C</step><octave>5</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <beam number="1">end</beam>\r
+      </note>\r
+      <note>\r
+        <pitch><step>A</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <lyric number="1">\r
+          <syllabic>middle</syllabic>\r
+          <text>lis</text>\r
+        </lyric>\r
+      </note>\r
+      <note>\r
+        <pitch><step>C</step><octave>5</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <beam number="1">begin</beam>\r
+        <lyric number="1">\r
+          <syllabic>end</syllabic>\r
+          <text>ma</text>\r
+          <extend/>\r
+        </lyric>\r
+      </note>\r
+      <note>\r
+        <pitch><step>G</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <beam number="1">continue</beam>\r
+      </note>\r
+      <note>\r
+        <pitch><step>B</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <beam number="1">end</beam>\r
+      </note>\r
+      <note>\r
+        <rest/>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+      </note>\r
+    </measure>\r
+    <!--=======================================================-->\r
+    <measure number="2">\r
+      <note>\r
+        <pitch><step>C</step><octave>5</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <lyric number="1">\r
+          <syllabic>begin</syllabic>\r
+          <text>Me</text>\r
+        </lyric>\r
+      </note>\r
+      <note>\r
+        <pitch><step>A</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+      </note>\r
+      <note>\r
+        <pitch><step>C</step><octave>5</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+      </note>\r
+      <note>\r
+        <pitch><step>A</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <lyric number="1">\r
+          <syllabic>middle</syllabic>\r
+          <text>lis</text>\r
+        </lyric>\r
+      </note>\r
+      <note>\r
+        <pitch><step>C</step><octave>5</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <lyric number="1">\r
+          <syllabic>end</syllabic>\r
+          <text>ma</text>\r
+          <extend/>\r
+        </lyric>\r
+      </note>\r
+      <note>\r
+        <pitch><step>G</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+      </note>\r
+      <note>\r
+        <pitch><step>B</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+      </note>\r
+      <note>\r
+        <rest/>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+      </note>\r
+    </measure>\r
+    <!--=======================================================-->\r
+    <measure number="3">\r
+      <note>\r
+        <pitch><step>C</step><octave>5</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <notations>\r
+          <slur number="1" type="start"/>\r
+        </notations>\r
+        <lyric number="1">\r
+          <syllabic>begin</syllabic>\r
+          <text>Me</text>\r
+        </lyric>\r
+      </note>\r
+      <note>\r
+        <pitch><step>A</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+      </note>\r
+      <note>\r
+        <pitch><step>C</step><octave>5</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <notations>\r
+          <slur number="1" type="stop"/>\r
+        </notations>\r
+      </note>\r
+      <note>\r
+        <pitch><step>A</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <lyric number="1">\r
+          <syllabic>middle</syllabic>\r
+          <text>lis</text>\r
+        </lyric>\r
+      </note>\r
+      <note>\r
+        <pitch><step>C</step><octave>5</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <notations>\r
+          <slur number="1" type="start"/>\r
+        </notations>\r
+        <lyric number="1">\r
+          <syllabic>end</syllabic>\r
+          <text>ma</text>\r
+          <extend/>\r
+        </lyric>\r
+      </note>\r
+      <note>\r
+        <pitch><step>G</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+      </note>\r
+      <note>\r
+        <pitch><step>B</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <notations>\r
+          <slur number="1" type="stop"/>\r
+        </notations>\r
+      </note>\r
+      <note>\r
+        <rest/>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+      </note>\r
+    </measure>\r
+    <!--=======================================================-->\r
+    <measure number="4">\r
+      <note>\r
+        <pitch><step>C</step><octave>5</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <notations>\r
+          <slur number="1" type="start"/>\r
+        </notations>\r
+        <lyric number="1">\r
+          <syllabic>begin</syllabic>\r
+          <text>Me</text>\r
+        </lyric>\r
+      </note>\r
+      <note>\r
+        <pitch><step>A</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+      </note>\r
+      <note>\r
+        <pitch><step>C</step><octave>5</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+      </note>\r
+      <note>\r
+        <pitch><step>A</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <lyric number="1">\r
+          <syllabic>middle</syllabic>\r
+          <text>lis</text>\r
+        </lyric>\r
+      </note>\r
+      <note>\r
+        <pitch><step>C</step><octave>5</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <lyric number="1">\r
+          <syllabic>end</syllabic>\r
+          <text>ma</text>\r
+          <extend/>\r
+        </lyric>\r
+      </note>\r
+      <note>\r
+        <pitch><step>G</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+      </note>\r
+      <note>\r
+        <pitch><step>B</step><octave>4</octave></pitch>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+        <notations>\r
+          <slur number="1" type="stop"/>\r
+        </notations>\r
+      </note>\r
+      <note>\r
+        <rest/>\r
+        <duration>1</duration>\r
+        <voice>1</voice>\r
+        <type>eighth</type>\r
+      </note>\r
+      <barline location="right">\r
+        <bar-style>light-heavy</bar-style>\r
+      </barline>\r
+    </measure>\r
+  </part>\r
+  <!--=========================================================-->\r
+</score-partwise>\r
index 3c62f4600d24d5afa6616f47e05fc3d637bc08c6..e594aa7d47bbd6dbfdaacff8b7047c9bef0c0fe9 100644 (file)
@@ -1454,6 +1454,7 @@ def musicxml_voice_to_lily_voice (voice):
     inside_slur = False
     is_tied = False
     is_chord = False
+    is_beamed = False
     ignore_lyrics = False
 
     current_staff = None
@@ -1551,7 +1552,8 @@ def musicxml_voice_to_lily_voice (voice):
         main_event = musicxml_note_to_lily_main_event (n)
         if main_event and not first_pitch:
             first_pitch = main_event.pitch
-        ignore_lyrics = inside_slur or is_tied or is_chord
+        # ignore lyrics for notes inside a slur, tie, chord or beam
+        ignore_lyrics = inside_slur or is_tied or is_chord or is_beamed
 
         if main_event and hasattr (main_event, 'drum_type') and main_event.drum_type:
             modes_found['drummode'] = True
@@ -1683,22 +1685,6 @@ def musicxml_voice_to_lily_voice (voice):
                     if ev:
                         ev_chord.append (ev)
 
-        # Extract the lyrics
-        if not rest and not ignore_lyrics:
-            note_lyrics_processed = []
-            note_lyrics_elements = n.get_typed_children (musicxml.Lyric)
-            for l in note_lyrics_elements:
-                if l.get_number () < 0:
-                    for k in lyrics.keys ():
-                        lyrics[k].append (l.lyric_to_text ())
-                        note_lyrics_processed.append (k)
-                else:
-                    lyrics[l.number].append(l.lyric_to_text ())
-                    note_lyrics_processed.append (l.number)
-            for lnr in lyrics.keys ():
-                if not lnr in note_lyrics_processed:
-                    lyrics[lnr].append ("\skip4")
-
 
         mxl_beams = [b for b in n.get_named_children ('beam')
                      if (b.get_type () in ('begin', 'end')
@@ -1707,6 +1693,10 @@ def musicxml_voice_to_lily_voice (voice):
             beam_ev = musicxml_spanner_to_lily_event (mxl_beams[0])
             if beam_ev:
                 ev_chord.append (beam_ev)
+                if beam_ev.span_direction == -1: # beam and thus melisma starts here
+                    is_beamed = True
+                elif beam_ev.span_direction == 1: # beam and thus melisma ends here
+                    is_beamed = False
             
         if tuplet_event:
             mod = n.get_maybe_exist_typed_child (musicxml.Time_modification)
@@ -1716,6 +1706,22 @@ def musicxml_voice_to_lily_voice (voice):
                 
             tuplet_events.append ((ev_chord, tuplet_event, frac))
 
+        # Extract the lyrics
+        if not rest and not ignore_lyrics:
+            note_lyrics_processed = []
+            note_lyrics_elements = n.get_typed_children (musicxml.Lyric)
+            for l in note_lyrics_elements:
+                if l.get_number () < 0:
+                    for k in lyrics.keys ():
+                        lyrics[k].append (l.lyric_to_text ())
+                        note_lyrics_processed.append (k)
+                else:
+                    lyrics[l.number].append(l.lyric_to_text ())
+                    note_lyrics_processed.append (l.number)
+            for lnr in lyrics.keys ():
+                if not lnr in note_lyrics_processed:
+                    lyrics[lnr].append ("\skip4")
+
     ## force trailing mm rests to be written out.   
     voice_builder.add_music (musicexp.ChordEvent (), Rational (0))