@ -571,7 +571,7 @@ class Duration(object):
else :
append = " "
n = self . genericNumber
n = self . genericNumber
if n == 0 :
return " \\ breve " + append
elif n == - 1 :
@ -1701,13 +1701,15 @@ class Chord(Item):
substrings = [ ]
minimumTicksInChord = self . durationGroup . completeDuration ( )
for ( ticks , lilydur ) , lst in table . items ( ) :
for ( ticks , lilydur ) , lst in table . items ( ) :
#factor = Fraction(ticks, minimumDurInChord).limit_denominator(100000) #protects 6 or 7 decimal positions
#dur = lilydur + " * {}/{}".format(factor.denominator, factor.numerator) #lilypond requires the 1/x syntax
assert int ( ticks ) == ticks , ticks
assert int ( minimumTicksInChord ) == minimumTicksInChord , minimumTicksInChord
assert minimumTicksInChord < = ticks
dur = lilydur + " * {} / {} " . format ( int ( minimumTicksInChord ) , int ( ticks ) ) #lilypond requires the x/y syntax, even if it is 1/x
assert minimumTicksInChord < = ticks
if lilydur . endswith ( " ~ " ) :
lilydur = lilydur [ : - 1 ] #without ~ #TODO: not supported yet.
dur = lilydur + " * {} / {} " . format ( int ( minimumTicksInChord ) , int ( ticks ) ) #lilypond requires the x/y syntax, even if it is 1/y #TODO: this is very ugly
substrings . append ( " \\ \\ { < " + " " . join ( lst ) + " > " + dur + " } " )
result = " << " + " " . join ( substrings ) + " >> "
return result
@ -2148,13 +2150,23 @@ class KeySignature(Item):
return " "
#G Major ((3, 10), (0, 0), (4, 0), (1, 0), (5, 0), (2, 0), (6, 0))
#`((0 . ,NATURAL) (1 . ,NATURAL) (2 . ,NATURAL) (3 . ,SHARP) (4 . ,NATURAL) (5 . ,NATURAL) (6 . ,NATURAL))
schemepairs = " " . join ( build ( x [ 0 ] , x [ 1 ] ) for x in self . keysigList )
#`((0 . ,NATURAL) (1 . ,NATURAL) (2 . ,NATURAL) (3 . ,SHARP) (4 . ,NATURAL) (5 . ,NATURAL) (6 . ,NATURAL))
schemepairs = " " . join ( build ( x [ 0 ] , x [ 1 ] ) for x in self . keysigList )
schemepairs = " " . join ( schemepairs . split ( ) ) # split and join again to reduce all whitespaces to single ones.
subtextRoot = " \\ once \\ override Staff.KeySignature # ' stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:key-signature-interface::print grob) Y DOWN (grob-interpret-markup grob (markup #:small \" " + pitchmath . pitch2ly [ self . root ] . strip ( " , " ) . title ( ) + " \" )) 3)) " #3 is the space between keysig and text
lyKeysignature = subtextRoot + " \\ set Staff.keySignature = #`( {} ) " . format ( schemepairs )
return lyKeysignature
lyKeysignature = subtextRoot + " \\ set Staff.keyAlterations = #`( {} ) " . format ( schemepairs )
return lyKeysignature
#Alternative
schemepairs = " " . join ( build ( num , alt ) for num , alt in enumerate ( self . deviationFromMajorScale ) )
schemepairs = " " . join ( schemepairs . split ( ) ) # split and join again to reduce all whitespaces to single ones.
subtextRoot = " \\ once \\ override Staff.KeySignature # ' stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:key-signature-interface::print grob) Y DOWN (grob-interpret-markup grob (markup #:small \" " + pitchmath . pitch2ly [ self . root ] . strip ( " , " ) . title ( ) + " \" )) 3)) " #3 is the space between keysig and text
if schemepairs :
lyKeysignature = subtextRoot + f " \\ key { pitchmath . pitch2ly [ self . root ] . strip ( ' , ' ) } #`( { schemepairs } ) "
else : #no explicit accidental
lyKeysignature = subtextRoot + " \\ set Staff.keyAlterations = #`(( 0 . ,NATURAL)) " #TODO: subtextRoot position is broken
return lyKeysignature
class Clef ( Item ) :
""" A clef has no direct musical logical meaning. But it gives some hints: