# This file is part of LilyPond, the GNU music typesetter.
#
-# Copyright (C) 1998--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
+# Copyright (C) 1998--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
# Jan Nieuwenhuizen <janneke@gnu.org>
#
# LilyPond is free software: you can redistribute it and/or modify
@relocate-preamble@
"""
-import midi
import lilylib as ly
global _;_=ly._
%s
%s
-''' % ( _ ('Copyright (c) %s by') % '1998--2011',
+''' % ( _ ('Copyright (c) %s by') % '1998--2015',
'\n '.join (authors),
_ ('Distributed under terms of the GNU General Public License.'),
_ ('It comes with NO WARRANTY.')))
elif commas < 0:
s = s + "," * -commas
- if ((dump_dur
- and self.duration.compare (reference_note.duration))
- or global_options.explicit_durations):
+ if (dump_dur
+ and (self.duration.compare (reference_note.duration)
+ or global_options.explicit_durations)):
s = s + self.duration.dump ()
+ # Chords need to handle their reference duration themselves
+
reference_note = self
# TODO: move space
'INSTRUMENT_NAME',
'LYRIC',
'MARKER',
- 'CUE_POINT',)
+ 'CUE_POINT',
+ 'PROGRAM_NAME',
+ 'DEVICE_NAME', )
+
+ @staticmethod
+ def _text_only(chr):
+ if ((' ' <= chr <= '~') or chr in ['\n','\r']):
+ return chr
+ else:
+ return '~'
def __init__ (self, type, text):
self.clocks = 0
self.type = type
- self.text = text
+ self.text =''.join(map(self._text_only, text))
def dump (self):
# urg, we should be sure that we're in a lyrics staff
s = s + dump (notes[0])
elif len (notes) > 1:
global reference_note
+ reference_dur = reference_note.duration
s = s + '<'
s = s + notes[0].dump (dump_dur=False)
r = reference_note
for i in notes[1:]:
s = s + i.dump (dump_dur=False)
s = s + '>'
- s = s + notes[0].duration.dump () + ' '
+ if (r.duration.compare (reference_dur)
+ or global_options.explicit_durations):
+ s = s + r.duration.dump ()
+ s = s + ' '
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:
+ if not global_options.quiet:
+ warning (_ ('found more than 5 voices on a staff, expect bad output'))
s += ' ' + dump_voice (voice, skip)
s += '}\n\n'
v += 1
return dump_track (self.voices, i)
def convert_midi (in_file, out_file):
+ global midi
+ import midi
+
global clocks_per_1, clocks_per_4, key
global start_quant_clocks
global duration_quant_clocks
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:
}
'''
- progress (_ ("%s output to `%s'...") % ('LY', out_file))
+ if not global_options.quiet:
+ progress (_ ("%s output to `%s'...") % ('LY', out_file))
if out_file == '-':
handle = sys.stdout
metavar=_ ('DUR'),
help=_ ('quantise note durations on DUR'))
p.add_option ('-D', '--debug',
- action='store_true',
- help=_ ('debug printing'))
+ action='store_true',
+ help=_ ('debug printing'))
p.add_option ('-e', '--explicit-durations',
action='store_true',
help=_ ('print explicit durations'))
p.add_option('-h', '--help',
- action='help',
- help=_ ('show this help and exit'))
+ action='help',
+ help=_ ('show this help and exit'))
p.add_option('-i', '--include-header',
- help=_ ('prepend FILE to output'),
- action='append',
- default=[],
- metavar=_ ('FILE'))
+ help=_ ('prepend FILE to output'),
+ action='append',
+ default=[],
+ metavar=_ ('FILE'))
p.add_option('-k', '--key', help=_ ('set key: ALT=+sharps|-flats; MINOR=1'),
- metavar=_ ('ALT[:MINOR]'),
- default=None),
+ metavar=_ ('ALT[:MINOR]'),
+ default=None),
p.add_option ('-o', '--output', help=_ ('write output to FILE'),
metavar=_ ('FILE'),
action='store')
p.add_option ('-p', '--preview', help=_ ('preview of first 4 bars'),
action='store_true')
+ p.add_option ('-q', '--quiet',
+ action="store_true",
+ help=_ ("suppress progress messages and warnings about excess voices"))
p.add_option ('-s', '--start-quant',help= _ ('quantise note starts on DUR'),
metavar=_ ('DUR'))
p.add_option ('-S', '--skip',
help=_ ('allow tuplet durations DUR*NUM/DEN'),
default=[])
p.add_option ('-V', '--verbose', help=_ ('be verbose'),
- action='store_true'
- ),
+ action='store_true')
p.version = 'midi2ly (LilyPond) @TOPLEVEL_VERSION@'
p.add_option ('--version',
action='version',
help=_ ('show version number and exit'))
p.add_option ('-w', '--warranty', help=_ ('show warranty and copyright'),
- action='store_true',
- ),
+ action='store_true',)
p.add_option ('-x', '--text-lyrics', help=_ ('treat every text as a lyric'),
action='store_true')