Refactored duration changes
Fixes cyclic duration changes
This commit is contained in:
@ -59,8 +59,26 @@ class ZiffersTransformer(Transformer):
|
||||
return Chord(pcs=s,text="".join([val.text for val in s]))
|
||||
|
||||
def dur_change(self,s):
|
||||
duration = s[0]
|
||||
return [DurationChange(dur=duration["dur"], text=duration["text"]),s[1]]
|
||||
durs = s[0]
|
||||
return DurationChange(dur=durs[1], text=durs[0])
|
||||
|
||||
def char_change(self,s):
|
||||
chars = ""
|
||||
durs = 0.0
|
||||
for (dchar,dots) in s:
|
||||
val = default_durs[dchar]
|
||||
if(dots>0):
|
||||
val = val * (2.0-(1.0/(2*dots)))
|
||||
chars = chars + (dchar+"."*dots)
|
||||
durs = durs + val
|
||||
return [chars,durs]
|
||||
|
||||
def dchar_not_prefix(self,s):
|
||||
dur = s[0].split(".",1)
|
||||
dots = 0
|
||||
if len(dur)>1:
|
||||
dots = len(dur[1])+1
|
||||
return [dur[0],dots]
|
||||
|
||||
def escaped_decimal(self,s):
|
||||
val = s[0]
|
||||
|
||||
@ -52,7 +52,9 @@
|
||||
// Control characters modifying future events
|
||||
oct_mod: octave WS
|
||||
oct_change: escaped_octave WS
|
||||
dur_change: (duration_chars | decimal) WS
|
||||
dur_change: (decimal | char_change)
|
||||
char_change: dchar_not_prefix+
|
||||
dchar_not_prefix: /([mklpdcwyhnqaefsxtgujzo](\.)*)(?!\d)/
|
||||
|
||||
// Generative rules
|
||||
random_integer: /\(-?[0-9]+,-?[0-9]+\)/
|
||||
|
||||
Reference in New Issue
Block a user