def get_duration (self):
note_events = [e for e in self.elements if
- isinstance (e, NoteEvent)]
+ isinstance (e, NoteEvent) or isinstance (e, RestEvent)]
if note_events:
return note_events[0].duration
else:
else:
return ''
-class ChordRoot:
+class ChordPitch:
def __init__ (self):
self.alteration = 0
self.step = 0
def ly_expression (self):
return pitch_generating_function (self)
+class ChordModification:
+ def __init__ (self):
+ self.alteration = 0
+ self.step = 0
+ self.type = 0
+ def ly_expression (self):
+ if self.type:
+ val = {1: ".", -1: "^" }.get (self.type, "")
+ val += "%s" % self.step
+ val += {1: "+", -1: "-"}.get (self.alteration, "")
+ return val
+ else:
+ return ''
+
class ChordNameEvent (Event):
def __init__ (self):
Event.__init__ (self)
self.root = None
self.kind = None
self.duration = None
+ self.modifications = []
+ self.bass = None
+ def add_modification (self, mod):
+ self.modifications.append (mod)
def ly_expression (self):
if not self.root:
return ''
if self.kind:
value += ":"
value += self.kind
+ # First print all additions/changes, and only afterwards all subtractions
+ for m in self.modifications:
+ if m.type == 1:
+ value += m.ly_expression ()
+ for m in self.modifications:
+ if m.type == -1:
+ value += m.ly_expression ()
+ if self.bass:
+ value += "/+%s" % self.bass.ly_expression ()
return value
return res
if self.beats:
if self.parentheses:
- dm = self.duration_to_markup (self.baseduration)
- contents = "\"(\" %s = %s \")\"" % (dm, self.beats)
- res += self.tempo_markup_template() % contents
+ res += "\\tempo \"\" %s=%s" % (self.baseduration.ly_expression(), self.beats)
else:
res += "\\tempo %s=%s" % (self.baseduration.ly_expression(), self.beats)
elif self.newduration:
sub_staff_type = self.stafftype
for [staff_id, voices] in self.part_information:
+ # Chord names need to come before the staff itself!
+ for [v, lyrics, figuredbass, chordnames] in voices:
+ if chordnames:
+ printer ('\context ChordNames = "%s" \\%s' % (chordnames, chordnames))
+
+ # now comes the real staff definition:
if staff_id:
printer ('\\context %s = "%s" << ' % (sub_staff_type, staff_id))
else:
nr_voices = len (voices)
for [v, lyrics, figuredbass, chordnames] in voices:
n += 1
- if chordnames:
- printer ('\context ChordNames = "%s" \\%s' % (chordnames, chordnames))
voice_count_text = ''
if nr_voices > 1:
voice_count_text = {1: ' \\voiceOne', 2: ' \\voiceTwo',