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 "%"