X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scripts%2Fmidi2ly.py;h=e8244decf5da73a77a38e5630ab208dcd963fd88;hb=c6d314f038629a7054e72b6212bd5b8b7bba2d2c;hp=ea47e1583576a86262b90ee803a8d5eff974fef7;hpb=fceacfbaa44cdf0eafcfbcce0ea97ebf5d823c4e;p=lilypond.git diff --git a/scripts/midi2ly.py b/scripts/midi2ly.py index ea47e15835..e8244decf5 100644 --- a/scripts/midi2ly.py +++ b/scripts/midi2ly.py @@ -4,8 +4,8 @@ # # source file of the GNU LilyPond music typesetter # -# convert MIDI to LilyPond source -# +# (c) 1998--2004 Han-Wen Nienhuys +# Jan Nieuwenhuizen ''' @@ -31,17 +31,13 @@ import sys ################################################################ # Users of python modules should include this snippet. # -# If set, LILYPONDPREFIX must take prevalence -# if datadir is not set, we're doing a build and LILYPONDPREFIX -datadir = '@local_lilypond_datadir@' -if not os.path.isdir (datadir): - datadir = '@lilypond_datadir@' -if os.environ.has_key ('LILYPONDPREFIX') : - datadir = os.environ['LILYPONDPREFIX'] - while datadir[-1] == os.sep: - datadir= datadir[:-1] - -sys.path.insert (0, os.path.join (datadir, 'python')) +# This soon to be removed for: import lilypond.lilylib as ly +libdir = '@local_lilypond_libdir@' +if not os.path.isdir (libdir): + libdir = '@lilypond_libdir@' +sys.path.insert (0, os.path.join (libdir, 'python')) + + ################################################################ import midi @@ -84,7 +80,7 @@ except: def _ (s): return s -program_name = 'midi2ly' +program_name = sys.argv[0] program_version = '@TOPLEVEL_VERSION@' errorport = sys.stderr @@ -95,18 +91,18 @@ verbose_p = 0 # keep_temp_dir_p = 0 -help_summary = _ ("Convert MIDI to LilyPond source") +help_summary = _ ("Convert MIDI to LilyPond source.") option_definitions = [ ('', 'a', 'absolute-pitches', _ ("print absolute pitches")), (_ ("DUR"), 'd', 'duration-quant', _ ("quantise note durations on DUR")), ('', 'e', 'explicit-durations', _ ("print explicit durations")), - ('', 'h', 'help', _ ("this help")), + ('', 'h', 'help', _ ("print this help")), (_ ("ALT[:MINOR]"), 'k', 'key', _ ("set key: ALT=+sharps|-flats; MINOR=1")), - (_ ("FILE"), 'o', 'output', _ ("write ouput to FILE")), + (_ ("FILE"), 'o', 'output', _ ("write output to FILE")), (_ ("DUR"), 's', 'start-quant', _ ("quantise note starts on DUR")), (_ ("DUR*NUM/DEN"), 't', 'allow-tuplet', _ ("allow tuplet durations DUR*NUM/DEN")), - ('', 'V', 'verbose', _ ("verbose")), + ('', 'V', 'verbose', _ ("be verbose")), ('', 'v', 'version', _ ("print version number")), ('', 'w', 'warranty', _ ("show warranty and copyright")), ('', 'x', 'text-lyrics', _ ("treat every text as a lyric")), @@ -137,14 +133,13 @@ def identify (): def warranty (): identify () sys.stdout.write ('\n') - sys.stdout.write (_ ('Copyright (c) %s by' % ' 2001--2002')) + sys.stdout.write (_ ('Copyright (c) %s by') % ' 2001--2004') sys.stdout.write ('\n') sys.stdout.write (' Han-Wen Nienhuys') sys.stdout.write (' Jan Nieuwenhuizen') - sys.stdout.write ('\n') - sys.stdout.write (_ (r''' -Distributed under terms of the GNU General Public License. It comes with -NO WARRANTY.''')) + sys.stdout.write ('\n\n') + sys.stdout.write (_ ("Distributed under terms of the GNU General Public License.")) + sys.stdout.write (_ ("It comes with NO WARRANTY.")) sys.stdout.write ('\n') def progress (s): @@ -191,9 +186,9 @@ def option_help_str (o): if o[1]: sh = '-%s' % o[1] - sep = ' ' + sep = ' ' if o[1] and o[2]: - sep = ',' + sep = ', ' long = '' if o[2]: @@ -225,7 +220,7 @@ def options_help_str (opts): return str def help (): - ls = [(_ ("Usage: %s [OPTION]... FILE") % program_name), + ls = [(_ ("Usage: %s [OPTIONS]... FILE") % program_name), ('\n\n'), (help_summary), ('\n\n'), @@ -233,7 +228,7 @@ def help (): ('\n'), (options_help_str (option_definitions)), ('\n\n'), - (_ ("Report bugs to %s") % 'bug-lilypond@gnu.org'), + (_ ("Report bugs to %s.") % 'bug-lilypond@gnu.org'), ('\n')] map (sys.stdout.write, ls) @@ -429,7 +424,8 @@ class Note: return (o, n, a) - def dump (self): + def dump (self, dump_dur = 1): + global reference_note s = chr ((self.notename + 2) % 7 + ord ('a')) s = s + self.alteration_names[self.alteration + 2] if absolute_p: @@ -449,11 +445,12 @@ class Note: elif commas < 0: s = s + "," * -commas - if explicit_durations_p \ - or Duration.compare (self.duration, reference_note.duration): + ## FIXME: compile fix --jcn + if dump_dur and (explicit_durations_p \ + or Duration.compare (self.duration, + reference_note.duration)): s = s + self.duration.dump () - global reference_note reference_note = self # TODO: move space @@ -788,11 +785,13 @@ def dump_chord (ch): elif len (notes) > 1: global reference_note s = s + '<' - s = s + notes[0].dump () + s = s + notes[0].dump (dump_dur = 0) r = reference_note for i in notes[1:]: - s = s + i.dump () + s = s + i.dump (dump_dur = 0 ) s = s + '>' + + s = s + notes[0].duration.dump() + ' ' reference_note = r return s @@ -906,7 +905,7 @@ def dump_track (channels, n): s = s + ' ' + dump_channel (channels[i][0], skip) s = s + '}\n\n' - s = s + '%s = <\n' % track + s = s + '%s = <<\n' % track if clef.type != 2: s = s + clef.dump () + '\n' @@ -920,7 +919,7 @@ def dump_track (channels, n): else: s = s + ' \\context Voice = %s \\%s\n' % (channel, track + channel) - s = s + '>\n\n' + s = s + '>>\n\n' return s def thread_first_item (thread): @@ -989,7 +988,7 @@ def convert_midi (f, o): for i in range (len (tracks)): s = s + dump_track (tracks[i], i) - s = s + '\n\\score {\n <\n' + s = s + '\n\\score {\n <<\n' for i in range (len (tracks)): track = track_name (i) item = track_first_item (tracks[i]) @@ -997,7 +996,7 @@ def convert_midi (f, o): s = s + ' \\context Staff=%s \\%s\n' % (track, track) elif item and item.__class__ == Text: s = s + ' \\context Lyrics=%s \\%s\n' % (track, track) - s = s + ' >\n}\n' + s = s + ' >>\n}\n' progress (_ ("%s output to `%s'...") % ('LY', o)) @@ -1051,13 +1050,10 @@ for opt in options: elif o == '--absolute-pitches' or o == '-a': - global absolute_p absolute_p = 1 elif o == '--duration-quant' or o == '-d': - global duration_quant duration_quant = string.atoi (a) elif o == '--explicit-durations' or o == '-e': - global explicit_durations_p explicit_durations_p = 1 elif o == '--key' or o == '-k': (alterations, minor) = map (string.atoi, string.split (a + ':0', ':'))[0:2] @@ -1067,7 +1063,6 @@ for opt in options: sharps = alterations else: flats = - alterations - global key key = Key (sharps, flats, minor) elif o == '--start-quant' or o == '-s': start_quant = string.atoi (a)