X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scripts%2Fmidi2ly.py;h=9c490a5f2caf95bd737fee5046878054f69ab364;hb=HEAD;hp=3a434193b083130344aa0c2f321600b0e79a000b;hpb=d61cf3bbdb1c6670a127ba3baddf2f04d3e34fd3;p=lilypond.git diff --git a/scripts/midi2ly.py b/scripts/midi2ly.py index 3a434193b0..9c490a5f2c 100644 --- a/scripts/midi2ly.py +++ b/scripts/midi2ly.py @@ -4,7 +4,7 @@ # This file is part of LilyPond, the GNU music typesetter. # -# Copyright (C) 1998--2012 Han-Wen Nienhuys +# Copyright (C) 1998--2015 Han-Wen Nienhuys # Jan Nieuwenhuizen # # LilyPond is free software: you can redistribute it and/or modify @@ -32,7 +32,6 @@ import sys @relocate-preamble@ """ -import midi import lilylib as ly global _;_=ly._ @@ -78,7 +77,7 @@ def warranty (): %s %s -''' % ( _ ('Copyright (c) %s by') % '1998--2012', +''' % ( _ ('Copyright (c) %s by') % '1998--2015', '\n '.join (authors), _ ('Distributed under terms of the GNU General Public License.'), _ ('It comes with NO WARRANTY.'))) @@ -268,11 +267,13 @@ class Note: 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 @@ -381,12 +382,21 @@ class Text: '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 @@ -654,13 +664,17 @@ def dump_chord (ch): 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 @@ -831,7 +845,8 @@ def dump_track (track, n): if vl: s += ' \\voice' + vl + '\n' else: - warning (_ ('found more than 5 voices on a staff, expect bad output')) + 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 @@ -922,6 +937,9 @@ class Staff: 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 @@ -1027,7 +1045,8 @@ def convert_midi (in_file, out_file): } ''' - 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 @@ -1050,27 +1069,30 @@ def get_option_parser (): 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', @@ -1083,15 +1105,13 @@ def get_option_parser (): 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')