From 964ee68974be4c8ea3a4da5bef79bf86d93ac95f Mon Sep 17 00:00:00 2001 From: Bradford Powell Date: Fri, 29 Jul 2022 12:44:56 -0400 Subject: [PATCH] implement "?" operator in minilanguage (for degradeBy) this will require update to krill-parser.js (aggregated in later commit) to work properly --- packages/mini/krill.pegjs | 5 ++++- packages/mini/mini.mjs | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/mini/krill.pegjs b/packages/mini/krill.pegjs index 5451cf01..e266c395 100644 --- a/packages/mini/krill.pegjs +++ b/packages/mini/krill.pegjs @@ -102,7 +102,7 @@ slice = step / sub_cycle / timeline // slice modifier affects the timing/size of a slice (e.g. [a b c]@3) // at this point, we assume we can represent them as regular sequence operators -slice_modifier = slice_weight / slice_bjorklund / slice_slow / slice_fast / slice_fixed_step / slice_replicate +slice_modifier = slice_weight / slice_bjorklund / slice_slow / slice_fast / slice_fixed_step / slice_replicate / slice_degrade slice_weight = "@" a:number { return { weight: a} } @@ -122,6 +122,9 @@ slice_fast = "*"a:number slice_fixed_step = "%"a:number { return { operator : { type_: "fixed-step", arguments_ :{ amount:a } } } } +slice_degrade = "?"a:number? + { return { operator : { type_: "degradeBy", arguments_ :{ amount:(a? a : 0.5) } } } } + // a slice with an modifier applied i.e [bd@4 sd@3]@2 hh] slice_with_modifier = s:slice o:slice_modifier? { return new ElementStub(s, o);} diff --git a/packages/mini/mini.mjs b/packages/mini/mini.mjs index 20971230..684616ff 100644 --- a/packages/mini/mini.mjs +++ b/packages/mini/mini.mjs @@ -21,6 +21,8 @@ const applyOptions = (parent) => (pat, i) => { return reify(pat).fast(speed); case 'bjorklund': return pat.euclid(operator.arguments_.pulse, operator.arguments_.step, operator.arguments_.rotation); + case 'degradeBy': + return reify(pat)._degradeByWith(strudel.rand.early(0.0001 * _nextSeed()).segment(1), operator.arguments_.amount); // TODO: case 'fixed-step': "%" } console.warn(`operator "${operator.type_}" not implemented`);