return retval.values ()
+# Brackets need a special engraver added the Staff context!
+def musicxml_bracket_to_ly ():
+ layout_information.set_context_item ('Staff', '\consists "Horizontal_bracket_engraver" % for \\startGroup and \\stopGroup brackets')
+ return musicexp.BracketSpannerEvent ()
+
spanner_event_dict = {
'beam' : musicexp.BeamEvent,
'dashes' : musicexp.TextSpannerEvent,
- 'bracket' : musicexp.BracketSpannerEvent,
+ 'bracket' : musicxml_bracket_to_ly,
'glissando' : musicexp.GlissandoEvent,
'octave-shift' : musicexp.OctaveShiftEvent,
'pedal' : musicexp.PedalEvent,
else:
duration_factor = Rational (diff.numerator ())
else:
+ # for skips of a whole or more, simply use s1*factor
duration_log = 0
duration_factor = diff
skip.duration.duration_log = duration_log
inside_slur = False
is_tied = False
is_chord = False
+ is_beamed = False
ignore_lyrics = False
current_staff = None
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
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')
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)
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))