]> git.donarmstrong.com Git - lilypond.git/blobdiff - scripts/musicxml2ly.py
If page-count is set, don't try spacing on fewer pages than specified.
[lilypond.git] / scripts / musicxml2ly.py
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))