diff --git a/README.md b/README.md
index 5368d2e5..cd8c604f 100644
--- a/README.md
+++ b/README.md
@@ -38,6 +38,12 @@ Click on the package names to find out more about each one.
There are many ways to contribute to this project! See [contribution guide](./CONTRIBUTING.md).
+
+
+
+
+Made with [contrib.rocks](https://contrib.rocks).
+
## Community
There is a #strudel channel on the TidalCycles discord:
diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs
index 84441a1b..48e52643 100644
--- a/packages/core/pattern.mjs
+++ b/packages/core/pattern.mjs
@@ -1294,8 +1294,8 @@ export function slowcatPrime(...pats) {
pats = pats.map(reify);
const query = function (state) {
const pat_n = Math.floor(state.span.begin) % pats.length;
- const pat = pats[pat_n];
- return pat.query(state);
+ const pat = pats[pat_n]; // can be undefined for same cases e.g. /#cHVyZSg0MikKICAuZXZlcnkoMyxhZGQoNykpCiAgLmxhdGUoLjUp
+ return pat?.query(state) || [];
};
return new Pattern(query)._splitQueries();
}
diff --git a/packages/core/util.mjs b/packages/core/util.mjs
index 6a96be87..86d798d6 100644
--- a/packages/core/util.mjs
+++ b/packages/core/util.mjs
@@ -53,8 +53,8 @@ export const getPlayableNoteValue = (hap) => {
// if value is number => interpret as midi number as long as its not marked as frequency
if (typeof note === 'number' && context.type !== 'frequency') {
note = fromMidi(hap.value);
- } else if (typeof note === 'string' && !isNote(note)) {
- throw new Error('not a note: ' + note);
+ } else if (typeof note !== 'string' || !isNote(note)) {
+ throw new Error('not a note: ' + JSON.stringify(note));
}
return note;
};
diff --git a/packages/mini/krill-parser.js b/packages/mini/krill-parser.js
index f93c26c5..cdfd4ae4 100644
--- a/packages/mini/krill-parser.js
+++ b/packages/mini/krill-parser.js
@@ -176,37 +176,39 @@ function peg$parse(input, options) {
var peg$c2 = "+";
var peg$c3 = "0";
var peg$c4 = ",";
- var peg$c5 = "\"";
- var peg$c6 = "'";
- var peg$c7 = "#";
- var peg$c8 = "^";
- var peg$c9 = "_";
- var peg$c10 = ":";
- var peg$c11 = "[";
- var peg$c12 = "]";
- var peg$c13 = "<";
- var peg$c14 = ">";
- var peg$c15 = "@";
- var peg$c16 = "!";
- var peg$c17 = "(";
- var peg$c18 = ")";
- var peg$c19 = "/";
- var peg$c20 = "*";
- var peg$c21 = "%";
- var peg$c22 = "struct";
- var peg$c23 = "target";
- var peg$c24 = "euclid";
- var peg$c25 = "slow";
- var peg$c26 = "rotL";
- var peg$c27 = "rotR";
- var peg$c28 = "fast";
- var peg$c29 = "scale";
- var peg$c30 = "//";
- var peg$c31 = "cat";
- var peg$c32 = "$";
- var peg$c33 = "setcps";
- var peg$c34 = "setbpm";
- var peg$c35 = "hush";
+ var peg$c5 = "|";
+ var peg$c6 = "\"";
+ var peg$c7 = "'";
+ var peg$c8 = "#";
+ var peg$c9 = "^";
+ var peg$c10 = "_";
+ var peg$c11 = ":";
+ var peg$c12 = "[";
+ var peg$c13 = "]";
+ var peg$c14 = "<";
+ var peg$c15 = ">";
+ var peg$c16 = "@";
+ var peg$c17 = "!";
+ var peg$c18 = "(";
+ var peg$c19 = ")";
+ var peg$c20 = "/";
+ var peg$c21 = "*";
+ var peg$c22 = "%";
+ var peg$c23 = "?";
+ var peg$c24 = "struct";
+ var peg$c25 = "target";
+ var peg$c26 = "euclid";
+ var peg$c27 = "slow";
+ var peg$c28 = "rotL";
+ var peg$c29 = "rotR";
+ var peg$c30 = "fast";
+ var peg$c31 = "scale";
+ var peg$c32 = "//";
+ var peg$c33 = "cat";
+ var peg$c34 = "$";
+ var peg$c35 = "setcps";
+ var peg$c36 = "setbpm";
+ var peg$c37 = "hush";
var peg$r0 = /^[1-9]/;
var peg$r1 = /^[eE]/;
@@ -226,39 +228,41 @@ function peg$parse(input, options) {
var peg$e8 = peg$otherExpectation("whitespace");
var peg$e9 = peg$classExpectation([" ", "\n", "\r", "\t"], false, false);
var peg$e10 = peg$literalExpectation(",", false);
- var peg$e11 = peg$literalExpectation("\"", false);
- var peg$e12 = peg$literalExpectation("'", false);
- var peg$e13 = peg$classExpectation([["0", "9"], ["a", "z"], ["A", "Z"], "~"], false, false);
- var peg$e14 = peg$literalExpectation("#", false);
- var peg$e15 = peg$literalExpectation("^", false);
- var peg$e16 = peg$literalExpectation("_", false);
- var peg$e17 = peg$literalExpectation(":", false);
- var peg$e18 = peg$literalExpectation("[", false);
- var peg$e19 = peg$literalExpectation("]", false);
- var peg$e20 = peg$literalExpectation("<", false);
- var peg$e21 = peg$literalExpectation(">", false);
- var peg$e22 = peg$literalExpectation("@", false);
- var peg$e23 = peg$literalExpectation("!", false);
- var peg$e24 = peg$literalExpectation("(", false);
- var peg$e25 = peg$literalExpectation(")", false);
- var peg$e26 = peg$literalExpectation("/", false);
- var peg$e27 = peg$literalExpectation("*", false);
- var peg$e28 = peg$literalExpectation("%", false);
- var peg$e29 = peg$literalExpectation("struct", false);
- var peg$e30 = peg$literalExpectation("target", false);
- var peg$e31 = peg$literalExpectation("euclid", false);
- var peg$e32 = peg$literalExpectation("slow", false);
- var peg$e33 = peg$literalExpectation("rotL", false);
- var peg$e34 = peg$literalExpectation("rotR", false);
- var peg$e35 = peg$literalExpectation("fast", false);
- var peg$e36 = peg$literalExpectation("scale", false);
- var peg$e37 = peg$literalExpectation("//", false);
- var peg$e38 = peg$classExpectation(["\n"], true, false);
- var peg$e39 = peg$literalExpectation("cat", false);
- var peg$e40 = peg$literalExpectation("$", false);
- var peg$e41 = peg$literalExpectation("setcps", false);
- var peg$e42 = peg$literalExpectation("setbpm", false);
- var peg$e43 = peg$literalExpectation("hush", false);
+ var peg$e11 = peg$literalExpectation("|", false);
+ var peg$e12 = peg$literalExpectation("\"", false);
+ var peg$e13 = peg$literalExpectation("'", false);
+ var peg$e14 = peg$classExpectation([["0", "9"], ["a", "z"], ["A", "Z"], "~"], false, false);
+ var peg$e15 = peg$literalExpectation("#", false);
+ var peg$e16 = peg$literalExpectation("^", false);
+ var peg$e17 = peg$literalExpectation("_", false);
+ var peg$e18 = peg$literalExpectation(":", false);
+ var peg$e19 = peg$literalExpectation("[", false);
+ var peg$e20 = peg$literalExpectation("]", false);
+ var peg$e21 = peg$literalExpectation("<", false);
+ var peg$e22 = peg$literalExpectation(">", false);
+ var peg$e23 = peg$literalExpectation("@", false);
+ var peg$e24 = peg$literalExpectation("!", false);
+ var peg$e25 = peg$literalExpectation("(", false);
+ var peg$e26 = peg$literalExpectation(")", false);
+ var peg$e27 = peg$literalExpectation("/", false);
+ var peg$e28 = peg$literalExpectation("*", false);
+ var peg$e29 = peg$literalExpectation("%", false);
+ var peg$e30 = peg$literalExpectation("?", false);
+ var peg$e31 = peg$literalExpectation("struct", false);
+ var peg$e32 = peg$literalExpectation("target", false);
+ var peg$e33 = peg$literalExpectation("euclid", false);
+ var peg$e34 = peg$literalExpectation("slow", false);
+ var peg$e35 = peg$literalExpectation("rotL", false);
+ var peg$e36 = peg$literalExpectation("rotR", false);
+ var peg$e37 = peg$literalExpectation("fast", false);
+ var peg$e38 = peg$literalExpectation("scale", false);
+ var peg$e39 = peg$literalExpectation("//", false);
+ var peg$e40 = peg$classExpectation(["\n"], true, false);
+ var peg$e41 = peg$literalExpectation("cat", false);
+ var peg$e42 = peg$literalExpectation("$", false);
+ var peg$e43 = peg$literalExpectation("setcps", false);
+ var peg$e44 = peg$literalExpectation("setbpm", false);
+ var peg$e45 = peg$literalExpectation("hush", false);
var peg$f0 = function() { return parseFloat(text()); };
var peg$f1 = function(chars) { return chars.join("") };
@@ -270,28 +274,30 @@ function peg$parse(input, options) {
var peg$f7 = function(a) { return { operator : { type_: "stretch", arguments_ :{ amount:a } } } };
var peg$f8 = function(a) { return { operator : { type_: "stretch", arguments_ :{ amount:"1/"+a } } } };
var peg$f9 = function(a) { return { operator : { type_: "fixed-step", arguments_ :{ amount:a } } } };
- var peg$f10 = function(s, o) { return new ElementStub(s, o);};
- var peg$f11 = function(s) { return new PatternStub(s,"h"); };
- var peg$f12 = function(c, v) { return v};
- var peg$f13 = function(c, cs) { if (cs.length == 0 && c instanceof Object) { return c;} else { cs.unshift(c); return new PatternStub(cs,"v");} };
- var peg$f14 = function(s) { return s; };
- var peg$f15 = function(s) { return { name: "struct", args: { sequence:s }}};
- var peg$f16 = function(s) { return { name: "target", args : { name:s}}};
- var peg$f17 = function(p, s, r) { return { name: "bjorklund", args :{ pulse: parseInt(p), step:parseInt(s) }}};
- var peg$f18 = function(a) { return { name: "stretch", args :{ amount: a}}};
- var peg$f19 = function(a) { return { name: "shift", args :{ amount: "-"+a}}};
- var peg$f20 = function(a) { return { name: "shift", args :{ amount: a}}};
- var peg$f21 = function(a) { return { name: "stretch", args :{ amount: "1/"+a}}};
- var peg$f22 = function(s) { return { name: "scale", args :{ scale: s.join("")}}};
- var peg$f23 = function(s, v) { return v};
- var peg$f24 = function(s, ss) { ss.unshift(s); return new PatternStub(ss,"t"); };
- var peg$f25 = function(sg) {return sg};
- var peg$f26 = function(o, soc) { return new OperatorStub(o.name,o.args,soc)};
- var peg$f27 = function(sc) { return sc };
- var peg$f28 = function(c) { return c };
- var peg$f29 = function(v) { return new CommandStub("setcps", { value: v})};
- var peg$f30 = function(v) { return new CommandStub("setcps", { value: (v/120/2)})};
- var peg$f31 = function() { return new CommandStub("hush")};
+ var peg$f10 = function(a) { return { operator : { type_: "degradeBy", arguments_ :{ amount:(a? a : 0.5) } } } };
+ var peg$f11 = function(s, o) { return new ElementStub(s, o);};
+ var peg$f12 = function(s) { return new PatternStub(s,"h"); };
+ var peg$f13 = function(tail) { return { alignment: 'v', list: tail }; };
+ var peg$f14 = function(tail) { return { alignment: 'r', list: tail }; };
+ var peg$f15 = function(head, tail) { if (tail && tail.list.length > 0) { return new PatternStub([head, ...tail.list], tail.alignment); } else { return head; } };
+ var peg$f16 = function(sc) { return sc; };
+ var peg$f17 = function(s) { return { name: "struct", args: { sequence:s }}};
+ var peg$f18 = function(s) { return { name: "target", args : { name:s}}};
+ var peg$f19 = function(p, s, r) { return { name: "bjorklund", args :{ pulse: parseInt(p), step:parseInt(s) }}};
+ var peg$f20 = function(a) { return { name: "stretch", args :{ amount: a}}};
+ var peg$f21 = function(a) { return { name: "shift", args :{ amount: "-"+a}}};
+ var peg$f22 = function(a) { return { name: "shift", args :{ amount: a}}};
+ var peg$f23 = function(a) { return { name: "stretch", args :{ amount: "1/"+a}}};
+ var peg$f24 = function(s) { return { name: "scale", args :{ scale: s.join("")}}};
+ var peg$f25 = function(s, v) { return v};
+ var peg$f26 = function(s, ss) { ss.unshift(s); return new PatternStub(ss,"t"); };
+ var peg$f27 = function(sg) {return sg};
+ var peg$f28 = function(o, soc) { return new OperatorStub(o.name,o.args,soc)};
+ var peg$f29 = function(sc) { return sc };
+ var peg$f30 = function(c) { return c };
+ var peg$f31 = function(v) { return new CommandStub("setcps", { value: v})};
+ var peg$f32 = function(v) { return new CommandStub("setcps", { value: (v/120/2)})};
+ var peg$f33 = function() { return new CommandStub("hush")};
var peg$currPos = 0;
var peg$savedPos = 0;
var peg$posDetailsCache = [{ line: 1, column: 1 }];
@@ -734,23 +740,47 @@ function peg$parse(input, options) {
return s0;
}
+ function peg$parsepipe() {
+ var s0, s1, s2, s3;
+
+ s0 = peg$currPos;
+ s1 = peg$parsews();
+ if (input.charCodeAt(peg$currPos) === 124) {
+ s2 = peg$c5;
+ peg$currPos++;
+ } else {
+ s2 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$e11); }
+ }
+ if (s2 !== peg$FAILED) {
+ s3 = peg$parsews();
+ s1 = [s1, s2, s3];
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+
+ return s0;
+ }
+
function peg$parsequote() {
var s0;
if (input.charCodeAt(peg$currPos) === 34) {
- s0 = peg$c5;
+ s0 = peg$c6;
peg$currPos++;
} else {
s0 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e11); }
+ if (peg$silentFails === 0) { peg$fail(peg$e12); }
}
if (s0 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 39) {
- s0 = peg$c6;
+ s0 = peg$c7;
peg$currPos++;
} else {
s0 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e12); }
+ if (peg$silentFails === 0) { peg$fail(peg$e13); }
}
}
@@ -765,7 +795,7 @@ function peg$parse(input, options) {
peg$currPos++;
} else {
s0 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e13); }
+ if (peg$silentFails === 0) { peg$fail(peg$e14); }
}
if (s0 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 45) {
@@ -777,11 +807,11 @@ function peg$parse(input, options) {
}
if (s0 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 35) {
- s0 = peg$c7;
+ s0 = peg$c8;
peg$currPos++;
} else {
s0 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e14); }
+ if (peg$silentFails === 0) { peg$fail(peg$e15); }
}
if (s0 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 46) {
@@ -793,27 +823,27 @@ function peg$parse(input, options) {
}
if (s0 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 94) {
- s0 = peg$c8;
+ s0 = peg$c9;
peg$currPos++;
} else {
s0 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e15); }
+ if (peg$silentFails === 0) { peg$fail(peg$e16); }
}
if (s0 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 95) {
- s0 = peg$c9;
+ s0 = peg$c10;
peg$currPos++;
} else {
s0 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e16); }
+ if (peg$silentFails === 0) { peg$fail(peg$e17); }
}
if (s0 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 58) {
- s0 = peg$c10;
+ s0 = peg$c11;
peg$currPos++;
} else {
s0 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e17); }
+ if (peg$silentFails === 0) { peg$fail(peg$e18); }
}
}
}
@@ -858,23 +888,23 @@ function peg$parse(input, options) {
s0 = peg$currPos;
s1 = peg$parsews();
if (input.charCodeAt(peg$currPos) === 91) {
- s2 = peg$c11;
+ s2 = peg$c12;
peg$currPos++;
} else {
s2 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e18); }
+ if (peg$silentFails === 0) { peg$fail(peg$e19); }
}
if (s2 !== peg$FAILED) {
s3 = peg$parsews();
- s4 = peg$parsestack();
+ s4 = peg$parsestack_or_choose();
if (s4 !== peg$FAILED) {
s5 = peg$parsews();
if (input.charCodeAt(peg$currPos) === 93) {
- s6 = peg$c12;
+ s6 = peg$c13;
peg$currPos++;
} else {
s6 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e19); }
+ if (peg$silentFails === 0) { peg$fail(peg$e20); }
}
if (s6 !== peg$FAILED) {
s7 = peg$parsews();
@@ -902,11 +932,11 @@ function peg$parse(input, options) {
s0 = peg$currPos;
s1 = peg$parsews();
if (input.charCodeAt(peg$currPos) === 60) {
- s2 = peg$c13;
+ s2 = peg$c14;
peg$currPos++;
} else {
s2 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e20); }
+ if (peg$silentFails === 0) { peg$fail(peg$e21); }
}
if (s2 !== peg$FAILED) {
s3 = peg$parsews();
@@ -914,11 +944,11 @@ function peg$parse(input, options) {
if (s4 !== peg$FAILED) {
s5 = peg$parsews();
if (input.charCodeAt(peg$currPos) === 62) {
- s6 = peg$c14;
+ s6 = peg$c15;
peg$currPos++;
} else {
s6 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e21); }
+ if (peg$silentFails === 0) { peg$fail(peg$e22); }
}
if (s6 !== peg$FAILED) {
s7 = peg$parsews();
@@ -968,6 +998,9 @@ function peg$parse(input, options) {
s0 = peg$parseslice_fixed_step();
if (s0 === peg$FAILED) {
s0 = peg$parseslice_replicate();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parseslice_degrade();
+ }
}
}
}
@@ -982,11 +1015,11 @@ function peg$parse(input, options) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 64) {
- s1 = peg$c15;
+ s1 = peg$c16;
peg$currPos++;
} else {
s1 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e22); }
+ if (peg$silentFails === 0) { peg$fail(peg$e23); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsenumber();
@@ -1010,11 +1043,11 @@ function peg$parse(input, options) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 33) {
- s1 = peg$c16;
+ s1 = peg$c17;
peg$currPos++;
} else {
s1 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e23); }
+ if (peg$silentFails === 0) { peg$fail(peg$e24); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsenumber();
@@ -1038,11 +1071,11 @@ function peg$parse(input, options) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 40) {
- s1 = peg$c17;
+ s1 = peg$c18;
peg$currPos++;
} else {
s1 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e24); }
+ if (peg$silentFails === 0) { peg$fail(peg$e25); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
@@ -1066,11 +1099,11 @@ function peg$parse(input, options) {
}
s12 = peg$parsews();
if (input.charCodeAt(peg$currPos) === 41) {
- s13 = peg$c18;
+ s13 = peg$c19;
peg$currPos++;
} else {
s13 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e25); }
+ if (peg$silentFails === 0) { peg$fail(peg$e26); }
}
if (s13 !== peg$FAILED) {
peg$savedPos = s0;
@@ -1104,11 +1137,11 @@ function peg$parse(input, options) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 47) {
- s1 = peg$c19;
+ s1 = peg$c20;
peg$currPos++;
} else {
s1 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e26); }
+ if (peg$silentFails === 0) { peg$fail(peg$e27); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsenumber();
@@ -1132,11 +1165,11 @@ function peg$parse(input, options) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 42) {
- s1 = peg$c20;
+ s1 = peg$c21;
peg$currPos++;
} else {
s1 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e27); }
+ if (peg$silentFails === 0) { peg$fail(peg$e28); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsenumber();
@@ -1160,11 +1193,11 @@ function peg$parse(input, options) {
s0 = peg$currPos;
if (input.charCodeAt(peg$currPos) === 37) {
- s1 = peg$c21;
+ s1 = peg$c22;
peg$currPos++;
} else {
s1 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e28); }
+ if (peg$silentFails === 0) { peg$fail(peg$e29); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsenumber();
@@ -1183,6 +1216,32 @@ function peg$parse(input, options) {
return s0;
}
+ function peg$parseslice_degrade() {
+ var s0, s1, s2;
+
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 63) {
+ s1 = peg$c23;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$e30); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parsenumber();
+ if (s2 === peg$FAILED) {
+ s2 = null;
+ }
+ peg$savedPos = s0;
+ s0 = peg$f10(s2);
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+
+ return s0;
+ }
+
function peg$parseslice_with_modifier() {
var s0, s1, s2;
@@ -1194,7 +1253,7 @@ function peg$parse(input, options) {
s2 = null;
}
peg$savedPos = s0;
- s0 = peg$f10(s1, s2);
+ s0 = peg$f11(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
@@ -1219,55 +1278,126 @@ function peg$parse(input, options) {
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
- s1 = peg$f11(s1);
+ s1 = peg$f12(s1);
}
s0 = s1;
return s0;
}
- function peg$parsestack() {
- var s0, s1, s2, s3, s4, s5;
+ function peg$parsestack_tail() {
+ var s0, s1, s2, s3, s4;
+
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$currPos;
+ s3 = peg$parsecomma();
+ if (s3 !== peg$FAILED) {
+ s4 = peg$parsesingle_cycle();
+ if (s4 !== peg$FAILED) {
+ s2 = s4;
+ } else {
+ peg$currPos = s2;
+ s2 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$FAILED;
+ }
+ if (s2 !== peg$FAILED) {
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$currPos;
+ s3 = peg$parsecomma();
+ if (s3 !== peg$FAILED) {
+ s4 = peg$parsesingle_cycle();
+ if (s4 !== peg$FAILED) {
+ s2 = s4;
+ } else {
+ peg$currPos = s2;
+ s2 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$FAILED;
+ }
+ }
+ } else {
+ s1 = peg$FAILED;
+ }
+ if (s1 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$f13(s1);
+ }
+ s0 = s1;
+
+ return s0;
+ }
+
+ function peg$parsechoose_tail() {
+ var s0, s1, s2, s3, s4;
+
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$currPos;
+ s3 = peg$parsepipe();
+ if (s3 !== peg$FAILED) {
+ s4 = peg$parsesingle_cycle();
+ if (s4 !== peg$FAILED) {
+ s2 = s4;
+ } else {
+ peg$currPos = s2;
+ s2 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$FAILED;
+ }
+ if (s2 !== peg$FAILED) {
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$currPos;
+ s3 = peg$parsepipe();
+ if (s3 !== peg$FAILED) {
+ s4 = peg$parsesingle_cycle();
+ if (s4 !== peg$FAILED) {
+ s2 = s4;
+ } else {
+ peg$currPos = s2;
+ s2 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$FAILED;
+ }
+ }
+ } else {
+ s1 = peg$FAILED;
+ }
+ if (s1 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$f14(s1);
+ }
+ s0 = s1;
+
+ return s0;
+ }
+
+ function peg$parsestack_or_choose() {
+ var s0, s1, s2;
s0 = peg$currPos;
s1 = peg$parsesingle_cycle();
if (s1 !== peg$FAILED) {
- s2 = [];
- s3 = peg$currPos;
- s4 = peg$parsecomma();
- if (s4 !== peg$FAILED) {
- s5 = peg$parsesingle_cycle();
- if (s5 !== peg$FAILED) {
- peg$savedPos = s3;
- s3 = peg$f12(s1, s5);
- } else {
- peg$currPos = s3;
- s3 = peg$FAILED;
- }
- } else {
- peg$currPos = s3;
- s3 = peg$FAILED;
+ s2 = peg$parsestack_tail();
+ if (s2 === peg$FAILED) {
+ s2 = peg$parsechoose_tail();
}
- while (s3 !== peg$FAILED) {
- s2.push(s3);
- s3 = peg$currPos;
- s4 = peg$parsecomma();
- if (s4 !== peg$FAILED) {
- s5 = peg$parsesingle_cycle();
- if (s5 !== peg$FAILED) {
- peg$savedPos = s3;
- s3 = peg$f12(s1, s5);
- } else {
- peg$currPos = s3;
- s3 = peg$FAILED;
- }
- } else {
- peg$currPos = s3;
- s3 = peg$FAILED;
- }
+ if (s2 === peg$FAILED) {
+ s2 = null;
}
peg$savedPos = s0;
- s0 = peg$f13(s1, s2);
+ s0 = peg$f15(s1, s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
@@ -1283,12 +1413,12 @@ function peg$parse(input, options) {
s1 = peg$parsews();
s2 = peg$parsequote();
if (s2 !== peg$FAILED) {
- s3 = peg$parsestack();
+ s3 = peg$parsestack_or_choose();
if (s3 !== peg$FAILED) {
s4 = peg$parsequote();
if (s4 !== peg$FAILED) {
peg$savedPos = s0;
- s0 = peg$f14(s3);
+ s0 = peg$f16(s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
@@ -1338,19 +1468,19 @@ function peg$parse(input, options) {
var s0, s1, s2, s3;
s0 = peg$currPos;
- if (input.substr(peg$currPos, 6) === peg$c22) {
- s1 = peg$c22;
+ if (input.substr(peg$currPos, 6) === peg$c24) {
+ s1 = peg$c24;
peg$currPos += 6;
} else {
s1 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e29); }
+ if (peg$silentFails === 0) { peg$fail(peg$e31); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
s3 = peg$parsesequence_or_operator();
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
- s0 = peg$f15(s3);
+ s0 = peg$f17(s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
@@ -1367,12 +1497,12 @@ function peg$parse(input, options) {
var s0, s1, s2, s3, s4, s5;
s0 = peg$currPos;
- if (input.substr(peg$currPos, 6) === peg$c23) {
- s1 = peg$c23;
+ if (input.substr(peg$currPos, 6) === peg$c25) {
+ s1 = peg$c25;
peg$currPos += 6;
} else {
s1 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e30); }
+ if (peg$silentFails === 0) { peg$fail(peg$e32); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
@@ -1383,7 +1513,7 @@ function peg$parse(input, options) {
s5 = peg$parsequote();
if (s5 !== peg$FAILED) {
peg$savedPos = s0;
- s0 = peg$f16(s4);
+ s0 = peg$f18(s4);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
@@ -1408,12 +1538,12 @@ function peg$parse(input, options) {
var s0, s1, s2, s3, s4, s5, s6, s7;
s0 = peg$currPos;
- if (input.substr(peg$currPos, 6) === peg$c24) {
- s1 = peg$c24;
+ if (input.substr(peg$currPos, 6) === peg$c26) {
+ s1 = peg$c26;
peg$currPos += 6;
} else {
s1 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e31); }
+ if (peg$silentFails === 0) { peg$fail(peg$e33); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
@@ -1428,7 +1558,7 @@ function peg$parse(input, options) {
s7 = null;
}
peg$savedPos = s0;
- s0 = peg$f17(s3, s5, s7);
+ s0 = peg$f19(s3, s5, s7);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
@@ -1448,64 +1578,6 @@ function peg$parse(input, options) {
function peg$parseslow() {
var s0, s1, s2, s3;
- s0 = peg$currPos;
- if (input.substr(peg$currPos, 4) === peg$c25) {
- s1 = peg$c25;
- peg$currPos += 4;
- } else {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e32); }
- }
- if (s1 !== peg$FAILED) {
- s2 = peg$parsews();
- s3 = peg$parsenumber();
- if (s3 !== peg$FAILED) {
- peg$savedPos = s0;
- s0 = peg$f18(s3);
- } else {
- peg$currPos = s0;
- s0 = peg$FAILED;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$FAILED;
- }
-
- return s0;
- }
-
- function peg$parserotL() {
- var s0, s1, s2, s3;
-
- s0 = peg$currPos;
- if (input.substr(peg$currPos, 4) === peg$c26) {
- s1 = peg$c26;
- peg$currPos += 4;
- } else {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e33); }
- }
- if (s1 !== peg$FAILED) {
- s2 = peg$parsews();
- s3 = peg$parsenumber();
- if (s3 !== peg$FAILED) {
- peg$savedPos = s0;
- s0 = peg$f19(s3);
- } else {
- peg$currPos = s0;
- s0 = peg$FAILED;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$FAILED;
- }
-
- return s0;
- }
-
- function peg$parserotR() {
- var s0, s1, s2, s3;
-
s0 = peg$currPos;
if (input.substr(peg$currPos, 4) === peg$c27) {
s1 = peg$c27;
@@ -1532,7 +1604,7 @@ function peg$parse(input, options) {
return s0;
}
- function peg$parsefast() {
+ function peg$parserotL() {
var s0, s1, s2, s3;
s0 = peg$currPos;
@@ -1561,16 +1633,74 @@ function peg$parse(input, options) {
return s0;
}
+ function peg$parserotR() {
+ var s0, s1, s2, s3;
+
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 4) === peg$c29) {
+ s1 = peg$c29;
+ peg$currPos += 4;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$e36); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parsews();
+ s3 = peg$parsenumber();
+ if (s3 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s0 = peg$f22(s3);
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+
+ return s0;
+ }
+
+ function peg$parsefast() {
+ var s0, s1, s2, s3;
+
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 4) === peg$c30) {
+ s1 = peg$c30;
+ peg$currPos += 4;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$e37); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parsews();
+ s3 = peg$parsenumber();
+ if (s3 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s0 = peg$f23(s3);
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+
+ return s0;
+ }
+
function peg$parsescale() {
var s0, s1, s2, s3, s4, s5;
s0 = peg$currPos;
- if (input.substr(peg$currPos, 5) === peg$c29) {
- s1 = peg$c29;
+ if (input.substr(peg$currPos, 5) === peg$c31) {
+ s1 = peg$c31;
peg$currPos += 5;
} else {
s1 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e36); }
+ if (peg$silentFails === 0) { peg$fail(peg$e38); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
@@ -1590,7 +1720,7 @@ function peg$parse(input, options) {
s5 = peg$parsequote();
if (s5 !== peg$FAILED) {
peg$savedPos = s0;
- s0 = peg$f22(s4);
+ s0 = peg$f24(s4);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
@@ -1615,12 +1745,12 @@ function peg$parse(input, options) {
var s0, s1, s2, s3;
s0 = peg$currPos;
- if (input.substr(peg$currPos, 2) === peg$c30) {
- s1 = peg$c30;
+ if (input.substr(peg$currPos, 2) === peg$c32) {
+ s1 = peg$c32;
peg$currPos += 2;
} else {
s1 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e37); }
+ if (peg$silentFails === 0) { peg$fail(peg$e39); }
}
if (s1 !== peg$FAILED) {
s2 = [];
@@ -1629,7 +1759,7 @@ function peg$parse(input, options) {
peg$currPos++;
} else {
s3 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e38); }
+ if (peg$silentFails === 0) { peg$fail(peg$e40); }
}
while (s3 !== peg$FAILED) {
s2.push(s3);
@@ -1638,7 +1768,7 @@ function peg$parse(input, options) {
peg$currPos++;
} else {
s3 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e38); }
+ if (peg$silentFails === 0) { peg$fail(peg$e40); }
}
}
s1 = [s1, s2];
@@ -1655,21 +1785,21 @@ function peg$parse(input, options) {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;
s0 = peg$currPos;
- if (input.substr(peg$currPos, 3) === peg$c31) {
- s1 = peg$c31;
+ if (input.substr(peg$currPos, 3) === peg$c33) {
+ s1 = peg$c33;
peg$currPos += 3;
} else {
s1 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e39); }
+ if (peg$silentFails === 0) { peg$fail(peg$e41); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (input.charCodeAt(peg$currPos) === 91) {
- s3 = peg$c11;
+ s3 = peg$c12;
peg$currPos++;
} else {
s3 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e18); }
+ if (peg$silentFails === 0) { peg$fail(peg$e19); }
}
if (s3 !== peg$FAILED) {
s4 = peg$parsews();
@@ -1682,7 +1812,7 @@ function peg$parse(input, options) {
s9 = peg$parsesequence_or_operator();
if (s9 !== peg$FAILED) {
peg$savedPos = s7;
- s7 = peg$f23(s5, s9);
+ s7 = peg$f25(s5, s9);
} else {
peg$currPos = s7;
s7 = peg$FAILED;
@@ -1699,7 +1829,7 @@ function peg$parse(input, options) {
s9 = peg$parsesequence_or_operator();
if (s9 !== peg$FAILED) {
peg$savedPos = s7;
- s7 = peg$f23(s5, s9);
+ s7 = peg$f25(s5, s9);
} else {
peg$currPos = s7;
s7 = peg$FAILED;
@@ -1711,15 +1841,15 @@ function peg$parse(input, options) {
}
s7 = peg$parsews();
if (input.charCodeAt(peg$currPos) === 93) {
- s8 = peg$c12;
+ s8 = peg$c13;
peg$currPos++;
} else {
s8 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e19); }
+ if (peg$silentFails === 0) { peg$fail(peg$e20); }
}
if (s8 !== peg$FAILED) {
peg$savedPos = s0;
- s0 = peg$f24(s5, s6);
+ s0 = peg$f26(s5, s6);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
@@ -1765,7 +1895,7 @@ function peg$parse(input, options) {
s4 = peg$parsecomment();
}
peg$savedPos = s0;
- s0 = peg$f25(s1);
+ s0 = peg$f27(s1);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
@@ -1776,18 +1906,18 @@ function peg$parse(input, options) {
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
if (input.charCodeAt(peg$currPos) === 36) {
- s3 = peg$c32;
+ s3 = peg$c34;
peg$currPos++;
} else {
s3 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e40); }
+ if (peg$silentFails === 0) { peg$fail(peg$e42); }
}
if (s3 !== peg$FAILED) {
s4 = peg$parsews();
s5 = peg$parsesequence_or_operator();
if (s5 !== peg$FAILED) {
peg$savedPos = s0;
- s0 = peg$f26(s1, s5);
+ s0 = peg$f28(s1, s5);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
@@ -1812,7 +1942,7 @@ function peg$parse(input, options) {
s1 = peg$parsesequence_or_operator();
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
- s1 = peg$f27(s1);
+ s1 = peg$f29(s1);
}
s0 = s1;
if (s0 === peg$FAILED) {
@@ -1845,7 +1975,7 @@ function peg$parse(input, options) {
if (s2 !== peg$FAILED) {
s3 = peg$parsews();
peg$savedPos = s0;
- s0 = peg$f28(s2);
+ s0 = peg$f30(s2);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
@@ -1858,19 +1988,19 @@ function peg$parse(input, options) {
var s0, s1, s2, s3;
s0 = peg$currPos;
- if (input.substr(peg$currPos, 6) === peg$c33) {
- s1 = peg$c33;
+ if (input.substr(peg$currPos, 6) === peg$c35) {
+ s1 = peg$c35;
peg$currPos += 6;
} else {
s1 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e41); }
+ if (peg$silentFails === 0) { peg$fail(peg$e43); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
s3 = peg$parsenumber();
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
- s0 = peg$f29(s3);
+ s0 = peg$f31(s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
@@ -1887,19 +2017,19 @@ function peg$parse(input, options) {
var s0, s1, s2, s3;
s0 = peg$currPos;
- if (input.substr(peg$currPos, 6) === peg$c34) {
- s1 = peg$c34;
+ if (input.substr(peg$currPos, 6) === peg$c36) {
+ s1 = peg$c36;
peg$currPos += 6;
} else {
s1 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e42); }
+ if (peg$silentFails === 0) { peg$fail(peg$e44); }
}
if (s1 !== peg$FAILED) {
s2 = peg$parsews();
s3 = peg$parsenumber();
if (s3 !== peg$FAILED) {
peg$savedPos = s0;
- s0 = peg$f30(s3);
+ s0 = peg$f32(s3);
} else {
peg$currPos = s0;
s0 = peg$FAILED;
@@ -1916,16 +2046,16 @@ function peg$parse(input, options) {
var s0, s1;
s0 = peg$currPos;
- if (input.substr(peg$currPos, 4) === peg$c35) {
- s1 = peg$c35;
+ if (input.substr(peg$currPos, 4) === peg$c37) {
+ s1 = peg$c37;
peg$currPos += 4;
} else {
s1 = peg$FAILED;
- if (peg$silentFails === 0) { peg$fail(peg$e43); }
+ if (peg$silentFails === 0) { peg$fail(peg$e45); }
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0;
- s1 = peg$f31();
+ s1 = peg$f33();
}
s0 = s1;
diff --git a/packages/mini/krill.pegjs b/packages/mini/krill.pegjs
index 5451cf01..6302614d 100644
--- a/packages/mini/krill.pegjs
+++ b/packages/mini/krill.pegjs
@@ -8,6 +8,7 @@ This program is free software: you can redistribute it and/or modify it under th
// a sequence = a serie of elements placed between quotes
// a stack = a serie of vertically aligned slices sharing the same overall length
// a slice = a serie of horizontally aligned elements
+// a choose = a serie of elements, one of which is chosen at random
{
@@ -81,7 +82,8 @@ DIGIT = [0-9]
// ------------------ delimiters ---------------------------
ws "whitespace" = [ \n\r\t]*
-comma = ws "," ws;
+comma = ws "," ws
+pipe = ws "|" ws
quote = '"' / "'"
// ------------------ steps and cycles ---------------------------
@@ -91,7 +93,7 @@ step_char = [0-9a-zA-Z~] / "-" / "#" / "." / "^" / "_" / ":"
step = ws chars:step_char+ ws { return chars.join("") }
// define a sub cycle e.g. [1 2, 3 [4]]
-sub_cycle = ws "[" ws s:stack ws "]" ws { return s}
+sub_cycle = ws "[" ws s:stack_or_choose ws "]" ws { return s}
// define a timeline e.g <1 3 [3 5]>. We simply defer to a stack and change the alignement
timeline = ws "<" ws sc:single_cycle ws ">" ws
@@ -102,7 +104,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 +124,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);}
@@ -132,14 +137,22 @@ single_cycle = s:(slice_with_modifier)+
{ return new PatternStub(s,"h"); }
// a stack is a serie of vertically aligned single cycles, separated by a comma
+stack_tail = tail:(comma @single_cycle)+
+ { return { alignment: 'v', list: tail }; }
+
+// a choose is a serie of pipe-separated single cycles, one of which is chosen
+// at random each time through the pattern
+choose_tail = tail:(pipe @single_cycle)+
+ { return { alignment: 'r', list: tail }; }
+
// if the stack contains only one element, we don't create a stack but return the
// underlying element
-stack = c:single_cycle cs:(comma v:single_cycle { return v})*
- { if (cs.length == 0 && c instanceof Object) { return c;} else { cs.unshift(c); return new PatternStub(cs,"v");} }
+stack_or_choose = head:single_cycle tail:(stack_tail / choose_tail)?
+ { if (tail && tail.list.length > 0) { return new PatternStub([head, ...tail.list], tail.alignment); } else { return head; } }
// a sequence is a quoted stack
-sequence = ws quote s:stack quote
- { return s; }
+sequence = ws quote sc:stack_or_choose quote
+ { return sc; }
// ------------------ operators ---------------------------
diff --git a/packages/mini/mini.mjs b/packages/mini/mini.mjs
index 20971230..c6b1d50e 100644
--- a/packages/mini/mini.mjs
+++ b/packages/mini/mini.mjs
@@ -10,6 +10,12 @@ import { addMiniLocations } from '@strudel.cycles/eval/shapeshifter.mjs';
const { pure, Pattern, Fraction, stack, slowcat, sequence, timeCat, silence, reify } = strudel;
+var _seedState = 0;
+
+function _nextSeed() {
+ return _seedState++;
+}
+
const applyOptions = (parent) => (pat, i) => {
const ast = parent.source_[i];
const options = ast.options_;
@@ -21,6 +27,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(Math.PI * _nextSeed()).segment(1), operator.arguments_.amount);
// TODO: case 'fixed-step': "%"
}
console.warn(`operator "${operator.type_}" not implemented`);
@@ -82,6 +90,9 @@ export function patternifyAST(ast) {
if (alignment === 'v') {
return stack(...children);
}
+ if (alignment === 'r') {
+ return strudel.chooseInWith(strudel.rand.early(Math.PI * _nextSeed()).segment(1), children);
+ }
const weightedChildren = ast.source_.some((child) => !!child.options_?.weight);
if (!weightedChildren && alignment === 't') {
return slowcat(...children);
diff --git a/packages/mini/test/mini.test.mjs b/packages/mini/test/mini.test.mjs
index 88de3cee..d318c8a7 100644
--- a/packages/mini/test/mini.test.mjs
+++ b/packages/mini/test/mini.test.mjs
@@ -50,4 +50,44 @@ describe('mini', () => {
it('supports euclidean rhythms', () => {
expect(minS('a(3, 8)')).toEqual(['a: 0 - 1/8', 'a: 3/8 - 1/2', 'a: 3/4 - 7/8']);
});
+ it('supports the ? operator', () => {
+ assert.deepStrictEqual(
+ mini('a?').queryArc(0, 20).map(hap => hap.whole.begin),
+ mini('a').degradeBy(0.5).queryArc(0, 20).map(hap => hap.whole.begin));
+ });
+ // testing things that involve pseudo-randomness, so there's a probability we could fail by chance.
+ // these next few tests work with the current PRNG, and are intended to succeed with p > 0.99 even if the PRNG changes
+ // (as long as the PRNG has a relatively-uniform distribution of values)
+ it('supports degradeBy with default of 50%', () => {
+ const haps = mini('a?').queryArc(0, 1000);
+ assert(459 <= haps.length && haps.length <= 541, 'Number of elements did not fall in 99% confidence interval for binomial with p=0.5');
+ });
+ it('supports degradeBy with an argument', () => {
+ const haps = mini('a?0.8').queryArc(0, 1000);
+ assert(haps.length > 0, 'Should have had at least one element when degradeBy was set at 0.8');
+ assert(haps.length < 230, 'Had too many cycles remaining after degradeBy 0.8');
+ });
+ it('supports the random choice operator ("|") with nesting', () => {
+ const numCycles = 900;
+ const haps = mini('a | [b | c] | [d | e | f]').queryArc(0, numCycles);
+ // Should have about 1/3 a, 1/6 each of b | c, and 1/9 each of d | e | f.
+ // Evaluating this distribution with a chi-squared test.
+ // Note: this just evaluates the overall distribution, not things like correlation/runs of values
+ const observed = haps.reduce((acc, hap) => {
+ acc[hap.value] = (acc[hap.value] || 0) + 1;
+ return acc;
+ }, {});
+ const expected = {
+ a: numCycles / 3, b: numCycles / 6, c: numCycles / 6,
+ d: numCycles / 9, e: numCycles / 9, f: numCycles / 9
+ };
+ let chisq = -numCycles;
+ for (let k in expected) {
+ chisq += observed[k] * observed[k] / expected[k];
+ }
+ // 15.086 is the chisq for 5 degrees of freedom at 99%, so for 99% of uniformly-distributed
+ // PRNG, this test should succeed
+ assert(chisq <= 15.086,
+ chisq + ' was expected to be less than 15.086 under chi-squared test');
+ });
});
diff --git a/repl/src/prebake.mjs b/repl/src/prebake.mjs
index a6f33909..ef617621 100644
--- a/repl/src/prebake.mjs
+++ b/repl/src/prebake.mjs
@@ -1,7 +1,7 @@
import { Pattern, toMidi } from '@strudel.cycles/core';
import { samples } from '@strudel.cycles/webaudio';
-export function prebake() {
+export function prebake(isMock = false) {
samples(
{
piano: {
@@ -41,9 +41,11 @@ export function prebake() {
// License: CC-by http://creativecommons.org/licenses/by/3.0/ Author: Alexander Holm
'./piano/',
);
- fetch('EmuSP12.json')
- .then(res => res.json())
- .then(json => samples(json, './EmuSP12/'));
+ if (!isMock) {
+ fetch('EmuSP12.json')
+ .then((res) => res.json())
+ .then((json) => samples(json, './EmuSP12/'));
+ }
}
const maxPan = toMidi('C8');
diff --git a/repl/src/runtime.mjs b/repl/src/runtime.mjs
index b883cfc6..1802a7ad 100644
--- a/repl/src/runtime.mjs
+++ b/repl/src/runtime.mjs
@@ -123,7 +123,7 @@ const uiHelpersMocked = {
backgroundImage: id,
};
-prebake();
+prebake(true);
// TODO: refactor to evalScope
extend(
diff --git a/repl/src/tunes.mjs b/repl/src/tunes.mjs
index a70eef13..b1075af2 100644
--- a/repl/src/tunes.mjs
+++ b/repl/src/tunes.mjs
@@ -1019,3 +1019,14 @@ x=>x.add(7).color('steelblue')
.stack(s("bd:1*2,~ sd:0,[~ hh:0]*2"))
.out()
.pianoroll({vertical:1})`;
+
+export const bossaRandom = `const chords = ""
+const roots = chords.rootNotes(2)
+
+stack(
+ chords.voicings(['F4', 'A5']).struct(
+ \` x@2 ~ x ~ ~ ~ x |
+ x? ~ ~ x@3 ~ x |
+ x? ~ ~ x ~ x@3\`),
+ roots.struct("x [~ x?0.2] x [~ x?] | x!4 | x@2 ~ ~ ~ x x x").transpose("0 7")
+).slow(2).pianoroll().note().piano().out();`;
\ No newline at end of file
diff --git a/repl/src/tunes.snapshot.mjs b/repl/src/tunes.snapshot.mjs
index 17a1d51c..931fbbd5 100644
--- a/repl/src/tunes.snapshot.mjs
+++ b/repl/src/tunes.snapshot.mjs
@@ -2,6 +2,7 @@
export const bassFuge = ["0/1 -> 1/8: {\"note\":\"A2\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2206.5338497506646,\"resonance\":10,\"clip\":1}","3/8 -> 1/2: {\"note\":\"A2\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2827.098521493671,\"resonance\":10,\"clip\":1}","3/4 -> 7/8: {\"note\":\"A2\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":3366.0584981088073,\"resonance\":10,\"clip\":1}","0/1 -> 1/4: {\"note\":\"A3\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2312.732504596285,\"resonance\":10,\"clip\":1}","3/4 -> 1/1: {\"note\":\"A3\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":3443.5028842544402,\"resonance\":10,\"clip\":1}","-7/4 -> 1/4: {\"note\":\"C4\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2312.732504596285,\"resonance\":10,\"clip\":1}","-7/4 -> 1/4: {\"note\":\"E4\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2312.732504596285,\"resonance\":10,\"clip\":1}","1/4 -> 1/2: {\"note\":\"C4\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2727.5302177148174,\"resonance\":10,\"clip\":1}","1/4 -> 1/2: {\"note\":\"E4\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2727.5302177148174,\"resonance\":10,\"clip\":1}","-3/2 -> 1/2: {\"note\":\"A4\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2522.789774516997,\"resonance\":10,\"clip\":1}","-3/2 -> 1/2: {\"note\":\"C5\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2522.789774516997,\"resonance\":10,\"clip\":1}","-3/2 -> 1/2: {\"note\":\"A4\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2522.789774516997,\"resonance\":10,\"clip\":1}","-3/2 -> 1/2: {\"note\":\"C5\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2522.789774516997,\"resonance\":10,\"clip\":1}","1/2 -> 3/4: {\"note\":\"A4\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":3110.8609453791396,\"resonance\":10,\"clip\":1}","1/2 -> 3/4: {\"note\":\"C5\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":3110.8609453791396,\"resonance\":10,\"clip\":1}","-5/4 -> 3/4: {\"note\":\"A4\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2727.5302177148174,\"resonance\":10,\"clip\":1}","-5/4 -> 3/4: {\"note\":\"C5\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2727.5302177148174,\"resonance\":10,\"clip\":1}","-5/4 -> 3/4: {\"note\":\"A4\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2727.5302177148174,\"resonance\":10,\"clip\":1}","-5/4 -> 3/4: {\"note\":\"C5\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2727.5302177148174,\"resonance\":10,\"clip\":1}","-5/4 -> 3/4: {\"note\":\"A4\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2727.5302177148174,\"resonance\":10,\"clip\":1}","-5/4 -> 3/4: {\"note\":\"C5\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2727.5302177148174,\"resonance\":10,\"clip\":1}","3/4 -> 1/1: {\"note\":\"A4\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":3443.5028842544402,\"resonance\":10,\"clip\":1}","3/4 -> 1/1: {\"note\":\"C5\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":3443.5028842544402,\"resonance\":10,\"clip\":1}","-1/1 -> 1/1: {\"note\":\"A4\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2924.3791043233605,\"resonance\":10,\"clip\":1}","-1/1 -> 1/1: {\"note\":\"C5\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2924.3791043233605,\"resonance\":10,\"clip\":1}","-1/1 -> 1/1: {\"note\":\"A4\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2924.3791043233605,\"resonance\":10,\"clip\":1}","-1/1 -> 1/1: {\"note\":\"C5\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2924.3791043233605,\"resonance\":10,\"clip\":1}","-1/1 -> 1/1: {\"note\":\"A4\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2924.3791043233605,\"resonance\":10,\"clip\":1}","-1/1 -> 1/1: {\"note\":\"C5\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2924.3791043233605,\"resonance\":10,\"clip\":1}","-3/4 -> 5/4: {\"note\":\"A4\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2924.3791043233605,\"resonance\":10,\"clip\":1}","-3/4 -> 5/4: {\"note\":\"C5\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2924.3791043233605,\"resonance\":10,\"clip\":1}","-3/4 -> 5/4: {\"note\":\"A4\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2924.3791043233605,\"resonance\":10,\"clip\":1}","-3/4 -> 5/4: {\"note\":\"C5\",\"s\":\"flbass\",\"n\":0,\"gain\":0.3,\"cutoff\":2924.3791043233605,\"resonance\":10,\"clip\":1}","0/1 -> 1/2: {\"s\":\"bd:1\"}","1/2 -> 1/1: {\"s\":\"bd:1\"}","1/2 -> 1/1: {\"s\":\"sd:0\"}","1/4 -> 1/2: {\"s\":\"hh:0\"}","3/4 -> 1/1: {\"s\":\"hh:0\"}"]
export const bornagain = ["0/1 -> 1/8: {\"freq\":55.33,\"s\":\"sawtooth\",\"cutoff\":100.07549369245987,\"pan\":0}","0/1 -> 1/8: {\"freq\":54.725,\"s\":\"sawtooth\",\"cutoff\":100.07549369245987,\"pan\":0}","3/8 -> 1/2: {\"freq\":110.66,\"s\":\"sawtooth\",\"cutoff\":122.35252255075005,\"pan\":0}","3/8 -> 1/2: {\"freq\":109.45,\"s\":\"sawtooth\",\"cutoff\":122.35252255075005,\"pan\":0}","3/8 -> 1/2: {\"freq\":165.99,\"s\":\"sawtooth\",\"cutoff\":122.35252255075005,\"pan\":0}","3/8 -> 1/2: {\"freq\":164.175,\"s\":\"sawtooth\",\"cutoff\":122.35252255075005,\"pan\":0}","3/4 -> 7/8: {\"freq\":221.32,\"s\":\"sawtooth\",\"cutoff\":222.2782655353868,\"pan\":0}","3/4 -> 7/8: {\"freq\":218.9,\"s\":\"sawtooth\",\"cutoff\":222.2782655353868,\"pan\":0}","3/4 -> 7/8: {\"freq\":276.65,\"s\":\"sawtooth\",\"cutoff\":222.2782655353868,\"pan\":0}","3/4 -> 7/8: {\"freq\":273.625,\"s\":\"sawtooth\",\"cutoff\":222.2782655353868,\"pan\":0}","1/8 -> 59/400: {\"freq\":440,\"gain\":0.206361035083454,\"s\":\"sawtooth\",\"cutoff\":100.76042567229793,\"pan\":0}","1/4 -> 109/400: {\"freq\":440,\"gain\":0.2360775017902398,\"s\":\"sawtooth\",\"cutoff\":105.106536505121,\"pan\":0}","1/2 -> 209/400: {\"freq\":440,\"gain\":0.3624358861780295,\"s\":\"sawtooth\",\"cutoff\":134.6100873613776,\"pan\":0}","5/8 -> 259/400: {\"freq\":440,\"gain\":0.4316442271311083,\"s\":\"sawtooth\",\"cutoff\":163.3255267002946,\"pan\":0}","7/8 -> 359/400: {\"freq\":440,\"gain\":0.5078844826422588,\"s\":\"sawtooth\",\"cutoff\":253.6298561999316,\"pan\":0}","7/8 -> 1/1: {\"freq\":55.33,\"s\":\"sawtooth\",\"cutoff\":100.07549369245987,\"pan\":1}","7/8 -> 1/1: {\"freq\":54.725,\"s\":\"sawtooth\",\"cutoff\":100.07549369245987,\"pan\":1}","1/2 -> 5/8: {\"freq\":110.66,\"s\":\"sawtooth\",\"cutoff\":122.35252255075005,\"pan\":1}","1/2 -> 5/8: {\"freq\":109.45,\"s\":\"sawtooth\",\"cutoff\":122.35252255075005,\"pan\":1}","1/2 -> 5/8: {\"freq\":165.99,\"s\":\"sawtooth\",\"cutoff\":122.35252255075005,\"pan\":1}","1/2 -> 5/8: {\"freq\":164.175,\"s\":\"sawtooth\",\"cutoff\":122.35252255075005,\"pan\":1}","1/8 -> 1/4: {\"freq\":221.32,\"s\":\"sawtooth\",\"cutoff\":222.2782655353868,\"pan\":1}","1/8 -> 1/4: {\"freq\":218.9,\"s\":\"sawtooth\",\"cutoff\":222.2782655353868,\"pan\":1}","1/8 -> 1/4: {\"freq\":276.65,\"s\":\"sawtooth\",\"cutoff\":222.2782655353868,\"pan\":1}","1/8 -> 1/4: {\"freq\":273.625,\"s\":\"sawtooth\",\"cutoff\":222.2782655353868,\"pan\":1}","341/400 -> 7/8: {\"freq\":440,\"gain\":0.206361035083454,\"s\":\"sawtooth\",\"cutoff\":100.76042567229793,\"pan\":1}","291/400 -> 3/4: {\"freq\":440,\"gain\":0.2360775017902398,\"s\":\"sawtooth\",\"cutoff\":105.106536505121,\"pan\":1}","191/400 -> 1/2: {\"freq\":440,\"gain\":0.3624358861780295,\"s\":\"sawtooth\",\"cutoff\":134.6100873613776,\"pan\":1}","141/400 -> 3/8: {\"freq\":440,\"gain\":0.4316442271311083,\"s\":\"sawtooth\",\"cutoff\":163.3255267002946,\"pan\":1}","41/400 -> 1/8: {\"freq\":440,\"gain\":0.5078844826422588,\"s\":\"sawtooth\",\"cutoff\":253.6298561999316,\"pan\":1}","0/1 -> 1/8: {\"s\":\"bd\"}","3/8 -> 1/2: {\"s\":\"bd\"}","3/4 -> 7/8: {\"s\":\"bd\"}","0/1 -> 1/4: {\"s\":\"hh\"}","1/4 -> 1/2: {\"s\":\"hh\"}","1/2 -> 3/4: {\"s\":\"hh\"}","3/4 -> 1/1: {\"s\":\"hh\"}","1/2 -> 1/1: {\"s\":\"sd\"}"]
export const bossa = ["0/1 -> 1/4: {\"note\":\"Bb3\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5185185185185186}","0/1 -> 1/4: {\"note\":\"D4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.537037037037037}","0/1 -> 1/4: {\"note\":\"Eb4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","0/1 -> 1/4: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","1/2 -> 5/4: {\"note\":\"Bb3\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5185185185185186}","1/2 -> 5/4: {\"note\":\"D4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.537037037037037}","1/2 -> 5/4: {\"note\":\"Eb4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","1/2 -> 5/4: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","0/1 -> 1/2: {\"note\":\"C2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.41666666666666663}","3/4 -> 7/8: {\"note\":\"G2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.44907407407407407}"]
+export const bossaRandom = ["0/1 -> 1/2: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","0/1 -> 1/2: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","0/1 -> 1/2: {\"note\":\"C5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5833333333333333}","0/1 -> 1/2: {\"note\":\"E5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6018518518518519}","3/4 -> 1/1: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","3/4 -> 1/1: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","3/4 -> 1/1: {\"note\":\"C5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5833333333333333}","3/4 -> 1/1: {\"note\":\"E5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6018518518518519}","0/1 -> 1/2: {\"note\":\"A2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.45833333333333337}","1/2 -> 1/1: {\"note\":\"A2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.45833333333333337}"]
export const bridgeIsOver = ["0/1 -> 5/26: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","5/13 -> 15/26: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","10/13 -> 155/156: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","155/156 -> 15/13: {\"note\":\"A2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.45833333333333337}","0/1 -> 15/26: {\"note\":\"B3\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5231481481481481}","5/52 -> 35/52: {\"note\":\"C#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5324074074074074}","5/26 -> 10/13: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","15/52 -> 45/52: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","5/13 -> 25/26: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","25/52 -> 55/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","15/26 -> 15/13: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","35/52 -> 5/4: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","5/13 -> 25/26: {\"note\":\"B3\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5231481481481481}","25/52 -> 55/52: {\"note\":\"C#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5324074074074074}","15/26 -> 15/13: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","35/52 -> 5/4: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","10/13 -> 35/26: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","45/52 -> 75/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","25/26 -> 20/13: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","10/13 -> 35/26: {\"note\":\"B3\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5231481481481481}","45/52 -> 75/52: {\"note\":\"C#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5324074074074074}","25/26 -> 20/13: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","0/1 -> 80/13: {\"s\":\"mad\"}","155/156 -> 15/13: {\"note\":\"A2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.45833333333333337}","15/13 -> 20/13: {\"note\":\"G2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.44907407407407407}","20/13 -> 45/26: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","25/13 -> 55/26: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","25/52 -> 55/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","15/26 -> 15/13: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","35/52 -> 5/4: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","25/52 -> 55/52: {\"note\":\"C#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5324074074074074}","15/26 -> 15/13: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","35/52 -> 5/4: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","10/13 -> 35/26: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","45/52 -> 75/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","25/26 -> 20/13: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","55/52 -> 85/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","10/13 -> 35/26: {\"note\":\"B3\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5231481481481481}","45/52 -> 75/52: {\"note\":\"C#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5324074074074074}","25/26 -> 20/13: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","55/52 -> 85/52: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","15/13 -> 45/26: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","5/4 -> 95/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","35/26 -> 25/13: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","75/52 -> 105/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","0/1 -> 80/13: {\"s\":\"mad\"}","25/13 -> 55/26: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","30/13 -> 395/156: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","395/156 -> 35/13: {\"note\":\"G2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.44907407407407407}","35/13 -> 40/13: {\"note\":\"A2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.45833333333333337}","75/52 -> 105/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","0/1 -> 80/13: {\"s\":\"mad\"}","35/13 -> 40/13: {\"note\":\"A2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.45833333333333337}","40/13 -> 85/26: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","45/13 -> 95/26: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","50/13 -> 635/156: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","40/13 -> 95/26: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","165/52 -> 15/4: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","85/26 -> 50/13: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","175/52 -> 205/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","45/13 -> 105/26: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","185/52 -> 215/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","95/26 -> 55/13: {\"note\":\"D#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5972222222222222}","15/4 -> 225/52: {\"note\":\"F5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6064814814814814}","45/13 -> 105/26: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","185/52 -> 215/52: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","95/26 -> 55/13: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","15/4 -> 225/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","50/13 -> 115/26: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","205/52 -> 235/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","50/13 -> 115/26: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","205/52 -> 235/52: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","0/1 -> 80/13: {\"s\":\"mad\"}","0/1 -> 80/13: {\"s\":\"mad\"}","50/13 -> 635/156: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","635/156 -> 55/13: {\"note\":\"A2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.45833333333333337}","55/13 -> 60/13: {\"note\":\"G2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.44907407407407407}","60/13 -> 125/26: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","45/13 -> 105/26: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","185/52 -> 215/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","95/26 -> 55/13: {\"note\":\"D#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5972222222222222}","15/4 -> 225/52: {\"note\":\"F5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6064814814814814}","45/13 -> 105/26: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","185/52 -> 215/52: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","95/26 -> 55/13: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","15/4 -> 225/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","50/13 -> 115/26: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","205/52 -> 235/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","105/26 -> 60/13: {\"note\":\"D#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5972222222222222}","215/52 -> 245/52: {\"note\":\"F5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6064814814814814}","50/13 -> 115/26: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","205/52 -> 235/52: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","105/26 -> 60/13: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","215/52 -> 245/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","55/13 -> 125/26: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","225/52 -> 255/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","115/26 -> 5/1: {\"note\":\"D#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5972222222222222}","235/52 -> 265/52: {\"note\":\"F5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6064814814814814}","0/1 -> 80/13: {\"s\":\"mad\"}","5/1 -> 135/26: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","70/13 -> 80/13: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","235/52 -> 265/52: {\"note\":\"F5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6064814814814814}","0/1 -> 80/13: {\"s\":\"mad\"}","70/13 -> 80/13: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","80/13 -> 165/26: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","85/13 -> 175/26: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","90/13 -> 1115/156: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","80/13 -> 175/26: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","25/4 -> 355/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","165/26 -> 90/13: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","335/52 -> 365/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","85/13 -> 185/26: {\"note\":\"D#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5972222222222222}","345/52 -> 375/52: {\"note\":\"F5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6064814814814814}","175/26 -> 95/13: {\"note\":\"G5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6157407407407407}","355/52 -> 385/52: {\"note\":\"A5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.625}","85/13 -> 185/26: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","345/52 -> 375/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","175/26 -> 95/13: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","355/52 -> 385/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","90/13 -> 15/2: {\"note\":\"D#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5972222222222222}","90/13 -> 15/2: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","0/1 -> 80/13: {\"s\":\"mad\"}","80/13 -> 160/13: {\"s\":\"mad\"}","90/13 -> 1115/156: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","1115/156 -> 95/13: {\"note\":\"A2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.45833333333333337}","95/13 -> 100/13: {\"note\":\"G2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.44907407407407407}","100/13 -> 205/26: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","335/52 -> 365/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","85/13 -> 185/26: {\"note\":\"D#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5972222222222222}","345/52 -> 375/52: {\"note\":\"F5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6064814814814814}","175/26 -> 95/13: {\"note\":\"G5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6157407407407407}","355/52 -> 385/52: {\"note\":\"A5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.625}","85/13 -> 185/26: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","345/52 -> 375/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","175/26 -> 95/13: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","355/52 -> 385/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","90/13 -> 15/2: {\"note\":\"D#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5972222222222222}","365/52 -> 395/52: {\"note\":\"F5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6064814814814814}","185/26 -> 100/13: {\"note\":\"G5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6157407407407407}","375/52 -> 405/52: {\"note\":\"A5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.625}","90/13 -> 15/2: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","365/52 -> 395/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","185/26 -> 100/13: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","375/52 -> 405/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","95/13 -> 205/26: {\"note\":\"D#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5972222222222222}","385/52 -> 415/52: {\"note\":\"F5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6064814814814814}","15/2 -> 105/13: {\"note\":\"G5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6157407407407407}","395/52 -> 425/52: {\"note\":\"A5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.625}","80/13 -> 160/13: {\"s\":\"mad\"}","105/13 -> 215/26: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","110/13 -> 1355/156: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","1355/156 -> 115/13: {\"note\":\"G2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.44907407407407407}","115/13 -> 120/13: {\"note\":\"A2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.45833333333333337}","15/2 -> 105/13: {\"note\":\"G5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6157407407407407}","395/52 -> 425/52: {\"note\":\"A5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.625}","80/13 -> 160/13: {\"s\":\"mad\"}","115/13 -> 120/13: {\"note\":\"A2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.45833333333333337}","120/13 -> 245/26: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","125/13 -> 255/26: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","120/13 -> 255/26: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","485/52 -> 515/52: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","245/26 -> 10/1: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","495/52 -> 525/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","125/13 -> 265/26: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","505/52 -> 535/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","255/26 -> 135/13: {\"note\":\"D#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5972222222222222}","515/52 -> 545/52: {\"note\":\"F5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6064814814814814}","125/13 -> 265/26: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","505/52 -> 535/52: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","255/26 -> 135/13: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","515/52 -> 545/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","80/13 -> 160/13: {\"s\":\"mad\"}","80/13 -> 160/13: {\"s\":\"mad\"}","10/1 -> 1595/156: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","1595/156 -> 135/13: {\"note\":\"A2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.45833333333333337}","135/13 -> 140/13: {\"note\":\"G2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.44907407407407407}","140/13 -> 285/26: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","495/52 -> 525/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","125/13 -> 265/26: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","505/52 -> 535/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","255/26 -> 135/13: {\"note\":\"D#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5972222222222222}","515/52 -> 545/52: {\"note\":\"F5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6064814814814814}","125/13 -> 265/26: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","505/52 -> 535/52: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","255/26 -> 135/13: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","515/52 -> 545/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","10/1 -> 275/26: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","525/52 -> 555/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","265/26 -> 140/13: {\"note\":\"D#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5972222222222222}","535/52 -> 565/52: {\"note\":\"F5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6064814814814814}","10/1 -> 275/26: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","525/52 -> 555/52: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","265/26 -> 140/13: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","535/52 -> 565/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","135/13 -> 285/26: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","545/52 -> 575/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","275/26 -> 145/13: {\"note\":\"D#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5972222222222222}","555/52 -> 45/4: {\"note\":\"F5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6064814814814814}","80/13 -> 160/13: {\"s\":\"mad\"}","145/13 -> 295/26: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","150/13 -> 160/13: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","545/52 -> 575/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","275/26 -> 145/13: {\"note\":\"D#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5972222222222222}","555/52 -> 45/4: {\"note\":\"F5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.6064814814814814}","80/13 -> 160/13: {\"s\":\"mad\"}","150/13 -> 160/13: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","160/13 -> 25/2: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","165/13 -> 335/26: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","160/13 -> 335/26: {\"note\":\"B3\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5231481481481481}","645/52 -> 675/52: {\"note\":\"C#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5324074074074074}","25/2 -> 170/13: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","655/52 -> 685/52: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","165/13 -> 345/26: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","665/52 -> 695/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","335/26 -> 175/13: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","675/52 -> 705/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","165/13 -> 345/26: {\"note\":\"B3\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5231481481481481}","665/52 -> 695/52: {\"note\":\"C#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5324074074074074}","335/26 -> 175/13: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","675/52 -> 705/52: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","80/13 -> 160/13: {\"s\":\"mad\"}","160/13 -> 240/13: {\"s\":\"mad\"}","170/13 -> 2075/156: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","2075/156 -> 175/13: {\"note\":\"A2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.45833333333333337}","175/13 -> 180/13: {\"note\":\"G2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.44907407407407407}","180/13 -> 365/26: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","25/2 -> 170/13: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","655/52 -> 685/52: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","165/13 -> 345/26: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","665/52 -> 695/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","335/26 -> 175/13: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","675/52 -> 705/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","165/13 -> 345/26: {\"note\":\"B3\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5231481481481481}","665/52 -> 695/52: {\"note\":\"C#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5324074074074074}","335/26 -> 175/13: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","675/52 -> 705/52: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","170/13 -> 355/26: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","685/52 -> 55/4: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","345/26 -> 180/13: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","695/52 -> 725/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","170/13 -> 355/26: {\"note\":\"B3\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5231481481481481}","685/52 -> 55/4: {\"note\":\"C#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5324074074074074}","345/26 -> 180/13: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","695/52 -> 725/52: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","175/13 -> 365/26: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","705/52 -> 735/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","355/26 -> 185/13: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","55/4 -> 745/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","160/13 -> 240/13: {\"s\":\"mad\"}","180/13 -> 365/26: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","185/13 -> 375/26: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","190/13 -> 2315/156: {\"note\":\"F2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.4398148148148148}","2315/156 -> 15/1: {\"note\":\"G2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.44907407407407407}","175/13 -> 365/26: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","705/52 -> 735/52: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","355/26 -> 185/13: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","55/4 -> 745/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","160/13 -> 240/13: {\"s\":\"mad\"}","15/1 -> 200/13: {\"note\":\"A2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.45833333333333337}","200/13 -> 405/26: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","205/13 -> 415/26: {\"note\":\"B2\",\"clip\":1,\"s\":\"piano\",\"pan\":0.46759259259259256}","200/13 -> 415/26: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","805/52 -> 835/52: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","405/26 -> 210/13: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","815/52 -> 65/4: {\"note\":\"A4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5694444444444444}","205/13 -> 425/26: {\"note\":\"B4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5787037037037037}","825/52 -> 855/52: {\"note\":\"C#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.587962962962963}","415/26 -> 215/13: {\"note\":\"D#5\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5972222222222222}","205/13 -> 425/26: {\"note\":\"D#4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5416666666666667}","825/52 -> 855/52: {\"note\":\"F4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5509259259259259}","415/26 -> 215/13: {\"note\":\"G4\",\"clip\":1,\"s\":\"piano\",\"pan\":0.5601851851851851}","160/13 -> 240/13: {\"s\":\"mad\"}","160/13 -> 240/13: {\"s\":\"mad\"}"]
export const callcenterhero = ["0/1 -> 2/3: F3","2/3 -> 1/1: Ab3","0/1 -> 2/3: Ab3","2/3 -> 1/1: C4","1/3 -> 5/12: Eb4","1/2 -> 7/12: Eb4","1/3 -> 5/12: G4","1/2 -> 7/12: G4","241/675 -> 49/75: F1","0/1 -> 2/3: c2","2/3 -> 4/3: c2","2/3 -> 4/3: c2","0/1 -> 1/3: c4","1/3 -> 2/3: c4","2/3 -> 1/1: c4","1/1 -> 13/12: Eb4","7/6 -> 5/4: Eb4","1/1 -> 13/12: G4","7/6 -> 5/4: G4","5/3 -> 7/4: Ab4","11/6 -> 23/12: Ab4","5/3 -> 7/4: C5","11/6 -> 23/12: C5","691/675 -> 33/25: F1","1141/675 -> 149/75: F1","2/3 -> 4/3: c2","4/3 -> 2/1: c2","2/3 -> 4/3: c2","1/1 -> 4/3: c4","4/3 -> 5/3: c4","5/3 -> 2/1: c4","2/1 -> 7/3: Ab3","2/1 -> 7/3: C4","8/3 -> 10/3: F3","8/3 -> 10/3: Ab3","7/3 -> 29/12: Ab4","5/2 -> 31/12: Ab4","7/3 -> 29/12: C5","5/2 -> 31/12: C5","1591/675 -> 199/75: F1","2/1 -> 8/3: c2","8/3 -> 10/3: c2","2/1 -> 8/3: c2","2/1 -> 7/3: c4","7/3 -> 8/3: c4","8/3 -> 3/1: c4","8/3 -> 10/3: F3","10/3 -> 11/3: Ab3","8/3 -> 10/3: Ab3","10/3 -> 11/3: C4","3/1 -> 37/12: C5","19/6 -> 13/4: C5","3/1 -> 37/12: Eb5","19/6 -> 13/4: Eb5","11/3 -> 15/4: C5","23/6 -> 47/12: C5","11/3 -> 15/4: Eb5","23/6 -> 47/12: Eb5","2041/675 -> 83/25: F1","2491/675 -> 299/75: F1","8/3 -> 10/3: c2","10/3 -> 4/1: c2","10/3 -> 4/1: c2","3/1 -> 10/3: c4","10/3 -> 11/3: c4","11/3 -> 4/1: c4","14/3 -> 5/1: Ab3","14/3 -> 5/1: C4","13/3 -> 53/12: Ab4","9/2 -> 55/12: Ab4","13/3 -> 53/12: C5","9/2 -> 55/12: C5","2941/675 -> 349/75: F1","4/1 -> 14/3: c2","14/3 -> 16/3: c2","14/3 -> 16/3: c2","4/1 -> 13/3: c4","13/3 -> 14/3: c4","14/3 -> 5/1: c4","16/3 -> 6/1: Ab3","16/3 -> 6/1: C4","5/1 -> 61/12: Ab4","31/6 -> 21/4: Ab4","5/1 -> 61/12: C5","31/6 -> 21/4: C5","17/3 -> 23/4: G4","35/6 -> 71/12: G4","17/3 -> 23/4: Bb4","35/6 -> 71/12: Bb4","3391/675 -> 133/25: F1","3841/675 -> 449/75: Ab1","14/3 -> 16/3: c2","16/3 -> 6/1: c2","14/3 -> 16/3: c2","5/1 -> 16/3: c4","16/3 -> 17/3: c4","17/3 -> 6/1: c4","6/1 -> 19/3: C4","6/1 -> 19/3: Eb4","19/3 -> 77/12: G4","13/2 -> 79/12: G4","19/3 -> 77/12: Bb4","13/2 -> 79/12: Bb4","4291/675 -> 499/75: Ab1","6/1 -> 20/3: c2","20/3 -> 22/3: c2","6/1 -> 20/3: c2","6/1 -> 19/3: c4","19/3 -> 20/3: c4","20/3 -> 7/1: c4","22/3 -> 23/3: C4","22/3 -> 23/3: Eb4","7/1 -> 85/12: C5","43/6 -> 29/4: C5","7/1 -> 85/12: Eb5","43/6 -> 29/4: Eb5","23/3 -> 31/4: C5","47/6 -> 95/12: C5","23/3 -> 31/4: Eb5","47/6 -> 95/12: Eb5","4741/675 -> 183/25: Ab1","5191/675 -> 599/75: Ab1","20/3 -> 22/3: c2","22/3 -> 8/1: c2","22/3 -> 8/1: c2","7/1 -> 22/3: c4","22/3 -> 23/3: c4","23/3 -> 8/1: c4","8/1 -> 26/3: Ab3","26/3 -> 9/1: C4","8/1 -> 26/3: C4","26/3 -> 9/1: Eb4","25/3 -> 101/12: Eb5","17/2 -> 103/12: Eb5","25/3 -> 101/12: G5","17/2 -> 103/12: G5","5641/675 -> 649/75: Ab1","8/1 -> 26/3: c2","26/3 -> 28/3: c2","26/3 -> 28/3: c2","8/1 -> 25/3: c4","25/3 -> 26/3: c4","26/3 -> 9/1: c4","9/1 -> 109/12: Eb5","55/6 -> 37/4: Eb5","9/1 -> 109/12: G5","55/6 -> 37/4: G5","29/3 -> 39/4: C5","59/6 -> 119/12: C5","29/3 -> 39/4: Eb5","59/6 -> 119/12: Eb5","6091/675 -> 233/25: Ab1","6541/675 -> 749/75: Ab1","26/3 -> 28/3: c2","28/3 -> 10/1: c2","26/3 -> 28/3: c2","9/1 -> 28/3: c4","28/3 -> 29/3: c4","29/3 -> 10/1: c4","10/1 -> 31/3: C4","10/1 -> 31/3: Eb4","32/3 -> 34/3: Bb3","32/3 -> 34/3: Db4","31/3 -> 125/12: C5","21/2 -> 127/12: C5","31/3 -> 125/12: Eb5","21/2 -> 127/12: Eb5","6991/675 -> 799/75: Ab1","10/1 -> 32/3: c2","32/3 -> 34/3: c2","10/1 -> 32/3: c2","10/1 -> 31/3: c4","31/3 -> 32/3: c4","32/3 -> 11/1: c4","32/3 -> 34/3: Bb3","34/3 -> 35/3: Db4","32/3 -> 34/3: Db4","34/3 -> 35/3: F4","35/3 -> 47/4: Ab4","71/6 -> 143/12: Ab4","35/3 -> 47/4: C5","71/6 -> 143/12: C5","11/1 -> 133/12: Ab4","67/6 -> 45/4: Ab4","11/1 -> 133/12: C5","67/6 -> 45/4: C5","7441/675 -> 283/25: Bb1","7891/675 -> 899/75: Bb1","32/3 -> 34/3: c2","34/3 -> 12/1: c2","34/3 -> 12/1: c2","11/1 -> 34/3: c4","34/3 -> 35/3: c4","35/3 -> 12/1: c4","38/3 -> 13/1: Db4","38/3 -> 13/1: F4","37/3 -> 149/12: Db5","25/2 -> 151/12: Db5","37/3 -> 149/12: F5","25/2 -> 151/12: F5","8341/675 -> 949/75: Bb1","12/1 -> 38/3: c2","38/3 -> 40/3: c2","38/3 -> 40/3: c2","12/1 -> 37/3: c4","37/3 -> 38/3: c4","38/3 -> 13/1: c4","40/3 -> 14/1: Bb3","40/3 -> 14/1: Db4","13/1 -> 157/12: Db5","79/6 -> 53/4: Db5","13/1 -> 157/12: F5","79/6 -> 53/4: F5","41/3 -> 55/4: F5","83/6 -> 167/12: F5","41/3 -> 55/4: Ab5","83/6 -> 167/12: Ab5","8791/675 -> 333/25: Bb1","9241/675 -> 1049/75: Bb1","38/3 -> 40/3: c2","40/3 -> 14/1: c2","38/3 -> 40/3: c2","13/1 -> 40/3: c4","40/3 -> 41/3: c4","41/3 -> 14/1: c4","14/1 -> 43/3: Db4","14/1 -> 43/3: F4","43/3 -> 173/12: F5","29/2 -> 175/12: F5","43/3 -> 173/12: Ab5","29/2 -> 175/12: Ab5","9691/675 -> 1099/75: Bb1","14/1 -> 44/3: c2","44/3 -> 46/3: c2","14/1 -> 44/3: c2","14/1 -> 43/3: c4","43/3 -> 44/3: c4","44/3 -> 15/1: c4","46/3 -> 47/3: Db4","46/3 -> 47/3: F4","15/1 -> 181/12: Db5","91/6 -> 61/4: Db5","15/1 -> 181/12: F5","91/6 -> 61/4: F5","47/3 -> 63/4: Db5","95/6 -> 191/12: Db5","47/3 -> 63/4: F5","95/6 -> 191/12: F5","10141/675 -> 383/25: Bb1","10591/675 -> 1199/75: Bb1","44/3 -> 46/3: c2","46/3 -> 16/1: c2","46/3 -> 16/1: c2","15/1 -> 46/3: c4","46/3 -> 47/3: c4","47/3 -> 16/1: c4","16/1 -> 50/3: C4","50/3 -> 17/1: E4","16/1 -> 50/3: E4","50/3 -> 17/1: G4","49/3 -> 197/12: Bb4","33/2 -> 199/12: Bb4","49/3 -> 197/12: Db5","33/2 -> 199/12: Db5","11041/675 -> 1249/75: C2","16/1 -> 50/3: c2","50/3 -> 52/3: c2","50/3 -> 52/3: c2","16/1 -> 49/3: c4","49/3 -> 50/3: c4","50/3 -> 17/1: c4","17/1 -> 205/12: Bb4","103/6 -> 69/4: Bb4","17/1 -> 205/12: Db5","103/6 -> 69/4: Db5","53/3 -> 71/4: E5","107/6 -> 215/12: E5","53/3 -> 71/4: G5","107/6 -> 215/12: G5","11491/675 -> 433/25: C2","11941/675 -> 1349/75: C2","50/3 -> 52/3: c2","52/3 -> 18/1: c2","50/3 -> 52/3: c2","17/1 -> 52/3: c4","52/3 -> 53/3: c4","53/3 -> 18/1: c4","18/1 -> 55/3: E4","18/1 -> 55/3: G4","56/3 -> 58/3: C4","56/3 -> 58/3: E4","55/3 -> 221/12: E5","37/2 -> 223/12: E5","55/3 -> 221/12: G5","37/2 -> 223/12: G5","12391/675 -> 1399/75: C2","18/1 -> 56/3: c2","56/3 -> 58/3: c2","18/1 -> 56/3: c2","18/1 -> 55/3: c4","55/3 -> 56/3: c4","56/3 -> 19/1: c4","56/3 -> 58/3: C4","58/3 -> 59/3: E4","56/3 -> 58/3: E4","58/3 -> 59/3: G4","19/1 -> 229/12: G5","115/6 -> 77/4: G5","19/1 -> 229/12: Bb5","115/6 -> 77/4: Bb5","59/3 -> 79/4: G5","119/6 -> 239/12: G5","59/3 -> 79/4: Bb5","119/6 -> 239/12: Bb5","12841/675 -> 483/25: C2","13291/675 -> 1499/75: C2","56/3 -> 58/3: c2","58/3 -> 20/1: c2","58/3 -> 20/1: c2","19/1 -> 58/3: c4","58/3 -> 59/3: c4","59/3 -> 20/1: c4","62/3 -> 21/1: E4","62/3 -> 21/1: G4","61/3 -> 245/12: E5","41/2 -> 247/12: E5","61/3 -> 245/12: G5","41/2 -> 247/12: G5","13741/675 -> 1549/75: C2","20/1 -> 62/3: c2","62/3 -> 64/3: c2","62/3 -> 64/3: c2","20/1 -> 61/3: c4","61/3 -> 62/3: c4","62/3 -> 21/1: c4","64/3 -> 22/1: F3","64/3 -> 22/1: Ab3","21/1 -> 253/12: E5","127/6 -> 85/4: E5","21/1 -> 253/12: G5","127/6 -> 85/4: G5","65/3 -> 87/4: Eb4","131/6 -> 263/12: Eb4","65/3 -> 87/4: G4","131/6 -> 263/12: G4","14191/675 -> 533/25: C2","14641/675 -> 1649/75: F1","62/3 -> 64/3: c2","64/3 -> 22/1: c2","62/3 -> 64/3: c2","21/1 -> 64/3: c4","64/3 -> 65/3: c4","65/3 -> 22/1: c4"]
export const caverave = ["0/1 -> 1/2: c1","1/2 -> 1/1: c1","1/2 -> 1/1: x","1/4 -> 1/2: c4","3/4 -> 1/1: c4","0/1 -> 1/2: B1","3/4 -> 1/1: B1","1/4 -> 13/44: A3","1/4 -> 13/44: C#4","1/4 -> 13/44: D4","1/4 -> 13/44: F#4","1/1 -> 3/2: c1","3/2 -> 2/1: c1","3/2 -> 2/1: x","5/4 -> 3/2: c4","7/4 -> 2/1: c4","7/4 -> 2/1: B1","5/4 -> 57/44: A3","5/4 -> 57/44: C#4","5/4 -> 57/44: D4","5/4 -> 57/44: F#4","2/1 -> 5/2: c1","5/2 -> 3/1: c1","5/2 -> 3/1: x","9/4 -> 5/2: c4","11/4 -> 3/1: c4","2/1 -> 5/2: B1","11/4 -> 3/1: B1","5/2 -> 28/11: A3","5/2 -> 28/11: C#4","5/2 -> 28/11: D4","5/2 -> 28/11: F#4","3/1 -> 7/2: c1","7/2 -> 4/1: c1","7/2 -> 4/1: x","13/4 -> 7/2: c4","15/4 -> 4/1: c4","15/4 -> 4/1: B1","7/2 -> 39/11: A3","7/2 -> 39/11: C#4","7/2 -> 39/11: D4","7/2 -> 39/11: F#4","4/1 -> 9/2: c1","9/2 -> 5/1: c1","9/2 -> 5/1: x","17/4 -> 9/2: c4","19/4 -> 5/1: c4","4/1 -> 9/2: A1","19/4 -> 5/1: A1","17/4 -> 189/44: G3","17/4 -> 189/44: B3","17/4 -> 189/44: C#4","17/4 -> 189/44: F#4","5/1 -> 11/2: c1","11/2 -> 6/1: c1","11/2 -> 6/1: x","21/4 -> 11/2: c4","23/4 -> 6/1: c4","23/4 -> 6/1: A1","21/4 -> 233/44: G3","21/4 -> 233/44: B3","21/4 -> 233/44: C#4","21/4 -> 233/44: F#4","6/1 -> 13/2: c1","13/2 -> 7/1: c1","13/2 -> 7/1: x","25/4 -> 13/2: c4","27/4 -> 7/1: c4","6/1 -> 13/2: A1","27/4 -> 7/1: A1","13/2 -> 72/11: G3","13/2 -> 72/11: B3","13/2 -> 72/11: C#4","13/2 -> 72/11: F#4","7/1 -> 15/2: c1","15/2 -> 8/1: c1","15/2 -> 63/8: x","63/8 -> 8/1: x","29/4 -> 15/2: c4","31/4 -> 8/1: c4","7/1 -> 15/2: A1","15/2 -> 8/1: A1","15/2 -> 83/11: G3","15/2 -> 83/11: B3","15/2 -> 83/11: C#4","15/2 -> 83/11: F#4","8/1 -> 17/2: c1","17/2 -> 9/1: c1","17/2 -> 9/1: x","33/4 -> 17/2: c4","35/4 -> 9/1: c4","8/1 -> 17/2: G1","35/4 -> 9/1: G1","33/4 -> 365/44: G3","33/4 -> 365/44: B3","33/4 -> 365/44: D4","33/4 -> 365/44: F#4","9/1 -> 19/2: c1","19/2 -> 10/1: c1","19/2 -> 10/1: x","37/4 -> 19/2: c4","39/4 -> 10/1: c4","39/4 -> 10/1: G1","37/4 -> 409/44: G3","37/4 -> 409/44: B3","37/4 -> 409/44: D4","37/4 -> 409/44: F#4","10/1 -> 21/2: c1","21/2 -> 11/1: c1","21/2 -> 11/1: x","41/4 -> 21/2: c4","43/4 -> 11/1: c4","10/1 -> 21/2: G1","43/4 -> 11/1: G1","21/2 -> 116/11: G3","21/2 -> 116/11: B3","21/2 -> 116/11: D4","21/2 -> 116/11: F#4","11/1 -> 23/2: c1","23/2 -> 12/1: c1","23/2 -> 12/1: x","45/4 -> 23/2: c4","47/4 -> 12/1: c4","47/4 -> 12/1: G1","23/2 -> 127/11: G3","23/2 -> 127/11: B3","23/2 -> 127/11: D4","23/2 -> 127/11: F#4","12/1 -> 25/2: c1","25/2 -> 13/1: c1","25/2 -> 13/1: x","49/4 -> 25/2: c4","51/4 -> 13/1: c4","12/1 -> 25/2: F#1","51/4 -> 13/1: F#1","49/4 -> 541/44: A#3","49/4 -> 541/44: D4","49/4 -> 541/44: E4","49/4 -> 541/44: G4","13/1 -> 27/2: c1","27/2 -> 14/1: c1","27/2 -> 14/1: x","53/4 -> 27/2: c4","55/4 -> 14/1: c4","55/4 -> 14/1: F#1","53/4 -> 585/44: A#3","53/4 -> 585/44: D4","53/4 -> 585/44: E4","53/4 -> 585/44: G4","14/1 -> 29/2: c1","29/2 -> 15/1: c1","29/2 -> 15/1: x","57/4 -> 29/2: c4","59/4 -> 15/1: c4","14/1 -> 29/2: F#2","59/4 -> 15/1: F#2","29/2 -> 160/11: A#3","29/2 -> 160/11: D4","29/2 -> 160/11: E4","29/2 -> 160/11: G4","15/1 -> 31/2: c1","31/2 -> 16/1: c1","31/2 -> 127/8: x","127/8 -> 16/1: x","61/4 -> 31/2: c4","63/4 -> 16/1: c4","15/1 -> 31/2: F#1","31/2 -> 16/1: F#1","31/2 -> 171/11: A#3","31/2 -> 171/11: D4","31/2 -> 171/11: E4","31/2 -> 171/11: G4","16/1 -> 33/2: c1","33/2 -> 17/1: c1","33/2 -> 17/1: x","65/4 -> 33/2: c4","67/4 -> 17/1: c4","16/1 -> 33/2: C2","67/4 -> 17/1: C2","65/4 -> 717/44: A#3","65/4 -> 717/44: D4","65/4 -> 717/44: D#4","65/4 -> 717/44: G4","17/1 -> 35/2: c1","35/2 -> 18/1: c1","35/2 -> 18/1: x","69/4 -> 35/2: c4","71/4 -> 18/1: c4","71/4 -> 18/1: C2","69/4 -> 761/44: A#3","69/4 -> 761/44: D4","69/4 -> 761/44: D#4","69/4 -> 761/44: G4","18/1 -> 37/2: c1","37/2 -> 19/1: c1","37/2 -> 19/1: x","73/4 -> 37/2: c4","75/4 -> 19/1: c4","18/1 -> 37/2: C2","75/4 -> 19/1: C2","37/2 -> 204/11: A#3","37/2 -> 204/11: D4","37/2 -> 204/11: D#4","37/2 -> 204/11: G4","19/1 -> 39/2: c1","39/2 -> 20/1: c1","39/2 -> 20/1: x","77/4 -> 39/2: c4","79/4 -> 20/1: c4","79/4 -> 20/1: C2","39/2 -> 215/11: A#3","39/2 -> 215/11: D4","39/2 -> 215/11: D#4","39/2 -> 215/11: G4","20/1 -> 41/2: c1","41/2 -> 21/1: c1","41/2 -> 21/1: x","81/4 -> 41/2: c4","83/4 -> 21/1: c4","20/1 -> 41/2: A#1","83/4 -> 21/1: A#1","81/4 -> 893/44: G#3","81/4 -> 893/44: C4","81/4 -> 893/44: D4","81/4 -> 893/44: G4","21/1 -> 43/2: c1","43/2 -> 22/1: c1","43/2 -> 22/1: x","85/4 -> 43/2: c4","87/4 -> 22/1: c4","87/4 -> 22/1: A#1","85/4 -> 937/44: G#3","85/4 -> 937/44: C4","85/4 -> 937/44: D4","85/4 -> 937/44: G4","22/1 -> 45/2: c1","45/2 -> 23/1: c1","45/2 -> 23/1: x","89/4 -> 45/2: c4","91/4 -> 23/1: c4","22/1 -> 45/2: A#1","91/4 -> 23/1: A#1","45/2 -> 248/11: G#3","45/2 -> 248/11: C4","45/2 -> 248/11: D4","45/2 -> 248/11: G4","23/1 -> 47/2: c1","47/2 -> 24/1: c1","47/2 -> 191/8: x","191/8 -> 24/1: x","93/4 -> 47/2: c4","95/4 -> 24/1: c4","23/1 -> 47/2: A#1","47/2 -> 24/1: A#1","47/2 -> 259/11: G#3","47/2 -> 259/11: C4","47/2 -> 259/11: D4","47/2 -> 259/11: G4","24/1 -> 49/2: c1","49/2 -> 25/1: c1","49/2 -> 25/1: x","97/4 -> 49/2: c4","99/4 -> 25/1: c4","24/1 -> 49/2: G#1","99/4 -> 25/1: G#1","97/4 -> 1069/44: G#3","97/4 -> 1069/44: C4","97/4 -> 1069/44: D#4","97/4 -> 1069/44: G4","25/1 -> 51/2: c1","51/2 -> 26/1: c1","51/2 -> 26/1: x","101/4 -> 51/2: c4","103/4 -> 26/1: c4","103/4 -> 26/1: G#1","101/4 -> 1113/44: G#3","101/4 -> 1113/44: C4","101/4 -> 1113/44: D#4","101/4 -> 1113/44: G4","26/1 -> 53/2: c1","53/2 -> 27/1: c1","53/2 -> 27/1: x","105/4 -> 53/2: c4","107/4 -> 27/1: c4","26/1 -> 53/2: G#1","107/4 -> 27/1: G#1","53/2 -> 292/11: G#3","53/2 -> 292/11: C4","53/2 -> 292/11: D#4","53/2 -> 292/11: G4","27/1 -> 55/2: c1","55/2 -> 28/1: c1","55/2 -> 28/1: x","109/4 -> 55/2: c4","111/4 -> 28/1: c4","111/4 -> 28/1: G#1","55/2 -> 303/11: G#3","55/2 -> 303/11: C4","55/2 -> 303/11: D#4","55/2 -> 303/11: G4","28/1 -> 57/2: c1","57/2 -> 29/1: c1","113/4 -> 57/2: c4","115/4 -> 29/1: c4","28/1 -> 57/2: G1","115/4 -> 29/1: G1","113/4 -> 1245/44: B3","113/4 -> 1245/44: D#4","113/4 -> 1245/44: F4","113/4 -> 1245/44: G#4","29/1 -> 59/2: c1","59/2 -> 30/1: c1","117/4 -> 59/2: c4","119/4 -> 30/1: c4","119/4 -> 30/1: G1","117/4 -> 1289/44: B3","117/4 -> 1289/44: D#4","117/4 -> 1289/44: F4","117/4 -> 1289/44: G#4","30/1 -> 61/2: c1","61/2 -> 31/1: c1","121/4 -> 61/2: c4","123/4 -> 31/1: c4","30/1 -> 61/2: G2","123/4 -> 31/1: G2","61/2 -> 336/11: B3","61/2 -> 336/11: D#4","61/2 -> 336/11: F4","61/2 -> 336/11: G#4","31/1 -> 63/2: c1","63/2 -> 32/1: c1","125/4 -> 63/2: c4","127/4 -> 32/1: c4","31/1 -> 63/2: G1","63/2 -> 32/1: G1","63/2 -> 347/11: B3","63/2 -> 347/11: D#4","63/2 -> 347/11: F4","63/2 -> 347/11: G#4","32/1 -> 65/2: c1","65/2 -> 33/1: c1","65/2 -> 33/1: x","129/4 -> 65/2: c4","131/4 -> 33/1: c4","65/2 -> 33/1: D4","129/4 -> 131/4: F#4","32/1 -> 65/2: D5","127/4 -> 129/4: E5","131/4 -> 133/4: E5","32/1 -> 65/2: B1","131/4 -> 33/1: B1","129/4 -> 1421/44: A3","129/4 -> 1421/44: C#4","129/4 -> 1421/44: D4","129/4 -> 1421/44: F#4","33/1 -> 67/2: c1","67/2 -> 34/1: c1","67/2 -> 34/1: x","133/4 -> 67/2: c4","135/4 -> 34/1: c4","67/2 -> 34/1: D4","133/4 -> 135/4: F#4","33/1 -> 67/2: D5","131/4 -> 133/4: E5","135/4 -> 137/4: E5","135/4 -> 34/1: B1","133/4 -> 1465/44: A3","133/4 -> 1465/44: C#4","133/4 -> 1465/44: D4","133/4 -> 1465/44: F#4","34/1 -> 69/2: c1","69/2 -> 35/1: c1","69/2 -> 35/1: x","137/4 -> 69/2: c4","139/4 -> 35/1: c4","69/2 -> 35/1: D4","137/4 -> 139/4: F#4","34/1 -> 69/2: D5","135/4 -> 137/4: E5","139/4 -> 141/4: E5","34/1 -> 69/2: B1","139/4 -> 35/1: B1","69/2 -> 380/11: A3","69/2 -> 380/11: C#4","69/2 -> 380/11: D4","69/2 -> 380/11: F#4","35/1 -> 71/2: c1","71/2 -> 36/1: c1","71/2 -> 36/1: x","141/4 -> 71/2: c4","143/4 -> 36/1: c4","71/2 -> 36/1: D4","141/4 -> 143/4: F#4","35/1 -> 71/2: D5","139/4 -> 141/4: E5","143/4 -> 145/4: D5","143/4 -> 36/1: B1","71/2 -> 391/11: A3","71/2 -> 391/11: C#4","71/2 -> 391/11: D4","71/2 -> 391/11: F#4","36/1 -> 73/2: c1","73/2 -> 37/1: c1","73/2 -> 37/1: x","145/4 -> 73/2: c4","147/4 -> 37/1: c4","73/2 -> 37/1: C#4","145/4 -> 147/4: E4","36/1 -> 73/2: C#5","143/4 -> 145/4: D5","147/4 -> 149/4: D5","36/1 -> 73/2: A1","147/4 -> 37/1: A1","145/4 -> 1597/44: G3","145/4 -> 1597/44: B3","145/4 -> 1597/44: C#4","145/4 -> 1597/44: F#4","37/1 -> 75/2: c1","75/2 -> 38/1: c1","75/2 -> 38/1: x","149/4 -> 75/2: c4","151/4 -> 38/1: c4","75/2 -> 38/1: C#4","149/4 -> 151/4: E4","37/1 -> 75/2: C#5","147/4 -> 149/4: D5","151/4 -> 153/4: D5","151/4 -> 38/1: A1","149/4 -> 1641/44: G3","149/4 -> 1641/44: B3","149/4 -> 1641/44: C#4","149/4 -> 1641/44: F#4","38/1 -> 77/2: c1","77/2 -> 39/1: c1","77/2 -> 39/1: x","153/4 -> 77/2: c4","155/4 -> 39/1: c4","77/2 -> 39/1: C#4","153/4 -> 155/4: E4","38/1 -> 77/2: C#5","151/4 -> 153/4: D5","155/4 -> 157/4: D5","38/1 -> 77/2: A1","155/4 -> 39/1: A1","77/2 -> 424/11: G3","77/2 -> 424/11: B3","77/2 -> 424/11: C#4","77/2 -> 424/11: F#4","39/1 -> 79/2: c1","79/2 -> 40/1: c1","79/2 -> 319/8: x","319/8 -> 40/1: x","157/4 -> 79/2: c4","159/4 -> 40/1: c4","79/2 -> 40/1: C#4","157/4 -> 159/4: E4","39/1 -> 79/2: C#5","155/4 -> 157/4: D5","159/4 -> 161/4: C#5","39/1 -> 79/2: A1","79/2 -> 40/1: A1","79/2 -> 435/11: G3","79/2 -> 435/11: B3","79/2 -> 435/11: C#4","79/2 -> 435/11: F#4","40/1 -> 81/2: c1","81/2 -> 41/1: c1","81/2 -> 41/1: x","161/4 -> 81/2: c4","163/4 -> 41/1: c4","81/2 -> 41/1: B3","161/4 -> 163/4: D4","40/1 -> 81/2: B4","159/4 -> 161/4: C#5","163/4 -> 165/4: C#5","40/1 -> 81/2: G1","163/4 -> 41/1: G1","161/4 -> 1773/44: G3","161/4 -> 1773/44: B3","161/4 -> 1773/44: D4","161/4 -> 1773/44: F#4","41/1 -> 83/2: c1","83/2 -> 42/1: c1","83/2 -> 42/1: x","165/4 -> 83/2: c4","167/4 -> 42/1: c4","83/2 -> 42/1: B3","165/4 -> 167/4: D4","41/1 -> 83/2: B4","163/4 -> 165/4: C#5","167/4 -> 169/4: C#5","167/4 -> 42/1: G1","165/4 -> 1817/44: G3","165/4 -> 1817/44: B3","165/4 -> 1817/44: D4","165/4 -> 1817/44: F#4","42/1 -> 85/2: c1","85/2 -> 43/1: c1","85/2 -> 43/1: x","169/4 -> 85/2: c4","171/4 -> 43/1: c4","85/2 -> 43/1: B3","169/4 -> 171/4: D4","42/1 -> 85/2: B4","167/4 -> 169/4: C#5","171/4 -> 173/4: C#5","42/1 -> 85/2: G1","171/4 -> 43/1: G1","85/2 -> 468/11: G3","85/2 -> 468/11: B3","85/2 -> 468/11: D4","85/2 -> 468/11: F#4","43/1 -> 87/2: c1","87/2 -> 44/1: c1","87/2 -> 44/1: x","173/4 -> 87/2: c4","175/4 -> 44/1: c4","87/2 -> 44/1: B3","173/4 -> 175/4: D4","43/1 -> 87/2: B4","171/4 -> 173/4: C#5","175/4 -> 177/4: B4","175/4 -> 44/1: G1","87/2 -> 479/11: G3","87/2 -> 479/11: B3","87/2 -> 479/11: D4","87/2 -> 479/11: F#4","44/1 -> 89/2: c1","89/2 -> 45/1: c1","89/2 -> 45/1: x","177/4 -> 89/2: c4","179/4 -> 45/1: c4","89/2 -> 45/1: A#3","177/4 -> 179/4: C#4","44/1 -> 89/2: A#4","175/4 -> 177/4: B4","179/4 -> 181/4: B4","44/1 -> 89/2: F#1","179/4 -> 45/1: F#1","177/4 -> 1949/44: A#3","177/4 -> 1949/44: D4","177/4 -> 1949/44: E4","177/4 -> 1949/44: G4","45/1 -> 91/2: c1","91/2 -> 46/1: c1","91/2 -> 46/1: x","181/4 -> 91/2: c4","183/4 -> 46/1: c4","91/2 -> 46/1: A#3","181/4 -> 183/4: C#4","45/1 -> 91/2: A#4","179/4 -> 181/4: B4","183/4 -> 185/4: B4","183/4 -> 46/1: F#1","181/4 -> 1993/44: A#3","181/4 -> 1993/44: D4","181/4 -> 1993/44: E4","181/4 -> 1993/44: G4","46/1 -> 93/2: c1","93/2 -> 47/1: c1","93/2 -> 47/1: x","185/4 -> 93/2: c4","187/4 -> 47/1: c4","93/2 -> 47/1: A#3","185/4 -> 187/4: C#4","46/1 -> 93/2: A#4","183/4 -> 185/4: B4","187/4 -> 189/4: B4","46/1 -> 93/2: F#2","187/4 -> 47/1: F#2","93/2 -> 512/11: A#3","93/2 -> 512/11: D4","93/2 -> 512/11: E4","93/2 -> 512/11: G4","47/1 -> 95/2: c1","95/2 -> 48/1: c1","95/2 -> 383/8: x","383/8 -> 48/1: x","189/4 -> 95/2: c4","191/4 -> 48/1: c4","95/2 -> 48/1: A#3","189/4 -> 191/4: C#4","47/1 -> 95/2: A#4","187/4 -> 189/4: B4","191/4 -> 193/4: E5","47/1 -> 95/2: F#1","95/2 -> 48/1: F#1","95/2 -> 523/11: A#3","95/2 -> 523/11: D4","95/2 -> 523/11: E4","95/2 -> 523/11: G4","48/1 -> 97/2: c1","97/2 -> 49/1: c1","97/2 -> 49/1: x","193/4 -> 97/2: c4","195/4 -> 49/1: c4","97/2 -> 49/1: D#4","193/4 -> 195/4: G4","48/1 -> 97/2: D#5","191/4 -> 193/4: F5","195/4 -> 197/4: F5","48/1 -> 97/2: C2","195/4 -> 49/1: C2","193/4 -> 2125/44: A#3","193/4 -> 2125/44: D4","193/4 -> 2125/44: D#4","193/4 -> 2125/44: G4","49/1 -> 99/2: c1","99/2 -> 50/1: c1","99/2 -> 50/1: x","197/4 -> 99/2: c4","199/4 -> 50/1: c4","99/2 -> 50/1: D#4","197/4 -> 199/4: G4","49/1 -> 99/2: D#5","195/4 -> 197/4: F5","199/4 -> 201/4: F5","199/4 -> 50/1: C2","197/4 -> 2169/44: A#3","197/4 -> 2169/44: D4","197/4 -> 2169/44: D#4","197/4 -> 2169/44: G4","50/1 -> 101/2: c1","101/2 -> 51/1: c1","101/2 -> 51/1: x","201/4 -> 101/2: c4","203/4 -> 51/1: c4","101/2 -> 51/1: D#4","201/4 -> 203/4: G4","50/1 -> 101/2: D#5","199/4 -> 201/4: F5","203/4 -> 205/4: F5","50/1 -> 101/2: C2","203/4 -> 51/1: C2","101/2 -> 556/11: A#3","101/2 -> 556/11: D4","101/2 -> 556/11: D#4","101/2 -> 556/11: G4","51/1 -> 103/2: c1","103/2 -> 52/1: c1","103/2 -> 52/1: x","205/4 -> 103/2: c4","207/4 -> 52/1: c4","103/2 -> 52/1: D#4","205/4 -> 207/4: G4","51/1 -> 103/2: D#5","203/4 -> 205/4: F5","207/4 -> 209/4: D#5","207/4 -> 52/1: C2","103/2 -> 567/11: A#3","103/2 -> 567/11: D4","103/2 -> 567/11: D#4","103/2 -> 567/11: G4","52/1 -> 105/2: c1","105/2 -> 53/1: c1","105/2 -> 53/1: x","209/4 -> 105/2: c4","211/4 -> 53/1: c4","105/2 -> 53/1: D4","209/4 -> 211/4: F4","52/1 -> 105/2: D5","207/4 -> 209/4: D#5","211/4 -> 213/4: D#5","52/1 -> 105/2: A#1","211/4 -> 53/1: A#1","209/4 -> 2301/44: G#3","209/4 -> 2301/44: C4","209/4 -> 2301/44: D4","209/4 -> 2301/44: G4","53/1 -> 107/2: c1","107/2 -> 54/1: c1","107/2 -> 54/1: x","213/4 -> 107/2: c4","215/4 -> 54/1: c4","107/2 -> 54/1: D4","213/4 -> 215/4: F4","53/1 -> 107/2: D5","211/4 -> 213/4: D#5","215/4 -> 217/4: D#5","215/4 -> 54/1: A#1","213/4 -> 2345/44: G#3","213/4 -> 2345/44: C4","213/4 -> 2345/44: D4","213/4 -> 2345/44: G4","54/1 -> 109/2: c1","109/2 -> 55/1: c1","109/2 -> 55/1: x","217/4 -> 109/2: c4","219/4 -> 55/1: c4","109/2 -> 55/1: D4","217/4 -> 219/4: F4","54/1 -> 109/2: D5","215/4 -> 217/4: D#5","219/4 -> 221/4: D#5","54/1 -> 109/2: A#1","219/4 -> 55/1: A#1","109/2 -> 600/11: G#3","109/2 -> 600/11: C4","109/2 -> 600/11: D4","109/2 -> 600/11: G4","55/1 -> 111/2: c1","111/2 -> 56/1: c1","111/2 -> 447/8: x","447/8 -> 56/1: x","221/4 -> 111/2: c4","223/4 -> 56/1: c4","111/2 -> 56/1: D4","221/4 -> 223/4: F4","55/1 -> 111/2: D5","219/4 -> 221/4: D#5","223/4 -> 225/4: D5","55/1 -> 111/2: A#1","111/2 -> 56/1: A#1","111/2 -> 611/11: G#3","111/2 -> 611/11: C4","111/2 -> 611/11: D4","111/2 -> 611/11: G4","113/2 -> 57/1: x","225/4 -> 113/2: c4","227/4 -> 57/1: c4","113/2 -> 57/1: C4","225/4 -> 227/4: D#4","56/1 -> 113/2: C5","223/4 -> 225/4: D5","227/4 -> 229/4: D5","56/1 -> 113/2: G#1","227/4 -> 57/1: G#1","225/4 -> 2477/44: G#3","225/4 -> 2477/44: C4","225/4 -> 2477/44: D#4","225/4 -> 2477/44: G4","115/2 -> 58/1: x","229/4 -> 115/2: c4","231/4 -> 58/1: c4","115/2 -> 58/1: C4","229/4 -> 231/4: D#4","57/1 -> 115/2: C5","227/4 -> 229/4: D5","231/4 -> 233/4: D5","231/4 -> 58/1: G#1","229/4 -> 2521/44: G#3","229/4 -> 2521/44: C4","229/4 -> 2521/44: D#4","229/4 -> 2521/44: G4","117/2 -> 59/1: x","233/4 -> 117/2: c4","235/4 -> 59/1: c4","117/2 -> 59/1: C4","233/4 -> 235/4: D#4","58/1 -> 117/2: C5","231/4 -> 233/4: D5","235/4 -> 237/4: D5","58/1 -> 117/2: G#1","235/4 -> 59/1: G#1","117/2 -> 644/11: G#3","117/2 -> 644/11: C4","117/2 -> 644/11: D#4","117/2 -> 644/11: G4","119/2 -> 60/1: x","237/4 -> 119/2: c4","239/4 -> 60/1: c4","119/2 -> 60/1: C4","237/4 -> 239/4: D#4","59/1 -> 119/2: C5","235/4 -> 237/4: D5","239/4 -> 241/4: C5","239/4 -> 60/1: G#1","119/2 -> 655/11: G#3","119/2 -> 655/11: C4","119/2 -> 655/11: D#4","119/2 -> 655/11: G4"]
diff --git a/tutorial/tutorial.mdx b/tutorial/tutorial.mdx
index ca1ec749..f8995a33 100644
--- a/tutorial/tutorial.mdx
+++ b/tutorial/tutorial.mdx
@@ -192,8 +192,6 @@ Compared to [tidal mini notation](https://tidalcycles.org/docs/patternlib/tutori
- [ ] Tie symbols "\_"
- [ ] feet marking "."
-- [ ] random choice "|"
-- [ ] Random removal "?"
- [ ] Polymetric sequences "{ ... }"
- [ ] Fixed steps using "%"