Attached is a patch for abc2ly which provides some minimal support for
the Q field.

--- CHANGES~	Mon May 28 10:06:02 2001
+++ CHANGES	Wed Jun 13 09:55:14 2001
@@ -1,3 +1,8 @@
+1.4.2.lec1
+==========
+
+Added support for Q: statement to abc2ly.
+
 1.4.1.jcn4
 ==========
 
--- scripts/abc2ly.py~	Wed May  9 14:35:35 2001
+++ scripts/abc2ly.py	Wed Jun 13 10:16:50 2001
@@ -87,7 +87,7 @@
 DIGITS='0123456789'
 alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ"	
 HSPACE=' \t'
-
+midi_specs = ''
 	
 def check_clef(s):
       if not s:
@@ -205,6 +205,23 @@
 				outf.write("}")
 		outf.write ("\n}")
 
+def try_parse_q(a):
+	global midi_specs
+	#assume that Q takes the form "Q:1/4=120"
+	#There are other possibilities, but they are deprecated
+	if string.count(a, '/') == 1:
+		array=string.split(a,'/')
+		numerator=array[0]
+		if numerator != 1:
+			sys.stderr.write("abc2ly: Warning, unable to translate a Q specification with a numerator of %s: %s\n" % (numerator, a))
+		array2=string.split(array[1],'=')
+		denominator=array2[0]
+		perminute=array2[1]
+		duration=str(string.atof(denominator)/string.atoi(numerator))
+		midi_specs=string.join(["\\tempo", duration, "=", perminute])
+	else:
+		sys.stderr.write("abc2ly: Warning, unable to parse Q specification: %s\n" % a)
+        
 def dump_score (outf):
 	outf.write (r"""\score{
         \notes <
@@ -243,7 +260,7 @@
 		outf.write ("\t\t\\StaffContext\n")
 #		outf.write ("\t\t\\consists Staff_margin_engraver\n")
 		outf.write ("\t    }\n")
-	outf.write ("\t}\n\t\\midi {}\n}\n")
+	outf.write ("\t}\n\t\\midi {%s}\n}\n" % midi_specs)
 
 
 
@@ -631,7 +648,8 @@
 			lyrics_append(a)
 		if g == 'w':	# vocals
 			slyrics_append (a)
-
+		if g == 'Q':    #tempo
+			try_parse_q (a)
 		return ''
 	return ln
 

-- 
Laura (mailto:[EMAIL PROTECTED] , http://www.laymusic.org/ )
(617) 661-8097  fax: (801) 365-6574 
233 Broadway, Cambridge, MA 02139

Reply via email to