From c66cc9b8ee24c799e5b29ee5ef4085bee6c1d583 Mon Sep 17 00:00:00 2001 From: Miika Alonen Date: Wed, 1 Feb 2023 21:45:37 +0200 Subject: [PATCH] Added ? % --- ziffers/classes.py | 6 +++++- ziffers/mapper.py | 10 ++++++++-- ziffers/ziffers.lark | 6 ++++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/ziffers/classes.py b/ziffers/classes.py index 8c8175d..10acb97 100644 --- a/ziffers/classes.py +++ b/ziffers/classes.py @@ -30,6 +30,10 @@ class Pitch(Event): class RandomPitch(Event): pc: int = None +@dataclass +class RandomPercent(Meta): + percent: float = None + @dataclass class Chord(Event): pcs: list[Pitch] = None @@ -63,7 +67,7 @@ class Cyclic(Sequence): cycle: int = 0 @dataclass -class RandomPitch(Meta): +class RandomInteger(Meta): min: int max: int diff --git a/ziffers/mapper.py b/ziffers/mapper.py index 1721342..e5500a2 100644 --- a/ziffers/mapper.py +++ b/ziffers/mapper.py @@ -12,9 +12,9 @@ class ZiffersTransformer(Transformer): values = flatten(items[0].values) return Sequence(values=values,text="("+"".join([val.text for val in values])+")") - def randompitch(self,s): + def random_integer(self,s): val = s[0][1:-1].split(",") - return RandomPitch(min=val[0],max=val[1],text=s[0]) + return RandomInteger(min=val[0],max=val[1],text=s[0]) def range(self,s): val = s[0].split("..") @@ -74,6 +74,12 @@ class ZiffersTransformer(Transformer): val["text"] = "<"+val["text"]+">" return val + def random_pitch(self,s): + return RandomPitch(text="?") + + def random_percent(self,s): + return RandomPercent(text="%") + def duration_chars(self,s): durations = [val[1] for val in s] characters = "".join([val[0] for val in s]) diff --git a/ziffers/ziffers.lark b/ziffers/ziffers.lark index 1b6c7bd..106f7fa 100644 --- a/ziffers/ziffers.lark +++ b/ziffers/ziffers.lark @@ -1,12 +1,14 @@ ?value: root - root: (pc | dur_change | oct_mod | oct_change | WS | chord | cycle | randompitch | range | list | subdivision)* + root: (pc | dur_change | oct_mod | oct_change | WS | chord | cycle | random_integer | random_pitch | random_percent | range | list | subdivision)* list: "(" root ")" - randompitch: /\(-?[0-9],-?[0-9]\)/ + random_integer: /\(-?[0-9]+,-?[0-9]+\)/ range: /-?[0-9]\.\.-?[0-9]/ cycle: "<" root ">" pc: prefix* pitch pitch: /-?[0-9TE]/ + random_pitch: "?" + random_percent: "%" prefix: (octave | duration_chars | escaped_decimal | escaped_octave) oct_change: escaped_octave WS escaped_octave: /<-?[0-9]>/