allowed_durs = (1, 2, 4, 8, 16, 32, 64, 128)
def __init__ (self, clocks):
self.clocks = clocks
- if clocks <= 0:
- self.clocks = duration_quant_clocks
(self.dur, self.num, self.den) = self.dur_num_den (clocks)
def dur_num_den (self, clocks):
s = '%d*%d/%d' % (self.dur, self.num, self.den)
global reference_note
- if reference_note: # debugging
- reference_note.duration = self
+ reference_note.duration = self
return s
s = s + ' '
elif (self.text.strip ()
and self.type == midi.SEQUENCE_TRACK_NAME
- and not self.text == 'control track'):
+ and not self.text == 'control track'
+ and not self.track.lyrics_p_):
text = self.text.replace ('(MIDI)', '').strip ()
if text:
s = '\n \\set Staff.instrumentName = "%(text)s"\n ' % locals ()
global_options.key = k
elif (e[1][1] == midi.LYRIC
- or (global_options.text_lyrics and e[1][1] == midi.TEXT_EVENT)):
+ or (global_options.text_lyrics
+ and e[1][1] == midi.TEXT_EVENT)):
+ self.lyrics_p_ = True
if last_lyric:
last_lyric.clocks = t - last_time
music.append ((last_time, last_lyric))
elif (e[1][1] >= midi.SEQUENCE_NUMBER
and e[1][1] <= midi.CUE_POINT):
text = Text (e[1][1], e[1][2])
+ text.track = self
music.append ((t, text))
if (text.type == midi.SEQUENCE_TRACK_NAME):
self.name = text.text
Channel.__init__ (self, None)
self.name = None
self.channels = {}
+ self.lyrics_p_ = False
def _add (self, event):
self.events.append (event)
def add (self, event, channel=None):
for i in notes[1:]:
s = s + i.dump (dump_dur=False)
s = s + '>'
-
s = s + notes[0].duration.dump () + ' '
reference_note = r
return s
if not n and not vv and global_options.key:
s += global_options.key.dump ()
if average_pitch[vv+1] and voices > 1:
- s += ' \\voice' + get_voice_layout (average_pitch[1:])[vv] + '\n'
+ vl = get_voice_layout (average_pitch[1:])[vv]
+ if vl:
+ s += ' \\voice' + vl + '\n'
+ else:
+ warning (_ ('found more than 5 voices on a staff, expect bad output'))
s += ' ' + dump_voice (voice, skip)
s += '}\n\n'
v += 1
s = tag
s += r'''
-\version "2.13.53"
+\version "2.14.0"
'''
s += r'''
s += '\n\\score {\n <<\n'
+ control_track = False
i = 0
for i, staff in enumerate (staves):
track_name = get_track_name (i)
staff_name = track_name
context = None
if not i and not item and len (staves) > 1:
- # control track
- staff_name = get_track_name (1)
- context = 'Staff'
+ control_track = track_name
+ continue
elif (item and item.__class__ == Note):
context = 'Staff'
+ if control_track:
+ s += ' \\context %(context)s=%(staff_name)s \\%(control_track)s\n' % locals ()
elif item and item.__class__ == Text:
context = 'Lyrics'
if context: