#!@TARGET_PYTHON@
#
-# msdi2ly.py -- LilyPond midi import script
-#
-# source file of the GNU LilyPond music typesetter
+# midi2ly.py -- LilyPond midi import script
+
+# This file is part of LilyPond, the GNU music typesetter.
#
-# (c) 1998--2006 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+# Copyright (C) 1998--2010 Han-Wen Nienhuys <hanwen@xs4all.nl>
# Jan Nieuwenhuizen <janneke@gnu.org>
+#
+# LilyPond is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# LilyPond is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
'''
'''
import os
-import string
import sys
-################################################################
-# Users of python modules should include this snippet.
-#
-
-for d in ['@lilypond_datadir@',
- '@lilypond_libdir@']:
- sys.path.insert (0, os.path.join (d, 'python'))
-
-# dynamic relocation, for GUB binaries.
-bindir = os.path.abspath (os.path.split (sys.argv[0])[0])
-for p in ['share', 'lib']:
- datadir = os.path.abspath (bindir + '/../%s/lilypond/current/python/' % p)
- sys.path.insert (0, datadir)
-
+"""
+@relocate-preamble@
+"""
import midi
import lilylib as ly
+global _;_=ly._
################################################################
-################ CONSTANTS
+## CONSTANTS
-output_name = ''
LINE_BELL = 60
-scale_steps = [0,2,4,5,7,9,11]
+scale_steps = [0, 2, 4, 5, 7, 9, 11]
global_options = None
-
clocks_per_1 = 1536
clocks_per_4 = 0
################################################################
-localedir = '@localedir@'
-try:
- import gettext
- gettext.bindtextdomain ('lilypond', localedir)
- gettext.textdomain ('lilypond')
- _ = gettext.gettext
-except:
- def _ (s):
- return s
program_name = sys.argv[0]
program_version = '@TOPLEVEL_VERSION@'
+authors = ('Jan Nieuwenhuizen <janneke@gnu.org>',
+ 'Han-Wen Nienhuys <hanwen@xs4all.nl>')
+
errorport = sys.stderr
def identify ():
def warranty ():
identify ()
- sys.stdout.write ('''
-Copyright (c) %s by
+ ly.encoded_write (sys.stdout, '''
+%s
- Han-Wen Nienhuys
- Jan Nieuwenhuizen
+ %s
%s
%s
-''' ( '2001--2006',
- _('Distributed under terms of the GNU General Public License.'),
- _('It comes with NO WARRANTY.')))
-
+''' % ( _ ('Copyright (c) %s by') % '2001--2010',
+ '\n '.join (authors),
+ _ ('Distributed under terms of the GNU General Public License.'),
+ _ ('It comes with NO WARRANTY.')))
def progress (s):
- errorport.write (s + '\n')
+ ly.encoded_write (errorport, s + '\n')
def warning (s):
progress (_ ("warning: ") + s)
def error (s):
progress (_ ("error: ") + s)
- raise _ ("Exiting ... ")
+ raise Exception (_ ("Exiting... "))
def system (cmd, ignore_error = 0):
return ly.system (cmd, ignore_error=ignore_error)
e = ''
return p + e
-\f
-
class Duration:
allowed_durs = (1, 2, 4, 8, 16, 32, 64, 128)
# all include ALL_NOTES_OFF
elif e[1][0] >= midi.ALL_SOUND_OFF \
and e[1][0] <= midi.POLY_MODE_ON:
- for i in pitches.keys ():
+ for i in pitches:
end_note (pitches, notes, t, i)
elif e[1][0] == midi.META_EVENT:
if e[1][1] == midi.END_OF_TRACK:
- for i in pitches.keys ():
+ for i in pitches:
end_note (pitches, notes, t, i)
break
for ch in chs:
t = ch[0]
- i = string.rfind (lines[-1], '\n') + 1
+ i = lines[-1].rfind ('\n') + 1
if len (lines[-1][i:]) > LINE_BELL:
lines.append ('')
-
+
if t - last_t > 0:
lines[-1] = lines[-1] + dump_skip (skip, t-last_t)
elif t - last_t < 0:
last_t, bar_count)
lines[-1] = lines[-1] + s
- return string.join (lines, '\n ') + '\n'
+ return '\n '.join (lines) + '\n'
def track_name (i):
return 'track%c' % (i + ord ('A'))
def get_option_parser ():
- p = ly.get_option_parser (usage='midi2ly [OPTIONS] FILE',
- version="midi2ly (LilyPond) @TOPLEVEL_VERSION@",
- description=_('''Convert MIDI to LilyPond source.'''))
+ p = ly.get_option_parser (usage=_ ("%s [OPTION]... FILE") % 'midi2ly',
+ description=_ ("Convert %s to LilyPond input.\n") % 'MIDI',
+ add_help_option=False)
p.add_option ('-a', '--absolute-pitches',
action='store_true',
help=_ ("print absolute pitches"))
p.add_option ('-d', '--duration-quant',
metavar= _("DUR"),
- help=_("quantise note durations on DUR"))
+ help=_ ("quantise note durations on DUR"))
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"))
p.add_option('-k', '--key', help=_ ("set key: ALT=+sharps|-flats; MINOR=1"),
metavar=_ ("ALT[:MINOR]"),
default='0'),
- p.add_option ('-o', '--output', help=_("write output to FILE"),
+ p.add_option ('-o', '--output', help=_ ("write output to FILE"),
metavar=_("FILE"),
action='store')
p.add_option ('-s', '--start-quant',help= _ ("quantise note starts on DUR"),
dest="allowed_tuplets",
help=_ ("allow tuplet durations DUR*NUM/DEN"),
default=[])
- p.add_option ('-V', '--verbose', help=_("be verbose"),
+ p.add_option ('-V', '--verbose', help=_ ("be verbose"),
action='store_true'
),
- p.add_option ('-w', '--warranty', help=_("show warranty"),
+ 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',
),
- p.add_option ('-x', '--text-lyrics', help=_("treat every text as a lyric"),
+ p.add_option ('-x', '--text-lyrics', help=_ ("treat every text as a lyric"),
action='store_true')
- p.add_option_group (_ ("example"),
+ p.add_option_group (ly.display_encode (_ ("Examples")),
description = r'''
- midi2ly --key=-2:1 --duration-quant=32 \
- --allow-tuplet=4*2/3 --allow-tuplet=2*4/3 foo.midi
+ $ midi2ly --key=-2:1 --duration-quant=32 --allow-tuplet=4*2/3 --allow-tuplet=2*4/3 foo.midi
''')
-
- p.add_option_group ('bugs',
- description='''Report bugs via http://post.gmane.org/post.php'''
- '''?group=gmane.comp.gnu.lilypond.bugs\n''')
-
+ p.add_option_group ('',
+ description=(
+ _ ('Report bugs via %s')
+ % 'http://post.gmane.org/post.php'
+ '?group=gmane.comp.gnu.lilypond.bugs') + '\n')
return p
if not args or args[0] == '-':
opt_parser.print_help ()
- sys.stderr.write ('\n%s: %s %s\n' % (program_name, _ ("error: "),
- _ ("no files specified on command line.")))
+ ly.stderr_write ('\n%s: %s %s\n' % (program_name, _ ("error: "),
+ _ ("no files specified on command line.")))
sys.exit (2)
if options.duration_quant:
warranty ()
sys.exit (0)
if 1:
- (alterations, minor) = map (int, string.split (options.key + ':0', ':'))[0:2]
+ (alterations, minor) = map (int, (options.key + ':0').split (':'))[0:2]
sharps = 0
flats = 0
if alterations >= 0:
g = strip_extension (g, '.MID')
(outdir, outbase) = ('','')
- if not output_name:
+ if not global_options.output:
outdir = '.'
outbase = os.path.basename (g)
o = os.path.join (outdir, outbase + '-midi.ly')
- elif output_name[-1] == os.sep:
- outdir = output_name
+ elif global_options.output[-1] == os.sep:
+ outdir = global_options.output
outbase = os.path.basename (g)
os.path.join (outdir, outbase + '-gen.ly')
else:
- o = output_name
+ o = global_options.output
(outdir, outbase) = os.path.split (o)
if outdir != '.' and outdir != '':