From 8cb352cfe82f2f765e34af0d0cbfaca38e17a200 Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Mon, 4 Mar 2024 14:56:56 +0000 Subject: [PATCH 01/22] allow timecat lengths/weights to be inferred from mininotation --- packages/core/pattern.mjs | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 00f20adf7..cff22daca 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -1245,13 +1245,25 @@ export function cat(...pats) { return slowcat(...pats); } -/** Like `seq`, but each step has a length, relative to the whole. +/** Sequences patterns like `seq`, but each pattern has a length, relative to the whole. + * This length can either be provided as a [length, pattern] pair, or inferred from + * mininotation as the number of toplevel steps. The latter only works if the mininotation + * hasn't first been modified by another function. * @return {Pattern} * @example * timeCat([3,"e3"],[1, "g3"]).note() - * // "e3@3 g3".note() + * // the same as "e3@3 g3".note() + * @example + * timeCat("bd sd cp","hh hh").sound() + * // the same as "bd sd cp hh hh".sound() */ export function timeCat(...timepats) { + // Weights are either provided in [weight, pattern] pairs, or as '__weight' + // elements added to pattern objects or provided from unadulterated mininotation + // patterns. + const findWeight = x => Array.isArray(x) ? x : [x.__weight ?? 1, x]; + timepats = timepats.map(findWeight); + const total = timepats.map((a) => a[0]).reduce((a, b) => a.add(b), Fraction(0)); let begin = Fraction(0); const pats = []; @@ -1637,9 +1649,9 @@ export const { fastGap, fastgap } = register(['fastGap', 'fastgap'], function (f const newWhole = !hap.whole ? undefined : new TimeSpan( - newPart.begin.sub(begin.sub(hap.whole.begin).div(factor)), - newPart.end.add(hap.whole.end.sub(end).div(factor)), - ); + newPart.begin.sub(begin.sub(hap.whole.begin).div(factor)), + newPart.end.add(hap.whole.end.sub(end).div(factor)), + ); return new Hap(newWhole, newPart, hap.value, hap.context); }; return pat.withQuerySpanMaybe(qf).withHap(ef).splitQueries(); From 33237685b31f418289f0abb067884f1485d5a096 Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Mon, 4 Mar 2024 14:57:34 +0000 Subject: [PATCH 02/22] snapshot --- test/__snapshots__/examples.test.mjs.snap | 25 +++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/__snapshots__/examples.test.mjs.snap b/test/__snapshots__/examples.test.mjs.snap index dc6da1742..cb75f9bdf 100644 --- a/test/__snapshots__/examples.test.mjs.snap +++ b/test/__snapshots__/examples.test.mjs.snap @@ -6999,6 +6999,31 @@ exports[`runs examples > example "timeCat" example index 0 1`] = ` ] `; +exports[`runs examples > example "timeCat" example index 1 1`] = ` +[ + "[ 0/1 → 1/5 | s:bd ]", + "[ 1/5 → 2/5 | s:sd ]", + "[ 2/5 → 3/5 | s:cp ]", + "[ 3/5 → 4/5 | s:hh ]", + "[ 4/5 → 1/1 | s:hh ]", + "[ 1/1 → 6/5 | s:bd ]", + "[ 6/5 → 7/5 | s:sd ]", + "[ 7/5 → 8/5 | s:cp ]", + "[ 8/5 → 9/5 | s:hh ]", + "[ 9/5 → 2/1 | s:hh ]", + "[ 2/1 → 11/5 | s:bd ]", + "[ 11/5 → 12/5 | s:sd ]", + "[ 12/5 → 13/5 | s:cp ]", + "[ 13/5 → 14/5 | s:hh ]", + "[ 14/5 → 3/1 | s:hh ]", + "[ 3/1 → 16/5 | s:bd ]", + "[ 16/5 → 17/5 | s:sd ]", + "[ 17/5 → 18/5 | s:cp ]", + "[ 18/5 → 19/5 | s:hh ]", + "[ 19/5 → 4/1 | s:hh ]", +] +`; + exports[`runs examples > example "transpose" example index 0 1`] = ` [ "[ 0/1 → 1/4 | note:C2 ]", From 65ce56d321d741397fb92e5eee8e31afa6166924 Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Mon, 4 Mar 2024 14:58:32 +0000 Subject: [PATCH 03/22] format --- packages/core/pattern.mjs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index cff22daca..975a9026f 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -1245,8 +1245,8 @@ export function cat(...pats) { return slowcat(...pats); } -/** Sequences patterns like `seq`, but each pattern has a length, relative to the whole. - * This length can either be provided as a [length, pattern] pair, or inferred from +/** Sequences patterns like `seq`, but each pattern has a length, relative to the whole. + * This length can either be provided as a [length, pattern] pair, or inferred from * mininotation as the number of toplevel steps. The latter only works if the mininotation * hasn't first been modified by another function. * @return {Pattern} @@ -1258,10 +1258,10 @@ export function cat(...pats) { * // the same as "bd sd cp hh hh".sound() */ export function timeCat(...timepats) { - // Weights are either provided in [weight, pattern] pairs, or as '__weight' - // elements added to pattern objects or provided from unadulterated mininotation + // Weights are either provided in [weight, pattern] pairs, or as '__weight' + // elements added to pattern objects or provided from unadulterated mininotation // patterns. - const findWeight = x => Array.isArray(x) ? x : [x.__weight ?? 1, x]; + const findWeight = (x) => (Array.isArray(x) ? x : [x.__weight ?? 1, x]); timepats = timepats.map(findWeight); const total = timepats.map((a) => a[0]).reduce((a, b) => a.add(b), Fraction(0)); @@ -1649,9 +1649,9 @@ export const { fastGap, fastgap } = register(['fastGap', 'fastgap'], function (f const newWhole = !hap.whole ? undefined : new TimeSpan( - newPart.begin.sub(begin.sub(hap.whole.begin).div(factor)), - newPart.end.add(hap.whole.end.sub(end).div(factor)), - ); + newPart.begin.sub(begin.sub(hap.whole.begin).div(factor)), + newPart.end.add(hap.whole.end.sub(end).div(factor)), + ); return new Hap(newWhole, newPart, hap.value, hap.context); }; return pat.withQuerySpanMaybe(qf).withHap(ef).splitQueries(); From 03cfb1a3d98c8aaf4eab6ac640f9313fd675ff81 Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Mon, 4 Mar 2024 16:52:54 +0000 Subject: [PATCH 04/22] annotate pure values with their value --- packages/core/pattern.mjs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 975a9026f..d61b97485 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -1142,7 +1142,9 @@ export function pure(value) { function query(state) { return state.span.spanCycles.map((subspan) => new Hap(Fraction(subspan.begin).wholeCycle(), subspan, value)); } - return new Pattern(query); + const result = new Pattern(query); + result.__pure = value; + return result; } export function isPattern(thing) { From c67255ea0f1193d1008edb0897cde9b6996be124 Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Tue, 5 Mar 2024 15:27:07 +0000 Subject: [PATCH 05/22] allow single mininotation values to maintain their labels as pure --- packages/core/pattern.mjs | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index d61b97485..5ed39a5e5 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -457,7 +457,11 @@ export class Pattern { * @noAutocomplete */ withContext(func) { - return this.withHap((hap) => hap.setContext(func(hap.context))); + const result = this.withHap((hap) => hap.setContext(func(hap.context))); + if (this.__pure !== undefined) { + result.__pure = this.__pure; + } + return result; } /** @@ -1200,7 +1204,11 @@ export function stack(...pats) { */ export function slowcat(...pats) { // Array test here is to avoid infinite recursions.. - pats = pats.map((pat) => (Array.isArray(pat) ? sequence(...pat) : reify(pat))); + pats = pats.map((pat) => (Array.isArray(pat) ? fastcat(...pat) : reify(pat))); + + if (pats.length == 1) { + return pats[0]; + } const query = function (state) { const span = state.span; @@ -1266,6 +1274,10 @@ export function timeCat(...timepats) { const findWeight = (x) => (Array.isArray(x) ? x : [x.__weight ?? 1, x]); timepats = timepats.map(findWeight); + if (timepats.length == 1) { + return reify(timepats[0][1]); + } + const total = timepats.map((a) => a[0]).reduce((a, b) => a.add(b), Fraction(0)); let begin = Fraction(0); const pats = []; @@ -1295,7 +1307,11 @@ export function arrange(...sections) { } export function fastcat(...pats) { - return slowcat(...pats)._fast(pats.length); + let result = slowcat(...pats); + if (pats.length > 1) { + result = result._fast(pats.length); + } + return result; } /** See `fastcat` */ From c304d944b2622faeb83b22965e829dfef8e7202d Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Tue, 5 Mar 2024 15:32:15 +0000 Subject: [PATCH 06/22] format --- packages/core/pattern.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 5ed39a5e5..4eeabfaa7 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -1307,7 +1307,7 @@ export function arrange(...sections) { } export function fastcat(...pats) { - let result = slowcat(...pats); + let result = slowcat(...pats); if (pats.length > 1) { result = result._fast(pats.length); } From 86e28fcaede4d1001811c03783de3d53fef1b6d2 Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Wed, 6 Mar 2024 17:12:21 +0000 Subject: [PATCH 07/22] beatCat --- packages/core/pattern.mjs | 34 +++++++++ packages/core/util.mjs | 19 +++++ test/__snapshots__/examples.test.mjs.snap | 90 +++++++++++++++++++++++ 3 files changed, 143 insertions(+) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 4eeabfaa7..bd83bc3ec 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -1148,6 +1148,7 @@ export function pure(value) { } const result = new Pattern(query); result.__pure = value; + result.__weight = 1; return result; } @@ -1311,9 +1312,42 @@ export function fastcat(...pats) { if (pats.length > 1) { result = result._fast(pats.length); } + result.__weight = pats.length; return result; } +export function beatCat(...groups) { + groups = groups.map((a) => (Array.isArray(a) ? a.map(reify) : [reify(a)])); + const weights = groups.map((a) => a.map((elem) => elem.__weight ?? 1)); + const cycles = lcm(...groups.map((x) => x.length)); + let result = []; + for (let cycle = 0; cycle < cycles; ++cycle) { + result.push(...groups.map((x) => (x.length == 0 ? silence : x[cycle % x.length]))); + } + result = result.filter((x) => x.__weight > 0); + const weight = result.reduce((a, b) => a.add(b.__weight), Fraction(0)); + result = timeCat(...result); + result.__weight = weight; + console.log('weight: ', weight); + return result; +} + +// function beatCat(...groups) { +// groups = groups.map((a) => (Array.isArray(a) ? a.map(reify) : [reify(a)])); +// const weights = groups.map((a) => a.map((elem) => elem.__weight ?? 1)); + +// groups = groups.map(slowcat) + +// const arrayFn = function (...args) { +// args = args.map((arg, i) => [arg, groups[i]]) +// return timeCat(...args); +// }; +// const mapFn = curry(arrayFn, null, weights.length); +// const [left, ...right] = weights; +// console.log('left', right) +// return right.reduce((acc, p) => acc.appLeft(p), left.fmap(mapFn)).innerJoin(); +// } + /** See `fastcat` */ export function sequence(...pats) { return fastcat(...pats); diff --git a/packages/core/util.mjs b/packages/core/util.mjs index ca3cfc123..a9fd1ae92 100644 --- a/packages/core/util.mjs +++ b/packages/core/util.mjs @@ -323,3 +323,22 @@ export function objectMap(obj, fn) { } return Object.fromEntries(Object.entries(obj).map(([k, v], i) => [k, fn(v, k, i)])); } + +// greatest common divisor +export const gcd = function (x, y, ...z) { + if (!y && z.length > 0) { + return gcd(x, ...z); + } + if (!y) { + return x; + } + return gcd(y, x % y, ...z); +}; + +// lowest common multiple +export const lcm = function (x, y, ...z) { + if (z.length == 0) { + return (x * y) / gcd(x, y); + } + return lcm((x * y) / gcd(x, y), ...z); +}; diff --git a/test/__snapshots__/examples.test.mjs.snap b/test/__snapshots__/examples.test.mjs.snap index cb75f9bdf..92d1a9228 100644 --- a/test/__snapshots__/examples.test.mjs.snap +++ b/test/__snapshots__/examples.test.mjs.snap @@ -1933,6 +1933,96 @@ exports[`runs examples > example "detune" example index 0 1`] = ` ] `; +exports[`runs examples > example "distort" example index 0 1`] = ` +[ + "[ 0/1 → 1/8 | s:hh distort:0 ]", + "[ 0/1 → 1/4 | s:bd distort:0 ]", + "[ 1/8 → 1/4 | s:hh distort:0 ]", + "[ 1/4 → 3/8 | s:hh distort:0 ]", + "[ 1/4 → 1/2 | s:sd distort:0 ]", + "[ 3/8 → 1/2 | s:hh distort:0 ]", + "[ 1/2 → 5/8 | s:hh distort:0 ]", + "[ 5/8 → 3/4 | s:bd distort:0 ]", + "[ 5/8 → 3/4 | s:hh distort:0 ]", + "[ 3/4 → 7/8 | s:hh distort:0 ]", + "[ 3/4 → 1/1 | s:sd distort:0 ]", + "[ 7/8 → 1/1 | s:hh distort:0 ]", + "[ 1/1 → 9/8 | s:hh distort:2 ]", + "[ 1/1 → 5/4 | s:bd distort:2 ]", + "[ 9/8 → 5/4 | s:hh distort:2 ]", + "[ 5/4 → 11/8 | s:hh distort:2 ]", + "[ 5/4 → 3/2 | s:sd distort:2 ]", + "[ 11/8 → 3/2 | s:hh distort:2 ]", + "[ 3/2 → 13/8 | s:hh distort:2 ]", + "[ 13/8 → 7/4 | s:bd distort:2 ]", + "[ 13/8 → 7/4 | s:hh distort:2 ]", + "[ 7/4 → 15/8 | s:hh distort:2 ]", + "[ 7/4 → 2/1 | s:sd distort:2 ]", + "[ 15/8 → 2/1 | s:hh distort:2 ]", + "[ 2/1 → 17/8 | s:hh distort:3 ]", + "[ 2/1 → 9/4 | s:bd distort:3 ]", + "[ 17/8 → 9/4 | s:hh distort:3 ]", + "[ 9/4 → 19/8 | s:hh distort:3 ]", + "[ 9/4 → 5/2 | s:sd distort:3 ]", + "[ 19/8 → 5/2 | s:hh distort:3 ]", + "[ 5/2 → 21/8 | s:hh distort:3 ]", + "[ 21/8 → 11/4 | s:bd distort:3 ]", + "[ 21/8 → 11/4 | s:hh distort:3 ]", + "[ 11/4 → 23/8 | s:hh distort:3 ]", + "[ 11/4 → 3/1 | s:sd distort:3 ]", + "[ 23/8 → 3/1 | s:hh distort:3 ]", + "[ 3/1 → 25/8 | s:hh distort:[10 0.5] ]", + "[ 3/1 → 13/4 | s:bd distort:[10 0.5] ]", + "[ 25/8 → 13/4 | s:hh distort:[10 0.5] ]", + "[ 13/4 → 27/8 | s:hh distort:[10 0.5] ]", + "[ 13/4 → 7/2 | s:sd distort:[10 0.5] ]", + "[ 27/8 → 7/2 | s:hh distort:[10 0.5] ]", + "[ 7/2 → 29/8 | s:hh distort:[10 0.5] ]", + "[ 29/8 → 15/4 | s:bd distort:[10 0.5] ]", + "[ 29/8 → 15/4 | s:hh distort:[10 0.5] ]", + "[ 15/4 → 31/8 | s:hh distort:[10 0.5] ]", + "[ 15/4 → 4/1 | s:sd distort:[10 0.5] ]", + "[ 31/8 → 4/1 | s:hh distort:[10 0.5] ]", +] +`; + +exports[`runs examples > example "distort" example index 1 1`] = ` +[ + "[ 0/1 → 1/8 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 1/8 → 1/4 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 1/4 → 3/8 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 3/8 → 1/2 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 1/2 → 5/8 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 5/8 → 3/4 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 3/4 → 7/8 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 7/8 → 1/1 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 1/1 → 9/8 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 9/8 → 5/4 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 5/4 → 11/8 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 11/8 → 3/2 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 3/2 → 13/8 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 13/8 → 7/4 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 7/4 → 15/8 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 15/8 → 2/1 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 2/1 → 17/8 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 17/8 → 9/4 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 9/4 → 19/8 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 19/8 → 5/2 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 5/2 → 21/8 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 21/8 → 11/4 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 11/4 → 23/8 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 23/8 → 3/1 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 3/1 → 25/8 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 25/8 → 13/4 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 13/4 → 27/8 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 27/8 → 7/2 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 7/2 → 29/8 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 29/8 → 15/4 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 15/4 → 31/8 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", + "[ 31/8 → 4/1 | note:d1 s:sine penv:36 pdecay:0.12 decay:0.23 distort:[8 0.4] ]", +] +`; + exports[`runs examples > example "djf" example index 0 1`] = ` [ "[ 0/1 → 1/4 | n:0 s:superzow octave:3 djf:0.5 ]", From 870846320ad6f049d7f4d8786273b8e7d411d44f Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Wed, 6 Mar 2024 17:13:06 +0000 Subject: [PATCH 08/22] silence is weightless --- packages/core/pattern.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index bd83bc3ec..d22522734 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -1134,6 +1134,7 @@ Pattern.prototype.factories = { * silence // "~" */ export const silence = new Pattern(() => []); +silence.__weight = 0; /** A discrete value that repeats once per cycle. * From ad31b57c5764984b77e6f1de2042e9b1b3f8bfc5 Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Thu, 14 Mar 2024 10:36:13 +0000 Subject: [PATCH 09/22] silence has a weight of 1, add alternative nothing with a weight of 0 --- packages/core/pattern.mjs | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index d22522734..ce7b94c0d 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -29,9 +29,10 @@ export class Pattern { * @param {function} query - The function that maps a `State` to an array of `Hap`. * @noAutocomplete */ - constructor(query) { + constructor(query, weight = undefined) { this.query = query; this._Pattern = true; // this property is used to detect if a pattern that fails instanceof Pattern is an instance of another Pattern + this.__weight = weight; // in terms of number of beats per cycle } ////////////////////////////////////////////////////////////////////// @@ -1133,8 +1134,10 @@ Pattern.prototype.factories = { * @example * silence // "~" */ -export const silence = new Pattern(() => []); -silence.__weight = 0; +export const silence = new Pattern(() => [], 1); + +/* Like silence, but with a 'weight' (relative duration) of 0 */ +export const nothing = new Pattern(() => [], 0); /** A discrete value that repeats once per cycle. * @@ -1147,9 +1150,8 @@ export function pure(value) { function query(state) { return state.span.spanCycles.map((subspan) => new Hap(Fraction(subspan.begin).wholeCycle(), subspan, value)); } - const result = new Pattern(query); + const result = new Pattern(query, 1); result.__pure = value; - result.__weight = 1; return result; } @@ -1319,7 +1321,9 @@ export function fastcat(...pats) { export function beatCat(...groups) { groups = groups.map((a) => (Array.isArray(a) ? a.map(reify) : [reify(a)])); + const weights = groups.map((a) => a.map((elem) => elem.__weight ?? 1)); + const cycles = lcm(...groups.map((x) => x.length)); let result = []; for (let cycle = 0; cycle < cycles; ++cycle) { @@ -1329,26 +1333,9 @@ export function beatCat(...groups) { const weight = result.reduce((a, b) => a.add(b.__weight), Fraction(0)); result = timeCat(...result); result.__weight = weight; - console.log('weight: ', weight); return result; } -// function beatCat(...groups) { -// groups = groups.map((a) => (Array.isArray(a) ? a.map(reify) : [reify(a)])); -// const weights = groups.map((a) => a.map((elem) => elem.__weight ?? 1)); - -// groups = groups.map(slowcat) - -// const arrayFn = function (...args) { -// args = args.map((arg, i) => [arg, groups[i]]) -// return timeCat(...args); -// }; -// const mapFn = curry(arrayFn, null, weights.length); -// const [left, ...right] = weights; -// console.log('left', right) -// return right.reduce((acc, p) => acc.appLeft(p), left.fmap(mapFn)).innerJoin(); -// } - /** See `fastcat` */ export function sequence(...pats) { return fastcat(...pats); From 67eb162790b24805ebe9410634c0177622fa3c67 Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Thu, 14 Mar 2024 10:51:11 +0000 Subject: [PATCH 10/22] Add missing lcm import --- packages/core/pattern.mjs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 6c4a4e7fa..ff9a17245 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -10,7 +10,18 @@ import Hap from './hap.mjs'; import State from './state.mjs'; import { unionWithObj } from './value.mjs'; -import { compose, removeUndefineds, flatten, id, listRange, curry, _mod, numeralArgs, parseNumeral } from './util.mjs'; +import { + compose, + removeUndefineds, + flatten, + id, + listRange, + curry, + _mod, + numeralArgs, + parseNumeral, + lcm, +} from './util.mjs'; import drawLine from './drawLine.mjs'; import { logger } from './logger.mjs'; From 0f8c9fa6f8183420d0eeda4a3fd4b331d8bbf4d0 Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Thu, 14 Mar 2024 11:25:51 +0000 Subject: [PATCH 11/22] make timeCat add the weight property to its result --- packages/core/pattern.mjs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index ff9a17245..73b338850 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -1288,9 +1288,10 @@ export function timeCat(...timepats) { // patterns. const findWeight = (x) => (Array.isArray(x) ? x : [x.__weight ?? 1, x]); timepats = timepats.map(findWeight); - if (timepats.length == 1) { - return reify(timepats[0][1]); + const result = reify(timepats[0][1]); + result.__weight = timepats[0][0]; + return result; } const total = timepats.map((a) => a[0]).reduce((a, b) => a.add(b), Fraction(0)); @@ -1301,7 +1302,9 @@ export function timeCat(...timepats) { pats.push(reify(pat)._compress(begin.div(total), end.div(total))); begin = end; } - return stack(...pats); + const result = stack(...pats); + result.__weight = total; + return result; } /** From 8b8601f8366f0c0e37af4e7ade2115bfdd9eca0b Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Thu, 14 Mar 2024 15:23:16 +0000 Subject: [PATCH 12/22] preserve weight of single patterns passed to fastcat --- packages/core/pattern.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 73b338850..16d091c7f 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -1328,8 +1328,8 @@ export function fastcat(...pats) { let result = slowcat(...pats); if (pats.length > 1) { result = result._fast(pats.length); + result.__weight = pats.length; } - result.__weight = pats.length; return result; } From 4ac0bc443400ae46bf5631b6516e4bb3e3c02b97 Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Thu, 14 Mar 2024 16:10:40 +0000 Subject: [PATCH 13/22] snapshot --- test/__snapshots__/examples.test.mjs.snap | 51 +- test/__snapshots__/tunes.test.mjs.snap | 1975 +++++++++------------ 2 files changed, 815 insertions(+), 1211 deletions(-) diff --git a/test/__snapshots__/examples.test.mjs.snap b/test/__snapshots__/examples.test.mjs.snap index 1f32c65fd..a45e4279a 100644 --- a/test/__snapshots__/examples.test.mjs.snap +++ b/test/__snapshots__/examples.test.mjs.snap @@ -567,10 +567,8 @@ exports[`runs examples > example "_euclidRot" example index 20 1`] = ` exports[`runs examples > example "accelerate" example index 0 1`] = ` [ - "[ (0/1 → 1/1) ⇝ 2/1 | s:sax accelerate:0 ]", - "[ 0/1 ⇜ (1/1 → 2/1) | s:sax accelerate:0 ]", - "[ (2/1 → 3/1) ⇝ 4/1 | s:sax accelerate:1 ]", - "[ 2/1 ⇜ (3/1 → 4/1) | s:sax accelerate:1 ]", + "[ 0/1 → 2/1 | s:sax accelerate:0 ]", + "[ 2/1 → 4/1 | s:sax accelerate:1 ]", ] `; @@ -1652,8 +1650,7 @@ exports[`runs examples > example "cpm" example index 0 1`] = ` "[ 0/1 → 2/3 | s:bd ]", "[ 1/3 → 2/3 | s:hh ]", "[ 2/3 → 1/1 | s:hh ]", - "[ (2/3 → 1/1) ⇝ 4/3 | s:sd ]", - "[ 2/3 ⇜ (1/1 → 4/3) | s:sd ]", + "[ 2/3 → 4/3 | s:sd ]", "[ 1/1 → 4/3 | s:hh ]", "[ 4/3 → 5/3 | s:hh ]", "[ 4/3 → 2/1 | s:bd ]", @@ -1662,8 +1659,7 @@ exports[`runs examples > example "cpm" example index 0 1`] = ` "[ 2/1 → 8/3 | s:sd ]", "[ 7/3 → 8/3 | s:hh ]", "[ 8/3 → 3/1 | s:hh ]", - "[ (8/3 → 3/1) ⇝ 10/3 | s:bd ]", - "[ 8/3 ⇜ (3/1 → 10/3) | s:bd ]", + "[ 8/3 → 10/3 | s:bd ]", "[ 3/1 → 10/3 | s:hh ]", "[ 10/3 → 11/3 | s:hh ]", "[ 10/3 → 4/1 | s:sd ]", @@ -2116,14 +2112,11 @@ exports[`runs examples > example "early" example index 0 1`] = ` [ "[ -1/10 ⇜ (0/1 → 2/5) | s:hh ]", "[ 0/1 → 1/2 | s:bd ]", - "[ (9/10 → 1/1) ⇝ 7/5 | s:hh ]", - "[ 9/10 ⇜ (1/1 → 7/5) | s:hh ]", + "[ 9/10 → 7/5 | s:hh ]", "[ 1/1 → 3/2 | s:bd ]", - "[ (19/10 → 2/1) ⇝ 12/5 | s:hh ]", - "[ 19/10 ⇜ (2/1 → 12/5) | s:hh ]", + "[ 19/10 → 12/5 | s:hh ]", "[ 2/1 → 5/2 | s:bd ]", - "[ (29/10 → 3/1) ⇝ 17/5 | s:hh ]", - "[ 29/10 ⇜ (3/1 → 17/5) | s:hh ]", + "[ 29/10 → 17/5 | s:hh ]", "[ 3/1 → 7/2 | s:bd ]", "[ (39/10 → 4/1) ⇝ 22/5 | s:hh ]", ] @@ -2443,10 +2436,8 @@ exports[`runs examples > example "firstOf" example index 0 1`] = ` exports[`runs examples > example "fit" example index 0 1`] = ` [ - "[ (0/1 → 1/1) ⇝ 2/1 | s:rhodes speed:0.5 unit:c ]", - "[ 0/1 ⇜ (1/1 → 2/1) | s:rhodes speed:0.5 unit:c ]", - "[ (2/1 → 3/1) ⇝ 4/1 | s:rhodes speed:0.5 unit:c ]", - "[ 2/1 ⇜ (3/1 → 4/1) | s:rhodes speed:0.5 unit:c ]", + "[ 0/1 → 2/1 | s:rhodes speed:0.5 unit:c ]", + "[ 2/1 → 4/1 | s:rhodes speed:0.5 unit:c ]", ] `; @@ -3094,11 +3085,9 @@ exports[`runs examples > example "hpsustain" example index 0 1`] = ` exports[`runs examples > example "hurry" example index 0 1`] = ` [ "[ 0/1 → 3/4 | s:bd speed:1 ]", - "[ (3/4 → 1/1) ⇝ 3/2 | s:sd n:2 speed:1 ]", - "[ 3/4 ⇜ (1/1 → 3/2) | s:sd n:2 speed:1 ]", + "[ 3/4 → 3/2 | s:sd n:2 speed:1 ]", "[ 3/2 → 15/8 | s:bd speed:2 ]", - "[ (15/8 → 2/1) ⇝ 9/4 | s:sd n:2 speed:2 ]", - "[ 15/8 ⇜ (2/1 → 9/4) | s:sd n:2 speed:2 ]", + "[ 15/8 → 9/4 | s:sd n:2 speed:2 ]", "[ 9/4 → 21/8 | s:bd speed:2 ]", "[ 21/8 → 3/1 | s:sd n:2 speed:2 ]", "[ 3/1 → 51/16 | s:bd speed:4 ]", @@ -3705,10 +3694,8 @@ exports[`runs examples > example "loop" example index 0 1`] = ` exports[`runs examples > example "loopAt" example index 0 1`] = ` [ - "[ (0/1 → 1/1) ⇝ 2/1 | s:rhodes speed:0.25 unit:c ]", - "[ 0/1 ⇜ (1/1 → 2/1) | s:rhodes speed:0.25 unit:c ]", - "[ (2/1 → 3/1) ⇝ 4/1 | s:rhodes speed:0.25 unit:c ]", - "[ 2/1 ⇜ (3/1 → 4/1) | s:rhodes speed:0.25 unit:c ]", + "[ 0/1 → 2/1 | s:rhodes speed:0.25 unit:c ]", + "[ 2/1 → 4/1 | s:rhodes speed:0.25 unit:c ]", ] `; @@ -4178,10 +4165,8 @@ exports[`runs examples > example "never" example index 0 1`] = ` exports[`runs examples > example "noise" example index 0 1`] = ` [ - "[ (0/1 → 1/1) ⇝ 2/1 | s:white ]", - "[ 0/1 ⇜ (1/1 → 2/1) | s:white ]", - "[ (2/1 → 3/1) ⇝ 4/1 | s:pink ]", - "[ 2/1 ⇜ (3/1 → 4/1) | s:pink ]", + "[ 0/1 → 2/1 | s:white ]", + "[ 2/1 → 4/1 | s:pink ]", ] `; @@ -6428,8 +6413,7 @@ exports[`runs examples > example "slice" example index 0 1`] = ` "[ 3/4 → 27/32 | begin:0 end:0.125 _slices:8 s:breaks165 ]", "[ 27/32 → 15/16 | begin:0.125 end:0.25 _slices:8 s:breaks165 ]", "[ 15/16 → 63/64 | begin:0.25 end:0.375 _slices:8 s:breaks165 ]", - "[ (63/64 → 1/1) ⇝ 33/32 | begin:0.25 end:0.375 _slices:8 s:breaks165 ]", - "[ 63/64 ⇜ (1/1 → 33/32) | begin:0.25 end:0.375 _slices:8 s:breaks165 ]", + "[ 63/64 → 33/32 | begin:0.25 end:0.375 _slices:8 s:breaks165 ]", "[ 33/32 → 9/8 | begin:0.375 end:0.5 _slices:8 s:breaks165 ]", "[ 9/8 → 75/64 | begin:0.5 end:0.625 _slices:8 s:breaks165 ]", "[ 75/64 → 39/32 | begin:0 end:0.125 _slices:8 s:breaks165 ]", @@ -6442,8 +6426,7 @@ exports[`runs examples > example "slice" example index 0 1`] = ` "[ 57/32 → 15/8 | begin:0.375 end:0.5 _slices:8 s:breaks165 ]", "[ 15/8 → 123/64 | begin:0.5 end:0.625 _slices:8 s:breaks165 ]", "[ 123/64 → 63/32 | begin:0 end:0.125 _slices:8 s:breaks165 ]", - "[ (63/32 → 2/1) ⇝ 33/16 | begin:0.625 end:0.75 _slices:8 s:breaks165 ]", - "[ 63/32 ⇜ (2/1 → 33/16) | begin:0.625 end:0.75 _slices:8 s:breaks165 ]", + "[ 63/32 → 33/16 | begin:0.625 end:0.75 _slices:8 s:breaks165 ]", "[ 33/16 → 69/32 | begin:0.75 end:0.875 _slices:8 s:breaks165 ]", "[ 69/32 → 9/4 | begin:0.875 end:1 _slices:8 s:breaks165 ]", "[ 9/4 → 75/32 | begin:0.875 end:1 _slices:8 s:breaks165 ]", diff --git a/test/__snapshots__/tunes.test.mjs.snap b/test/__snapshots__/tunes.test.mjs.snap index e943462f4..d929b84a0 100644 --- a/test/__snapshots__/tunes.test.mjs.snap +++ b/test/__snapshots__/tunes.test.mjs.snap @@ -260,39 +260,39 @@ exports[`renders tunes > tune: barryHarris 1`] = ` exports[`renders tunes > tune: bassFuge 1`] = ` [ "[ 0/1 → 1/8 | note:A2 s:flbass n:0 gain:0.3 cutoff:2206.5338497506646 resonance:10 clip:1 ]", - "[ -7/4 ⇜ (0/1 → 1/4) | note:C4 s:flbass n:0 gain:0.3 cutoff:2312.732504596285 resonance:10 clip:1 ]", - "[ -7/4 ⇜ (0/1 → 1/4) | note:E4 s:flbass n:0 gain:0.3 cutoff:2312.732504596285 resonance:10 clip:1 ]", - "[ -3/2 ⇜ (0/1 → 1/4) ⇝ 1/2 | gain:0.3 note:A4 s:flbass n:0 cutoff:2522.789774516997 resonance:10 clip:1 ]", - "[ -3/2 ⇜ (0/1 → 1/4) ⇝ 1/2 | gain:0.3 note:C5 s:flbass n:0 cutoff:2522.789774516997 resonance:10 clip:1 ]", - "[ -5/4 ⇜ (0/1 → 1/4) ⇝ 3/4 | gain:0.15 note:A4 s:flbass n:0 cutoff:2727.5302177148174 resonance:10 clip:1 ]", - "[ -5/4 ⇜ (0/1 → 1/4) ⇝ 3/4 | gain:0.15 note:C5 s:flbass n:0 cutoff:2727.5302177148174 resonance:10 clip:1 ]", + "[ -7/4 ⇜ (0/1 → 1/4) | note:C4 s:flbass n:0 gain:0.3 cutoff:915.3693764684064 resonance:10 clip:1 ]", + "[ -7/4 ⇜ (0/1 → 1/4) | note:E4 s:flbass n:0 gain:0.3 cutoff:915.3693764684064 resonance:10 clip:1 ]", + "[ -3/2 ⇜ (0/1 → 1/4) ⇝ 1/2 | gain:0.3 note:A4 s:flbass n:0 cutoff:1275.6208956766397 resonance:10 clip:1 ]", + "[ -3/2 ⇜ (0/1 → 1/4) ⇝ 1/2 | gain:0.3 note:C5 s:flbass n:0 cutoff:1275.6208956766397 resonance:10 clip:1 ]", + "[ -5/4 ⇜ (0/1 → 1/4) ⇝ 3/4 | gain:0.15 note:A4 s:flbass n:0 cutoff:1677.2102254830027 resonance:10 clip:1 ]", + "[ -5/4 ⇜ (0/1 → 1/4) ⇝ 3/4 | gain:0.15 note:C5 s:flbass n:0 cutoff:1677.2102254830027 resonance:10 clip:1 ]", "[ 0/1 → 1/4 | note:A3 s:flbass n:0 gain:0.3 cutoff:2312.732504596285 resonance:10 clip:1 ]", - "[ -1/1 ⇜ (0/1 → 1/2) ⇝ 1/1 | gain:0.075 note:A4 s:flbass n:0 cutoff:2924.3791043233605 resonance:10 clip:1 ]", - "[ -1/1 ⇜ (0/1 → 1/2) ⇝ 1/1 | gain:0.075 note:C5 s:flbass n:0 cutoff:2924.3791043233605 resonance:10 clip:1 ]", + "[ -1/1 ⇜ (0/1 → 1/2) ⇝ 1/1 | gain:0.075 note:A4 s:flbass n:0 cutoff:2100 resonance:10 clip:1 ]", + "[ -1/1 ⇜ (0/1 → 1/2) ⇝ 1/1 | gain:0.075 note:C5 s:flbass n:0 cutoff:2100 resonance:10 clip:1 ]", "[ 0/1 → 1/2 | s:bd n:1 ]", - "[ -3/4 ⇜ (0/1 → 3/4) ⇝ 5/4 | gain:0.0375 note:A4 s:flbass n:0 cutoff:2924.3791043233605 resonance:10 clip:1 ]", - "[ -3/4 ⇜ (0/1 → 3/4) ⇝ 5/4 | gain:0.0375 note:C5 s:flbass n:0 cutoff:2924.3791043233605 resonance:10 clip:1 ]", - "[ -3/2 ⇜ (1/4 → 1/2) | gain:0.3 note:A4 s:flbass n:0 cutoff:2522.789774516997 resonance:10 clip:1 ]", - "[ -3/2 ⇜ (1/4 → 1/2) | gain:0.3 note:C5 s:flbass n:0 cutoff:2522.789774516997 resonance:10 clip:1 ]", - "[ -5/4 ⇜ (1/4 → 1/2) ⇝ 3/4 | gain:0.15 note:A4 s:flbass n:0 cutoff:2727.5302177148174 resonance:10 clip:1 ]", - "[ -5/4 ⇜ (1/4 → 1/2) ⇝ 3/4 | gain:0.15 note:C5 s:flbass n:0 cutoff:2727.5302177148174 resonance:10 clip:1 ]", + "[ -3/4 ⇜ (0/1 → 3/4) ⇝ 5/4 | gain:0.0375 note:A4 s:flbass n:0 cutoff:2522.789774516997 resonance:10 clip:1 ]", + "[ -3/4 ⇜ (0/1 → 3/4) ⇝ 5/4 | gain:0.0375 note:C5 s:flbass n:0 cutoff:2522.789774516997 resonance:10 clip:1 ]", + "[ -3/2 ⇜ (1/4 → 1/2) | gain:0.3 note:A4 s:flbass n:0 cutoff:1275.6208956766397 resonance:10 clip:1 ]", + "[ -3/2 ⇜ (1/4 → 1/2) | gain:0.3 note:C5 s:flbass n:0 cutoff:1275.6208956766397 resonance:10 clip:1 ]", + "[ -5/4 ⇜ (1/4 → 1/2) ⇝ 3/4 | gain:0.15 note:A4 s:flbass n:0 cutoff:1677.2102254830027 resonance:10 clip:1 ]", + "[ -5/4 ⇜ (1/4 → 1/2) ⇝ 3/4 | gain:0.15 note:C5 s:flbass n:0 cutoff:1677.2102254830027 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 ]", "[ 1/4 → 1/2 | s:hh n:0 ]", "[ 3/8 → 1/2 | note:A2 s:flbass n:0 gain:0.3 cutoff:2827.098521493671 resonance:10 clip:1 ]", - "[ -5/4 ⇜ (1/2 → 3/4) | gain:0.15 note:A4 s:flbass n:0 cutoff:2727.5302177148174 resonance:10 clip:1 ]", - "[ -5/4 ⇜ (1/2 → 3/4) | gain:0.15 note:C5 s:flbass n:0 cutoff:2727.5302177148174 resonance:10 clip:1 ]", - "[ -1/1 ⇜ (1/2 → 3/4) ⇝ 1/1 | gain:0.075 note:A4 s:flbass n:0 cutoff:2924.3791043233605 resonance:10 clip:1 ]", - "[ -1/1 ⇜ (1/2 → 3/4) ⇝ 1/1 | gain:0.075 note:C5 s:flbass n:0 cutoff:2924.3791043233605 resonance:10 clip:1 ]", + "[ -5/4 ⇜ (1/2 → 3/4) | gain:0.15 note:A4 s:flbass n:0 cutoff:1677.2102254830027 resonance:10 clip:1 ]", + "[ -5/4 ⇜ (1/2 → 3/4) | gain:0.15 note:C5 s:flbass n:0 cutoff:1677.2102254830027 resonance:10 clip:1 ]", + "[ -1/1 ⇜ (1/2 → 3/4) ⇝ 1/1 | gain:0.075 note:A4 s:flbass n:0 cutoff:2100 resonance:10 clip:1 ]", + "[ -1/1 ⇜ (1/2 → 3/4) ⇝ 1/1 | gain:0.075 note:C5 s:flbass n:0 cutoff:2100 resonance:10 clip:1 ]", "[ 1/2 → 3/4 | gain:0.3 note:A4 s:flbass n:0 cutoff:3110.8609453791396 resonance:10 clip:1 ]", "[ 1/2 → 3/4 | gain:0.3 note:C5 s:flbass n:0 cutoff:3110.8609453791396 resonance:10 clip:1 ]", "[ 1/2 → 1/1 | s:bd n:1 ]", "[ 1/2 → 1/1 | s:sd n:0 ]", "[ 3/4 → 7/8 | note:A2 s:flbass n:0 gain:0.3 cutoff:3366.0584981088073 resonance:10 clip:1 ]", - "[ -1/1 ⇜ (3/4 → 1/1) | gain:0.075 note:A4 s:flbass n:0 cutoff:2924.3791043233605 resonance:10 clip:1 ]", - "[ -1/1 ⇜ (3/4 → 1/1) | gain:0.075 note:C5 s:flbass n:0 cutoff:2924.3791043233605 resonance:10 clip:1 ]", - "[ -3/4 ⇜ (3/4 → 1/1) ⇝ 5/4 | gain:0.0375 note:A4 s:flbass n:0 cutoff:2924.3791043233605 resonance:10 clip:1 ]", - "[ -3/4 ⇜ (3/4 → 1/1) ⇝ 5/4 | gain:0.0375 note:C5 s:flbass n:0 cutoff:2924.3791043233605 resonance:10 clip:1 ]", + "[ -1/1 ⇜ (3/4 → 1/1) | gain:0.075 note:A4 s:flbass n:0 cutoff:2100 resonance:10 clip:1 ]", + "[ -1/1 ⇜ (3/4 → 1/1) | gain:0.075 note:C5 s:flbass n:0 cutoff:2100 resonance:10 clip:1 ]", + "[ -3/4 ⇜ (3/4 → 1/1) ⇝ 5/4 | gain:0.0375 note:A4 s:flbass n:0 cutoff:2522.789774516997 resonance:10 clip:1 ]", + "[ -3/4 ⇜ (3/4 → 1/1) ⇝ 5/4 | gain:0.0375 note:C5 s:flbass n:0 cutoff:2522.789774516997 resonance:10 clip:1 ]", "[ 3/4 → 1/1 | note:A3 s:flbass n:0 gain:0.3 cutoff:3443.5028842544402 resonance:10 clip:1 ]", "[ 3/4 → 1/1 | gain:0.15 note:A4 s:flbass n:0 cutoff:3443.5028842544402 resonance:10 clip:1 ]", "[ 3/4 → 1/1 | gain:0.15 note:C5 s:flbass n:0 cutoff:3443.5028842544402 resonance:10 clip:1 ]", @@ -692,8 +692,7 @@ exports[`renders tunes > tune: caverave 1`] = ` "[ 65/2 → 33/1 | note:62 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 131/4 → 33/1 | s:hh delay:0.3 delayfeedback:0.5 delaytime:0.125 gain:0.4 ]", "[ 131/4 → 33/1 | note:35 s:sawtooth attack:0.001 decay:0.2 sustain:1 cutoff:500 ]", - "[ (131/4 → 33/1) ⇝ 133/4 | note:76 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", - "[ 131/4 ⇜ (33/1 → 133/4) | note:76 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", + "[ 131/4 → 133/4 | note:76 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 33/1 → 67/2 | s:bd gain:0.8 ]", "[ 33/1 → 67/2 | note:74 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 133/4 → 100/3 | note:57 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0 release:0.1 delay:0.4 delaytime:0.12 ]", @@ -723,8 +722,7 @@ exports[`renders tunes > tune: caverave 1`] = ` "[ 69/2 → 35/1 | note:62 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 139/4 → 35/1 | s:hh delay:0.3 delayfeedback:0.5 delaytime:0.125 gain:0.4 ]", "[ 139/4 → 35/1 | note:35 s:sawtooth attack:0.001 decay:0.2 sustain:1 cutoff:500 ]", - "[ (139/4 → 35/1) ⇝ 141/4 | note:76 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", - "[ 139/4 ⇜ (35/1 → 141/4) | note:76 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", + "[ 139/4 → 141/4 | note:76 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 35/1 → 71/2 | s:bd gain:0.8 ]", "[ 35/1 → 71/2 | note:74 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 141/4 → 71/2 | s:hh delay:0.3 delayfeedback:0.5 delaytime:0.125 gain:0.4 ]", @@ -754,8 +752,7 @@ exports[`renders tunes > tune: caverave 1`] = ` "[ 73/2 → 37/1 | note:61 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 147/4 → 37/1 | s:hh delay:0.3 delayfeedback:0.5 delaytime:0.125 gain:0.4 ]", "[ 147/4 → 37/1 | note:33 s:sawtooth attack:0.001 decay:0.2 sustain:1 cutoff:500 ]", - "[ (147/4 → 37/1) ⇝ 149/4 | note:74 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", - "[ 147/4 ⇜ (37/1 → 149/4) | note:74 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", + "[ 147/4 → 149/4 | note:74 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 37/1 → 75/2 | s:bd gain:0.8 ]", "[ 37/1 → 75/2 | note:73 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 149/4 → 112/3 | note:61 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0 release:0.1 delay:0.4 delaytime:0.12 ]", @@ -785,8 +782,7 @@ exports[`renders tunes > tune: caverave 1`] = ` "[ 77/2 → 39/1 | note:61 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 155/4 → 39/1 | s:hh delay:0.3 delayfeedback:0.5 delaytime:0.125 gain:0.4 ]", "[ 155/4 → 39/1 | note:33 s:sawtooth attack:0.001 decay:0.2 sustain:1 cutoff:500 ]", - "[ (155/4 → 39/1) ⇝ 157/4 | note:74 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", - "[ 155/4 ⇜ (39/1 → 157/4) | note:74 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", + "[ 155/4 → 157/4 | note:74 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 39/1 → 79/2 | s:bd gain:0.8 ]", "[ 39/1 → 79/2 | note:73 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 39/1 → 79/2 | note:33 s:sawtooth attack:0.001 decay:0.2 sustain:1 cutoff:500 ]", @@ -817,8 +813,7 @@ exports[`renders tunes > tune: caverave 1`] = ` "[ 81/2 → 41/1 | note:59 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 163/4 → 41/1 | s:hh delay:0.3 delayfeedback:0.5 delaytime:0.125 gain:0.4 ]", "[ 163/4 → 41/1 | note:31 s:sawtooth attack:0.001 decay:0.2 sustain:1 cutoff:500 ]", - "[ (163/4 → 41/1) ⇝ 165/4 | note:73 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", - "[ 163/4 ⇜ (41/1 → 165/4) | note:73 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", + "[ 163/4 → 165/4 | note:73 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 41/1 → 83/2 | s:bd gain:0.8 ]", "[ 41/1 → 83/2 | note:71 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 165/4 → 124/3 | note:62 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0 release:0.1 delay:0.4 delaytime:0.12 ]", @@ -848,8 +843,7 @@ exports[`renders tunes > tune: caverave 1`] = ` "[ 85/2 → 43/1 | note:59 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 171/4 → 43/1 | s:hh delay:0.3 delayfeedback:0.5 delaytime:0.125 gain:0.4 ]", "[ 171/4 → 43/1 | note:31 s:sawtooth attack:0.001 decay:0.2 sustain:1 cutoff:500 ]", - "[ (171/4 → 43/1) ⇝ 173/4 | note:73 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", - "[ 171/4 ⇜ (43/1 → 173/4) | note:73 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", + "[ 171/4 → 173/4 | note:73 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 43/1 → 87/2 | s:bd gain:0.8 ]", "[ 43/1 → 87/2 | note:71 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 173/4 → 87/2 | s:hh delay:0.3 delayfeedback:0.5 delaytime:0.125 gain:0.4 ]", @@ -879,8 +873,7 @@ exports[`renders tunes > tune: caverave 1`] = ` "[ 89/2 → 45/1 | note:58 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 179/4 → 45/1 | s:hh delay:0.3 delayfeedback:0.5 delaytime:0.125 gain:0.4 ]", "[ 179/4 → 45/1 | note:30 s:sawtooth attack:0.001 decay:0.2 sustain:1 cutoff:500 ]", - "[ (179/4 → 45/1) ⇝ 181/4 | note:71 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", - "[ 179/4 ⇜ (45/1 → 181/4) | note:71 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", + "[ 179/4 → 181/4 | note:71 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 45/1 → 91/2 | s:bd gain:0.8 ]", "[ 45/1 → 91/2 | note:70 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 181/4 → 136/3 | note:58 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0 release:0.1 delay:0.4 delaytime:0.12 ]", @@ -910,8 +903,7 @@ exports[`renders tunes > tune: caverave 1`] = ` "[ 93/2 → 47/1 | note:58 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 187/4 → 47/1 | s:hh delay:0.3 delayfeedback:0.5 delaytime:0.125 gain:0.4 ]", "[ 187/4 → 47/1 | note:42 s:sawtooth attack:0.001 decay:0.2 sustain:1 cutoff:500 ]", - "[ (187/4 → 47/1) ⇝ 189/4 | note:71 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", - "[ 187/4 ⇜ (47/1 → 189/4) | note:71 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", + "[ 187/4 → 189/4 | note:71 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 47/1 → 95/2 | s:bd gain:0.8 ]", "[ 47/1 → 95/2 | note:70 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 47/1 → 95/2 | note:30 s:sawtooth attack:0.001 decay:0.2 sustain:1 cutoff:500 ]", @@ -942,8 +934,7 @@ exports[`renders tunes > tune: caverave 1`] = ` "[ 97/2 → 49/1 | note:63 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 195/4 → 49/1 | s:hh delay:0.3 delayfeedback:0.5 delaytime:0.125 gain:0.4 ]", "[ 195/4 → 49/1 | note:36 s:sawtooth attack:0.001 decay:0.2 sustain:1 cutoff:500 ]", - "[ (195/4 → 49/1) ⇝ 197/4 | note:77 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", - "[ 195/4 ⇜ (49/1 → 197/4) | note:77 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", + "[ 195/4 → 197/4 | note:77 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 49/1 → 99/2 | s:bd gain:0.8 ]", "[ 49/1 → 99/2 | note:75 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 197/4 → 148/3 | note:58 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0 release:0.1 delay:0.4 delaytime:0.12 ]", @@ -973,8 +964,7 @@ exports[`renders tunes > tune: caverave 1`] = ` "[ 101/2 → 51/1 | note:63 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 203/4 → 51/1 | s:hh delay:0.3 delayfeedback:0.5 delaytime:0.125 gain:0.4 ]", "[ 203/4 → 51/1 | note:36 s:sawtooth attack:0.001 decay:0.2 sustain:1 cutoff:500 ]", - "[ (203/4 → 51/1) ⇝ 205/4 | note:77 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", - "[ 203/4 ⇜ (51/1 → 205/4) | note:77 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", + "[ 203/4 → 205/4 | note:77 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 51/1 → 103/2 | s:bd gain:0.8 ]", "[ 51/1 → 103/2 | note:75 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 205/4 → 103/2 | s:hh delay:0.3 delayfeedback:0.5 delaytime:0.125 gain:0.4 ]", @@ -1004,8 +994,7 @@ exports[`renders tunes > tune: caverave 1`] = ` "[ 105/2 → 53/1 | note:62 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 211/4 → 53/1 | s:hh delay:0.3 delayfeedback:0.5 delaytime:0.125 gain:0.4 ]", "[ 211/4 → 53/1 | note:34 s:sawtooth attack:0.001 decay:0.2 sustain:1 cutoff:500 ]", - "[ (211/4 → 53/1) ⇝ 213/4 | note:75 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", - "[ 211/4 ⇜ (53/1 → 213/4) | note:75 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", + "[ 211/4 → 213/4 | note:75 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 53/1 → 107/2 | s:bd gain:0.8 ]", "[ 53/1 → 107/2 | note:74 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 213/4 → 160/3 | note:62 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0 release:0.1 delay:0.4 delaytime:0.12 ]", @@ -1035,8 +1024,7 @@ exports[`renders tunes > tune: caverave 1`] = ` "[ 109/2 → 55/1 | note:62 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 219/4 → 55/1 | s:hh delay:0.3 delayfeedback:0.5 delaytime:0.125 gain:0.4 ]", "[ 219/4 → 55/1 | note:34 s:sawtooth attack:0.001 decay:0.2 sustain:1 cutoff:500 ]", - "[ (219/4 → 55/1) ⇝ 221/4 | note:75 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", - "[ 219/4 ⇜ (55/1 → 221/4) | note:75 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", + "[ 219/4 → 221/4 | note:75 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 55/1 → 111/2 | s:bd gain:0.8 ]", "[ 55/1 → 111/2 | note:74 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 55/1 → 111/2 | note:34 s:sawtooth attack:0.001 decay:0.2 sustain:1 cutoff:500 ]", @@ -1065,8 +1053,7 @@ exports[`renders tunes > tune: caverave 1`] = ` "[ 113/2 → 57/1 | note:60 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 227/4 → 57/1 | s:hh delay:0.3 delayfeedback:0.5 delaytime:0.125 gain:0.4 ]", "[ 227/4 → 57/1 | note:32 s:sawtooth attack:0.001 decay:0.2 sustain:1 cutoff:500 ]", - "[ (227/4 → 57/1) ⇝ 229/4 | note:74 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", - "[ 227/4 ⇜ (57/1 → 229/4) | note:74 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", + "[ 227/4 → 229/4 | note:74 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 57/1 → 115/2 | note:72 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 229/4 → 172/3 | note:63 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0 release:0.1 delay:0.4 delaytime:0.12 ]", "[ 229/4 → 172/3 | note:67 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0 release:0.1 delay:0.4 delaytime:0.12 ]", @@ -1092,8 +1079,7 @@ exports[`renders tunes > tune: caverave 1`] = ` "[ 117/2 → 59/1 | note:60 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 235/4 → 59/1 | s:hh delay:0.3 delayfeedback:0.5 delaytime:0.125 gain:0.4 ]", "[ 235/4 → 59/1 | note:32 s:sawtooth attack:0.001 decay:0.2 sustain:1 cutoff:500 ]", - "[ (235/4 → 59/1) ⇝ 237/4 | note:74 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", - "[ 235/4 ⇜ (59/1 → 237/4) | note:74 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", + "[ 235/4 → 237/4 | note:74 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 59/1 → 119/2 | note:72 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", "[ 237/4 → 119/2 | s:hh delay:0.3 delayfeedback:0.5 delaytime:0.125 gain:0.4 ]", "[ 237/4 → 239/4 | note:63 s:sawtooth cutoff:1200 gain:0.5 attack:0 decay:0.16 sustain:0.3 release:0.1 ]", @@ -6205,25 +6191,25 @@ exports[`renders tunes > tune: festivalOfFingers 1`] = ` exports[`renders tunes > tune: festivalOfFingers3 1`] = ` [ - "[ -1/2 ⇜ (0/1 → 1/6) | gain:0.1250000728312878 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", + "[ -1/2 ⇜ (0/1 → 1/6) | gain:0.12500057914389073 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", "[ -1/6 ⇜ (0/1 → 1/6) | clip:1 gain:0.5 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ -1/6 ⇜ (0/1 → 1/6) | clip:1 gain:0.125 note:E6 s:piano release:0.1 pan:0.6574074074074074 ]", - "[ -1/3 ⇜ (0/1 → 1/3) | gain:0.16666743745500448 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", + "[ -1/3 ⇜ (0/1 → 1/3) | gain:0.16666666666666666 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", "[ 0/1 → 1/3 | clip:1 gain:1 note:E6 s:piano release:0.1 pan:0.6574074074074074 ]", "[ 0/1 → 1/3 | clip:1 gain:0.25 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ -3/2 ⇜ (0/1 → 1/2) | gain:0.2500038714714082 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", - "[ -3/2 ⇜ (0/1 → 1/2) | gain:0.2500038714714082 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", - "[ -3/2 ⇜ (0/1 → 1/2) | gain:0.2500038714714082 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", - "[ -1/2 ⇜ (0/1 → 1/2) | gain:0.2500038714714082 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", - "[ -1/2 ⇜ (0/1 → 1/2) | gain:0.1250019357357041 clip:1 note:E7 s:piano release:0.1 pan:0.712962962962963 ]", - "[ -1/6 ⇜ (0/1 → 1/2) | gain:0.2500038714714082 clip:1 note:D3 s:piano release:0.1 pan:0.4814814814814815 ]", + "[ -3/2 ⇜ (0/1 → 1/2) | gain:0.250030297563536 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", + "[ -3/2 ⇜ (0/1 → 1/2) | gain:0.250030297563536 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", + "[ -3/2 ⇜ (0/1 → 1/2) | gain:0.250030297563536 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", + "[ -1/2 ⇜ (0/1 → 1/2) | gain:0.25 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", + "[ -1/2 ⇜ (0/1 → 1/2) | gain:0.125 clip:1 note:E7 s:piano release:0.1 pan:0.712962962962963 ]", + "[ -1/6 ⇜ (0/1 → 1/2) | gain:0.25000115618250673 clip:1 note:D3 s:piano release:0.1 pan:0.4814814814814815 ]", "[ 0/1 → 2/3 | gain:0.5000182089760518 clip:1 note:D2 s:piano release:0.1 pan:0.42592592592592593 ]", - "[ -1/1 ⇜ (0/1 → 1/1) | gain:0.16668682833029574 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", - "[ -1/1 ⇜ (0/1 → 1/1) | gain:0.16668682833029574 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", - "[ -1/1 ⇜ (0/1 → 1/1) | gain:0.16668682833029574 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", - "[ -1/2 ⇜ (0/1 → 1/1) ⇝ 3/2 | gain:0.1250498192352193 clip:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", - "[ -1/2 ⇜ (0/1 → 1/1) ⇝ 3/2 | gain:0.1250498192352193 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", - "[ -1/2 ⇜ (0/1 → 1/1) ⇝ 3/2 | gain:0.1250498192352193 clip:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", + "[ -1/1 ⇜ (0/1 → 1/1) | gain:0.16666666666666666 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", + "[ -1/1 ⇜ (0/1 → 1/1) | gain:0.16666666666666666 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ -1/1 ⇜ (0/1 → 1/1) | gain:0.16666666666666666 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", + "[ -1/2 ⇜ (0/1 → 1/1) ⇝ 3/2 | gain:0.12501512124772182 clip:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", + "[ -1/2 ⇜ (0/1 → 1/1) ⇝ 3/2 | gain:0.12501512124772182 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", + "[ -1/2 ⇜ (0/1 → 1/1) ⇝ 3/2 | gain:0.12501512124772182 clip:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ 0/1 → 1/1 | gain:0.5000604849908873 clip:1 note:E4 s:piano release:0.1 pan:0.5462962962962963 ]", "[ 0/1 → 1/1 | gain:0.16668682833029574 clip:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", "[ (0/1 → 1/1) ⇝ 2/1 | gain:0.5004609890274139 clip:1 note:D3 s:piano release:0.1 pan:0.4814814814814815 ]", @@ -6240,9 +6226,9 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ (1/2 → 1/1) ⇝ 7/6 | gain:0.25013557675466036 clip:1 note:D3 s:piano release:0.1 pan:0.4814814814814815 ]", "[ (1/2 → 1/1) ⇝ 3/2 | gain:0.25023049451370694 clip:1 note:E5 s:piano release:0.1 pan:0.6018518518518519 ]", "[ (1/2 → 1/1) ⇝ 3/2 | gain:0.12511524725685347 clip:1 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", - "[ (1/2 → 1/1) ⇝ 5/2 | gain:0.2504392251375784 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", - "[ (1/2 → 1/1) ⇝ 5/2 | gain:0.2504392251375784 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", - "[ (1/2 → 1/1) ⇝ 5/2 | gain:0.2504392251375784 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", + "[ (1/2 → 1/1) ⇝ 5/2 | gain:0.25074029392543207 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", + "[ (1/2 → 1/1) ⇝ 5/2 | gain:0.25074029392543207 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", + "[ (1/2 → 1/1) ⇝ 5/2 | gain:0.25074029392543207 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", "[ 2/3 → 1/1 | clip:1 gain:1 note:E6 s:piano release:0.1 pan:0.6574074074074074 ]", "[ 2/3 → 1/1 | clip:1 gain:0.25 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ (2/3 → 1/1) ⇝ 4/3 | gain:0.5004609890274139 clip:1 note:D2 s:piano release:0.1 pan:0.42592592592592593 ]", @@ -6255,9 +6241,9 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 2/3 ⇜ (1/1 → 4/3) | gain:0.5004609890274139 clip:1 note:D2 s:piano release:0.1 pan:0.42592592592592593 ]", "[ 1/1 → 4/3 | clip:1 gain:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ 1/1 → 4/3 | clip:1 gain:0.25 note:E6 s:piano release:0.1 pan:0.6574074074074074 ]", - "[ -1/2 ⇜ (1/1 → 3/2) | gain:0.1250498192352193 clip:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", - "[ -1/2 ⇜ (1/1 → 3/2) | gain:0.1250498192352193 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", - "[ -1/2 ⇜ (1/1 → 3/2) | gain:0.1250498192352193 clip:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", + "[ -1/2 ⇜ (1/1 → 3/2) | gain:0.12501512124772182 clip:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", + "[ -1/2 ⇜ (1/1 → 3/2) | gain:0.12501512124772182 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", + "[ -1/2 ⇜ (1/1 → 3/2) | gain:0.12501512124772182 clip:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ 1/2 ⇜ (1/1 → 3/2) | gain:0.25023049451370694 clip:1 note:E5 s:piano release:0.1 pan:0.6018518518518519 ]", "[ 1/2 ⇜ (1/1 → 3/2) | gain:0.12511524725685347 clip:1 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", "[ 5/6 ⇜ (1/1 → 3/2) | gain:0.1251800316700185 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", @@ -6265,14 +6251,14 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 0/1 ⇜ (1/1 → 2/1) | gain:0.5004609890274139 clip:1 note:D3 s:piano release:0.1 pan:0.4814814814814815 ]", "[ 0/1 ⇜ (1/1 → 2/1) | gain:0.5004609890274139 clip:1 note:F3 s:piano release:0.1 pan:0.49537037037037035 ]", "[ 0/1 ⇜ (1/1 → 2/1) | gain:0.5004609890274139 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", - "[ 1/2 ⇜ (1/1 → 2/1) ⇝ 5/2 | gain:0.2504392251375784 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", - "[ 1/2 ⇜ (1/1 → 2/1) ⇝ 5/2 | gain:0.2504392251375784 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", - "[ 1/2 ⇜ (1/1 → 2/1) ⇝ 5/2 | gain:0.2504392251375784 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", + "[ 1/2 ⇜ (1/1 → 2/1) ⇝ 5/2 | gain:0.25074029392543207 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", + "[ 1/2 ⇜ (1/1 → 2/1) ⇝ 5/2 | gain:0.25074029392543207 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", + "[ 1/2 ⇜ (1/1 → 2/1) ⇝ 5/2 | gain:0.25074029392543207 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", "[ 1/1 → 2/1 | gain:0.5014805878508641 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", "[ 1/1 → 2/1 | gain:0.16716019595028803 clip:1 note:E6 s:piano release:0.1 pan:0.6574074074074074 ]", - "[ (1/1 → 2/1) ⇝ 3/1 | gain:0.16716019595028803 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", - "[ (1/1 → 2/1) ⇝ 3/1 | gain:0.16716019595028803 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", - "[ (1/1 → 2/1) ⇝ 3/1 | gain:0.16716019595028803 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", + "[ (1/1 → 2/1) ⇝ 3/1 | gain:0.16777864249203656 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", + "[ (1/1 → 2/1) ⇝ 3/1 | gain:0.16777864249203656 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ (1/1 → 2/1) ⇝ 3/1 | gain:0.16777864249203656 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", "[ 7/6 → 3/2 | clip:1 gain:0.5 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ 7/6 → 3/2 | clip:1 gain:0.125 note:E6 s:piano release:0.1 pan:0.6574074074074074 ]", "[ 7/6 → 11/6 | gain:0.25074029392543207 clip:1 note:D3 s:piano release:0.1 pan:0.4814814814814815 ]", @@ -6281,37 +6267,37 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 4/3 → 2/1 | gain:0.5019971884845844 clip:1 note:D2 s:piano release:0.1 pan:0.42592592592592593 ]", "[ 3/2 → 11/6 | clip:1 gain:0.5 note:E6 s:piano release:0.1 pan:0.6574074074074074 ]", "[ 3/2 → 11/6 | clip:1 gain:0.125 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ (3/2 → 2/1) ⇝ 13/6 | gain:0.12557314160386537 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", - "[ (3/2 → 2/1) ⇝ 5/2 | gain:0.25114628320773075 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", - "[ (3/2 → 2/1) ⇝ 5/2 | gain:0.12557314160386537 clip:1 note:E7 s:piano release:0.1 pan:0.712962962962963 ]", - "[ (3/2 → 2/1) ⇝ 7/2 | gain:0.12557314160386537 clip:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", - "[ (3/2 → 2/1) ⇝ 7/2 | gain:0.12557314160386537 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", - "[ (3/2 → 2/1) ⇝ 7/2 | gain:0.12557314160386537 clip:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", + "[ (3/2 → 2/1) ⇝ 13/6 | gain:0.1256534205464579 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", + "[ (3/2 → 2/1) ⇝ 5/2 | gain:0.25166796373805483 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", + "[ (3/2 → 2/1) ⇝ 5/2 | gain:0.12583398186902742 clip:1 note:E7 s:piano release:0.1 pan:0.712962962962963 ]", + "[ (3/2 → 2/1) ⇝ 7/2 | gain:0.12654642086444556 clip:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", + "[ (3/2 → 2/1) ⇝ 7/2 | gain:0.12654642086444556 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", + "[ (3/2 → 2/1) ⇝ 7/2 | gain:0.12654642086444556 clip:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ 5/3 → 2/1 | clip:1 gain:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ 5/3 → 2/1 | clip:1 gain:0.25 note:E6 s:piano release:0.1 pan:0.6574074074074074 ]", - "[ (5/3 → 2/1) ⇝ 7/3 | gain:0.16753789406194386 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", + "[ (5/3 → 2/1) ⇝ 7/3 | gain:0.16777864249203656 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", "[ (11/6 → 2/1) ⇝ 13/6 | clip:1 gain:0.5 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ (11/6 → 2/1) ⇝ 13/6 | clip:1 gain:0.125 note:E6 s:piano release:0.1 pan:0.6574074074074074 ]", - "[ (11/6 → 2/1) ⇝ 5/2 | gain:0.2514806232312837 clip:1 note:D3 s:piano release:0.1 pan:0.4814814814814815 ]", - "[ 3/2 ⇜ (2/1 → 13/6) | gain:0.1259345878984831 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", + "[ (11/6 → 2/1) ⇝ 5/2 | gain:0.2520845519470039 clip:1 note:D3 s:piano release:0.1 pan:0.4814814814814815 ]", + "[ 3/2 ⇜ (2/1 → 13/6) | gain:0.1256534205464579 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", "[ 11/6 ⇜ (2/1 → 13/6) | clip:1 gain:0.5 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", "[ 11/6 ⇜ (2/1 → 13/6) | clip:1 gain:0.125 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ 5/3 ⇜ (2/1 → 7/3) | gain:0.16805636796466927 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", + "[ 5/3 ⇜ (2/1 → 7/3) | gain:0.16777864249203656 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", "[ 2/1 → 7/3 | clip:1 gain:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ 2/1 → 7/3 | clip:1 gain:0.25 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", - "[ 1/2 ⇜ (2/1 → 5/2) | gain:0.2523143643691359 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", - "[ 1/2 ⇜ (2/1 → 5/2) | gain:0.2523143643691359 clip:1 note:B4 s:piano release:0.1 pan:0.5787037037037037 ]", - "[ 1/2 ⇜ (2/1 → 5/2) | gain:0.2523143643691359 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", - "[ 3/2 ⇜ (2/1 → 5/2) | gain:0.2523143643691359 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", - "[ 3/2 ⇜ (2/1 → 5/2) | gain:0.12615718218456795 clip:1 note:A7 s:piano release:0.1 pan:0.7361111111111112 ]", - "[ 11/6 ⇜ (2/1 → 5/2) | gain:0.2523143643691359 clip:1 note:G3 s:piano release:0.1 pan:0.5046296296296297 ]", + "[ 1/2 ⇜ (2/1 → 5/2) | gain:0.25074029392543207 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", + "[ 1/2 ⇜ (2/1 → 5/2) | gain:0.25074029392543207 clip:1 note:B4 s:piano release:0.1 pan:0.5787037037037037 ]", + "[ 1/2 ⇜ (2/1 → 5/2) | gain:0.25074029392543207 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ 3/2 ⇜ (2/1 → 5/2) | gain:0.25166796373805483 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", + "[ 3/2 ⇜ (2/1 → 5/2) | gain:0.12583398186902742 clip:1 note:A7 s:piano release:0.1 pan:0.7361111111111112 ]", + "[ 11/6 ⇜ (2/1 → 5/2) | gain:0.2520845519470039 clip:1 note:G3 s:piano release:0.1 pan:0.5046296296296297 ]", "[ 2/1 → 8/3 | gain:0.5051177303460894 clip:1 note:G2 s:piano release:0.1 pan:0.44907407407407407 ]", - "[ 1/1 ⇜ (2/1 → 3/1) | gain:0.16872856115259408 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", - "[ 1/1 ⇜ (2/1 → 3/1) | gain:0.16872856115259408 clip:1 note:B5 s:piano release:0.1 pan:0.6342592592592593 ]", - "[ 1/1 ⇜ (2/1 → 3/1) | gain:0.16872856115259408 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", - "[ 3/2 ⇜ (2/1 → 3/1) ⇝ 7/2 | gain:0.12700457494822845 clip:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ 3/2 ⇜ (2/1 → 3/1) ⇝ 7/2 | gain:0.12700457494822845 clip:1 note:B6 s:piano release:0.1 pan:0.6898148148148149 ]", - "[ 3/2 ⇜ (2/1 → 3/1) ⇝ 7/2 | gain:0.12700457494822845 clip:1 note:F7 s:piano release:0.1 pan:0.7175925925925926 ]", + "[ 1/1 ⇜ (2/1 → 3/1) | gain:0.16777864249203656 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", + "[ 1/1 ⇜ (2/1 → 3/1) | gain:0.16777864249203656 clip:1 note:B5 s:piano release:0.1 pan:0.6342592592592593 ]", + "[ 1/1 ⇜ (2/1 → 3/1) | gain:0.16777864249203656 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", + "[ 3/2 ⇜ (2/1 → 3/1) ⇝ 7/2 | gain:0.12654642086444556 clip:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", + "[ 3/2 ⇜ (2/1 → 3/1) ⇝ 7/2 | gain:0.12654642086444556 clip:1 note:B6 s:piano release:0.1 pan:0.6898148148148149 ]", + "[ 3/2 ⇜ (2/1 → 3/1) ⇝ 7/2 | gain:0.12654642086444556 clip:1 note:F7 s:piano release:0.1 pan:0.7175925925925926 ]", "[ 2/1 → 3/1 | gain:0.5061856834577823 clip:1 note:A4 s:piano release:0.1 pan:0.5694444444444444 ]", "[ 2/1 → 3/1 | gain:0.16872856115259408 clip:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ (2/1 → 3/1) ⇝ 4/1 | gain:0.5101350201564457 clip:1 note:G3 s:piano release:0.1 pan:0.5046296296296297 ]", @@ -6328,9 +6314,9 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ (5/2 → 3/1) ⇝ 19/6 | gain:0.2543459874306847 clip:1 note:G3 s:piano release:0.1 pan:0.5046296296296297 ]", "[ (5/2 → 3/1) ⇝ 7/2 | gain:0.25506751007822287 clip:1 note:A5 s:piano release:0.1 pan:0.625 ]", "[ (5/2 → 3/1) ⇝ 7/2 | gain:0.12753375503911143 clip:1 note:G7 s:piano release:0.1 pan:0.7268518518518519 ]", - "[ (5/2 → 3/1) ⇝ 9/2 | gain:0.256270680283866 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", - "[ (5/2 → 3/1) ⇝ 9/2 | gain:0.256270680283866 clip:1 note:B4 s:piano release:0.1 pan:0.5787037037037037 ]", - "[ (5/2 → 3/1) ⇝ 9/2 | gain:0.256270680283866 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ (5/2 → 3/1) ⇝ 9/2 | gain:0.25762002500238423 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", + "[ (5/2 → 3/1) ⇝ 9/2 | gain:0.25762002500238423 clip:1 note:B4 s:piano release:0.1 pan:0.5787037037037037 ]", + "[ (5/2 → 3/1) ⇝ 9/2 | gain:0.25762002500238423 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", "[ 8/3 → 3/1 | clip:1 gain:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ 8/3 → 3/1 | clip:1 gain:0.25 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", "[ (8/3 → 3/1) ⇝ 10/3 | gain:0.5101350201564457 clip:1 note:G2 s:piano release:0.1 pan:0.44907407407407407 ]", @@ -6343,9 +6329,9 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 8/3 ⇜ (3/1 → 10/3) | gain:0.5101350201564457 clip:1 note:G2 s:piano release:0.1 pan:0.44907407407407407 ]", "[ 3/1 → 10/3 | clip:1 gain:1 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", "[ 3/1 → 10/3 | clip:1 gain:0.25 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ 3/2 ⇜ (3/1 → 7/2) | gain:0.12700457494822845 clip:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ 3/2 ⇜ (3/1 → 7/2) | gain:0.12700457494822845 clip:1 note:B6 s:piano release:0.1 pan:0.6898148148148149 ]", - "[ 3/2 ⇜ (3/1 → 7/2) | gain:0.12700457494822845 clip:1 note:F7 s:piano release:0.1 pan:0.7175925925925926 ]", + "[ 3/2 ⇜ (3/1 → 7/2) | gain:0.12654642086444556 clip:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", + "[ 3/2 ⇜ (3/1 → 7/2) | gain:0.12654642086444556 clip:1 note:B6 s:piano release:0.1 pan:0.6898148148148149 ]", + "[ 3/2 ⇜ (3/1 → 7/2) | gain:0.12654642086444556 clip:1 note:F7 s:piano release:0.1 pan:0.7175925925925926 ]", "[ 5/2 ⇜ (3/1 → 7/2) | gain:0.25506751007822287 clip:1 note:A5 s:piano release:0.1 pan:0.625 ]", "[ 5/2 ⇜ (3/1 → 7/2) | gain:0.12753375503911143 clip:1 note:G7 s:piano release:0.1 pan:0.7268518518518519 ]", "[ 17/6 ⇜ (3/1 → 7/2) | gain:0.12792671070481904 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", @@ -6353,14 +6339,14 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 2/1 ⇜ (3/1 → 4/1) | gain:0.5101350201564457 clip:1 note:G3 s:piano release:0.1 pan:0.5046296296296297 ]", "[ 2/1 ⇜ (3/1 → 4/1) | gain:0.5101350201564457 clip:1 note:B3 s:piano release:0.1 pan:0.5231481481481481 ]", "[ 2/1 ⇜ (3/1 → 4/1) | gain:0.5101350201564457 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", - "[ 5/2 ⇜ (3/1 → 4/1) ⇝ 9/2 | gain:0.256270680283866 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", - "[ 5/2 ⇜ (3/1 → 4/1) ⇝ 9/2 | gain:0.256270680283866 clip:1 note:B4 s:piano release:0.1 pan:0.5787037037037037 ]", - "[ 5/2 ⇜ (3/1 → 4/1) ⇝ 9/2 | gain:0.256270680283866 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ 5/2 ⇜ (3/1 → 4/1) ⇝ 9/2 | gain:0.25762002500238423 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", + "[ 5/2 ⇜ (3/1 → 4/1) ⇝ 9/2 | gain:0.25762002500238423 clip:1 note:B4 s:piano release:0.1 pan:0.5787037037037037 ]", + "[ 5/2 ⇜ (3/1 → 4/1) ⇝ 9/2 | gain:0.25762002500238423 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", "[ 3/1 → 4/1 | gain:0.5152400500047685 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", "[ 3/1 → 4/1 | gain:0.17174668333492282 clip:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ (3/1 → 4/1) ⇝ 5/1 | gain:0.17174668333492282 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", - "[ (3/1 → 4/1) ⇝ 5/1 | gain:0.17174668333492282 clip:1 note:B5 s:piano release:0.1 pan:0.6342592592592593 ]", - "[ (3/1 → 4/1) ⇝ 5/1 | gain:0.17174668333492282 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", + "[ (3/1 → 4/1) ⇝ 5/1 | gain:0.17383743092456522 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", + "[ (3/1 → 4/1) ⇝ 5/1 | gain:0.17383743092456522 clip:1 note:B5 s:piano release:0.1 pan:0.6342592592592593 ]", + "[ (3/1 → 4/1) ⇝ 5/1 | gain:0.17383743092456522 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", "[ 19/6 → 7/2 | clip:1 gain:0.5 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", "[ 19/6 → 7/2 | clip:1 gain:0.125 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ 19/6 → 23/6 | gain:0.25762002500238423 clip:1 note:G3 s:piano release:0.1 pan:0.5046296296296297 ]", @@ -6369,37 +6355,37 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 10/3 → 4/1 | gain:0.5172017373171088 clip:1 note:G2 s:piano release:0.1 pan:0.44907407407407407 ]", "[ 7/2 → 23/6 | clip:1 gain:0.5 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ 7/2 → 23/6 | clip:1 gain:0.125 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", - "[ (7/2 → 4/1) ⇝ 25/6 | gain:0.1295577924390654 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", - "[ (7/2 → 4/1) ⇝ 9/2 | gain:0.2591155848781308 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", - "[ (7/2 → 4/1) ⇝ 9/2 | gain:0.1295577924390654 clip:1 note:A7 s:piano release:0.1 pan:0.7361111111111112 ]", - "[ (7/2 → 4/1) ⇝ 11/2 | gain:0.1295577924390654 clip:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ (7/2 → 4/1) ⇝ 11/2 | gain:0.1295577924390654 clip:1 note:B6 s:piano release:0.1 pan:0.6898148148148149 ]", - "[ (7/2 → 4/1) ⇝ 11/2 | gain:0.1295577924390654 clip:1 note:F7 s:piano release:0.1 pan:0.7175925925925926 ]", + "[ (7/2 → 4/1) ⇝ 25/6 | gain:0.1298232110695848 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", + "[ (7/2 → 4/1) ⇝ 9/2 | gain:0.26075614638684785 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", + "[ (7/2 → 4/1) ⇝ 9/2 | gain:0.13037807319342393 clip:1 note:A7 s:piano release:0.1 pan:0.7361111111111112 ]", + "[ (7/2 → 4/1) ⇝ 11/2 | gain:0.13223078370965538 clip:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", + "[ (7/2 → 4/1) ⇝ 11/2 | gain:0.13223078370965538 clip:1 note:B6 s:piano release:0.1 pan:0.6898148148148149 ]", + "[ (7/2 → 4/1) ⇝ 11/2 | gain:0.13223078370965538 clip:1 note:F7 s:piano release:0.1 pan:0.7175925925925926 ]", "[ 11/3 → 4/1 | clip:1 gain:1 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", "[ 11/3 → 4/1 | clip:1 gain:0.25 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ (11/3 → 4/1) ⇝ 13/3 | gain:0.1730976147594464 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", + "[ (11/3 → 4/1) ⇝ 13/3 | gain:0.17383743092456522 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", "[ (23/6 → 4/1) ⇝ 25/6 | clip:1 gain:0.5 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", "[ (23/6 → 4/1) ⇝ 25/6 | clip:1 gain:0.125 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ (23/6 → 4/1) ⇝ 9/2 | gain:0.26019330567613225 clip:1 note:G3 s:piano release:0.1 pan:0.5046296296296297 ]", - "[ 7/2 ⇜ (4/1 → 25/6) | gain:0.13066742055962274 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", + "[ (23/6 → 4/1) ⇝ 9/2 | gain:0.2619292729580872 clip:1 note:G3 s:piano release:0.1 pan:0.5046296296296297 ]", + "[ 7/2 ⇜ (4/1 → 25/6) | gain:0.1298232110695848 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", "[ 23/6 ⇜ (4/1 → 25/6) | clip:1 gain:0.5 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ 23/6 ⇜ (4/1 → 25/6) | clip:1 gain:0.125 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", - "[ 11/3 ⇜ (4/1 → 13/3) | gain:0.17461951530539147 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", + "[ 11/3 ⇜ (4/1 → 13/3) | gain:0.17383743092456522 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", "[ 4/1 → 13/3 | clip:1 gain:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", "[ 4/1 → 13/3 | clip:1 gain:0.25 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ 5/2 ⇜ (4/1 → 9/2) | gain:0.26253931151170046 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", - "[ 5/2 ⇜ (4/1 → 9/2) | gain:0.26253931151170046 clip:1 note:Eb4 s:piano release:0.1 pan:0.5416666666666667 ]", - "[ 5/2 ⇜ (4/1 → 9/2) | gain:0.26253931151170046 clip:1 note:Bb4 s:piano release:0.1 pan:0.5740740740740741 ]", - "[ 7/2 ⇜ (4/1 → 9/2) | gain:0.26253931151170046 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", - "[ 7/2 ⇜ (4/1 → 9/2) | gain:0.13126965575585023 clip:1 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", - "[ 23/6 ⇜ (4/1 → 9/2) | gain:0.26253931151170046 clip:1 note:C3 s:piano release:0.1 pan:0.4722222222222222 ]", + "[ 5/2 ⇜ (4/1 → 9/2) | gain:0.25762002500238423 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", + "[ 5/2 ⇜ (4/1 → 9/2) | gain:0.25762002500238423 clip:1 note:Eb4 s:piano release:0.1 pan:0.5416666666666667 ]", + "[ 5/2 ⇜ (4/1 → 9/2) | gain:0.25762002500238423 clip:1 note:Bb4 s:piano release:0.1 pan:0.5740740740740741 ]", + "[ 7/2 ⇜ (4/1 → 9/2) | gain:0.26075614638684785 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", + "[ 7/2 ⇜ (4/1 → 9/2) | gain:0.13037807319342393 clip:1 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", + "[ 23/6 ⇜ (4/1 → 9/2) | gain:0.2619292729580872 clip:1 note:C3 s:piano release:0.1 pan:0.4722222222222222 ]", "[ 4/1 → 14/3 | gain:0.5263296263974214 clip:1 note:C2 s:piano release:0.1 pan:0.41666666666666663 ]", - "[ 3/1 ⇜ (4/1 → 5/1) | gain:0.17630771161287384 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", - "[ 3/1 ⇜ (4/1 → 5/1) | gain:0.17630771161287384 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", - "[ 3/1 ⇜ (4/1 → 5/1) | gain:0.17630771161287384 clip:1 note:Bb5 s:piano release:0.1 pan:0.6296296296296297 ]", - "[ 7/2 ⇜ (4/1 → 5/1) ⇝ 11/2 | gain:0.13325917806789583 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", - "[ 7/2 ⇜ (4/1 → 5/1) ⇝ 11/2 | gain:0.13325917806789583 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", - "[ 7/2 ⇜ (4/1 → 5/1) ⇝ 11/2 | gain:0.13325917806789583 clip:1 note:Bb6 s:piano release:0.1 pan:0.6851851851851851 ]", + "[ 3/1 ⇜ (4/1 → 5/1) | gain:0.17383743092456522 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", + "[ 3/1 ⇜ (4/1 → 5/1) | gain:0.17383743092456522 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", + "[ 3/1 ⇜ (4/1 → 5/1) | gain:0.17383743092456522 clip:1 note:Bb5 s:piano release:0.1 pan:0.6296296296296297 ]", + "[ 7/2 ⇜ (4/1 → 5/1) ⇝ 11/2 | gain:0.13223078370965538 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", + "[ 7/2 ⇜ (4/1 → 5/1) ⇝ 11/2 | gain:0.13223078370965538 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", + "[ 7/2 ⇜ (4/1 → 5/1) ⇝ 11/2 | gain:0.13223078370965538 clip:1 note:Bb6 s:piano release:0.1 pan:0.6851851851851851 ]", "[ 4/1 → 5/1 | gain:0.5289231348386215 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", "[ 4/1 → 5/1 | gain:0.17630771161287384 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", "[ (4/1 → 5/1) ⇝ 6/1 | gain:0.5374082884455618 clip:1 note:C3 s:piano release:0.1 pan:0.4722222222222222 ]", @@ -6416,9 +6402,9 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ (9/2 → 5/1) ⇝ 31/6 | gain:0.26723291891932766 clip:1 note:C3 s:piano release:0.1 pan:0.4722222222222222 ]", "[ (9/2 → 5/1) ⇝ 11/2 | gain:0.2687041442227809 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", "[ (9/2 → 5/1) ⇝ 11/2 | gain:0.13435207211139044 clip:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", - "[ (9/2 → 5/1) ⇝ 13/2 | gain:0.2710124924534749 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", - "[ (9/2 → 5/1) ⇝ 13/2 | gain:0.2710124924534749 clip:1 note:Eb4 s:piano release:0.1 pan:0.5416666666666667 ]", - "[ (9/2 → 5/1) ⇝ 13/2 | gain:0.2710124924534749 clip:1 note:Bb4 s:piano release:0.1 pan:0.5740740740740741 ]", + "[ (9/2 → 5/1) ⇝ 13/2 | gain:0.273436125488663 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", + "[ (9/2 → 5/1) ⇝ 13/2 | gain:0.273436125488663 clip:1 note:Eb4 s:piano release:0.1 pan:0.5416666666666667 ]", + "[ (9/2 → 5/1) ⇝ 13/2 | gain:0.273436125488663 clip:1 note:Bb4 s:piano release:0.1 pan:0.5740740740740741 ]", "[ 14/3 → 5/1 | clip:1 gain:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", "[ 14/3 → 5/1 | clip:1 gain:0.25 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ (14/3 → 5/1) ⇝ 16/3 | gain:0.5374082884455618 clip:1 note:C2 s:piano release:0.1 pan:0.41666666666666663 ]", @@ -6431,9 +6417,9 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 14/3 ⇜ (5/1 → 16/3) | gain:0.5374082884455618 clip:1 note:C2 s:piano release:0.1 pan:0.41666666666666663 ]", "[ 5/1 → 16/3 | clip:1 gain:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ 5/1 → 16/3 | clip:1 gain:0.25 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", - "[ 7/2 ⇜ (5/1 → 11/2) | gain:0.13325917806789583 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", - "[ 7/2 ⇜ (5/1 → 11/2) | gain:0.13325917806789583 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", - "[ 7/2 ⇜ (5/1 → 11/2) | gain:0.13325917806789583 clip:1 note:Bb6 s:piano release:0.1 pan:0.6851851851851851 ]", + "[ 7/2 ⇜ (5/1 → 11/2) | gain:0.13223078370965538 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", + "[ 7/2 ⇜ (5/1 → 11/2) | gain:0.13223078370965538 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", + "[ 7/2 ⇜ (5/1 → 11/2) | gain:0.13223078370965538 clip:1 note:Bb6 s:piano release:0.1 pan:0.6851851851851851 ]", "[ 9/2 ⇜ (5/1 → 11/2) | gain:0.2687041442227809 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", "[ 9/2 ⇜ (5/1 → 11/2) | gain:0.13435207211139044 clip:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ 29/6 ⇜ (5/1 → 11/2) | gain:0.1351149289525865 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", @@ -6441,14 +6427,14 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 4/1 ⇜ (5/1 → 6/1) | gain:0.5374082884455618 clip:1 note:C3 s:piano release:0.1 pan:0.4722222222222222 ]", "[ 4/1 ⇜ (5/1 → 6/1) | gain:0.5374082884455618 clip:1 note:Eb3 s:piano release:0.1 pan:0.4861111111111111 ]", "[ 4/1 ⇜ (5/1 → 6/1) | gain:0.5374082884455618 clip:1 note:Bb3 s:piano release:0.1 pan:0.5185185185185186 ]", - "[ 9/2 ⇜ (5/1 → 6/1) ⇝ 13/2 | gain:0.2710124924534749 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", - "[ 9/2 ⇜ (5/1 → 6/1) ⇝ 13/2 | gain:0.2710124924534749 clip:1 note:Eb4 s:piano release:0.1 pan:0.5416666666666667 ]", - "[ 9/2 ⇜ (5/1 → 6/1) ⇝ 13/2 | gain:0.2710124924534749 clip:1 note:Bb4 s:piano release:0.1 pan:0.5740740740740741 ]", + "[ 9/2 ⇜ (5/1 → 6/1) ⇝ 13/2 | gain:0.273436125488663 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", + "[ 9/2 ⇜ (5/1 → 6/1) ⇝ 13/2 | gain:0.273436125488663 clip:1 note:Eb4 s:piano release:0.1 pan:0.5416666666666667 ]", + "[ 9/2 ⇜ (5/1 → 6/1) ⇝ 13/2 | gain:0.273436125488663 clip:1 note:Bb4 s:piano release:0.1 pan:0.5740740740740741 ]", "[ 5/1 → 6/1 | gain:0.546872250977326 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", "[ 5/1 → 6/1 | gain:0.1822907503257753 clip:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", - "[ (5/1 → 6/1) ⇝ 7/1 | gain:0.1822907503257753 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", - "[ (5/1 → 6/1) ⇝ 7/1 | gain:0.1822907503257753 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", - "[ (5/1 → 6/1) ⇝ 7/1 | gain:0.1822907503257753 clip:1 note:Bb5 s:piano release:0.1 pan:0.6296296296296297 ]", + "[ (5/1 → 6/1) ⇝ 7/1 | gain:0.18573092140656322 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", + "[ (5/1 → 6/1) ⇝ 7/1 | gain:0.18573092140656322 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", + "[ (5/1 → 6/1) ⇝ 7/1 | gain:0.18573092140656322 clip:1 note:Bb5 s:piano release:0.1 pan:0.6296296296296297 ]", "[ 31/6 → 11/2 | clip:1 gain:0.5 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ 31/6 → 11/2 | clip:1 gain:0.125 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", "[ 31/6 → 35/6 | gain:0.273436125488663 clip:1 note:C3 s:piano release:0.1 pan:0.4722222222222222 ]", @@ -6457,37 +6443,37 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 16/3 → 6/1 | gain:0.5502239722994923 clip:1 note:C2 s:piano release:0.1 pan:0.41666666666666663 ]", "[ 11/2 → 35/6 | clip:1 gain:0.5 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", "[ 11/2 → 35/6 | clip:1 gain:0.125 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ (11/2 → 6/1) ⇝ 37/6 | gain:0.1379835007763804 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", - "[ (11/2 → 6/1) ⇝ 13/2 | gain:0.2759670015527608 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", - "[ (11/2 → 6/1) ⇝ 13/2 | gain:0.1379835007763804 clip:1 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", - "[ (11/2 → 6/1) ⇝ 15/2 | gain:0.1379835007763804 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", - "[ (11/2 → 6/1) ⇝ 15/2 | gain:0.1379835007763804 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", - "[ (11/2 → 6/1) ⇝ 15/2 | gain:0.1379835007763804 clip:1 note:Bb6 s:piano release:0.1 pan:0.6851851851851851 ]", + "[ (11/2 → 6/1) ⇝ 37/6 | gain:0.1384164835303142 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", + "[ (11/2 → 6/1) ⇝ 13/2 | gain:0.27859638210984483 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", + "[ (11/2 → 6/1) ⇝ 13/2 | gain:0.13929819105492242 clip:1 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", + "[ (11/2 → 6/1) ⇝ 15/2 | gain:0.14205631840689176 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", + "[ (11/2 → 6/1) ⇝ 15/2 | gain:0.14205631840689176 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", + "[ (11/2 → 6/1) ⇝ 15/2 | gain:0.14205631840689176 clip:1 note:Bb6 s:piano release:0.1 pan:0.6851851851851851 ]", "[ 17/3 → 6/1 | clip:1 gain:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ 17/3 → 6/1 | clip:1 gain:0.25 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", - "[ (17/3 → 6/1) ⇝ 19/3 | gain:0.18455531137375225 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", + "[ (17/3 → 6/1) ⇝ 19/3 | gain:0.18573092140656322 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", "[ (35/6 → 6/1) ⇝ 37/6 | clip:1 gain:0.5 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ (35/6 → 6/1) ⇝ 37/6 | clip:1 gain:0.125 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", - "[ (35/6 → 6/1) ⇝ 13/2 | gain:0.2777095429668417 clip:1 note:C3 s:piano release:0.1 pan:0.4722222222222222 ]", - "[ 11/2 ⇜ (6/1 → 37/6) | gain:0.1397465650798828 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ (35/6 → 6/1) ⇝ 13/2 | gain:0.28039942590514827 clip:1 note:C3 s:piano release:0.1 pan:0.4722222222222222 ]", + "[ 11/2 ⇜ (6/1 → 37/6) | gain:0.1384164835303142 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", "[ 35/6 ⇜ (6/1 → 37/6) | clip:1 gain:0.5 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ 35/6 ⇜ (6/1 → 37/6) | clip:1 gain:0.125 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ 17/3 ⇜ (6/1 → 19/3) | gain:0.18693295060343218 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", + "[ 17/3 ⇜ (6/1 → 19/3) | gain:0.18573092140656322 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", "[ 6/1 → 19/3 | clip:1 gain:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ 6/1 → 19/3 | clip:1 gain:0.25 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", - "[ 9/2 ⇜ (6/1 → 13/2) | gain:0.28131490153968597 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", - "[ 9/2 ⇜ (6/1 → 13/2) | gain:0.28131490153968597 clip:1 note:A4 s:piano release:0.1 pan:0.5694444444444444 ]", - "[ 9/2 ⇜ (6/1 → 13/2) | gain:0.28131490153968597 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", - "[ 11/2 ⇜ (6/1 → 13/2) | gain:0.28131490153968597 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", - "[ 11/2 ⇜ (6/1 → 13/2) | gain:0.14065745076984298 clip:1 note:G7 s:piano release:0.1 pan:0.7268518518518519 ]", - "[ 35/6 ⇜ (6/1 → 13/2) | gain:0.28131490153968597 clip:1 note:F3 s:piano release:0.1 pan:0.49537037037037035 ]", + "[ 9/2 ⇜ (6/1 → 13/2) | gain:0.273436125488663 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", + "[ 9/2 ⇜ (6/1 → 13/2) | gain:0.273436125488663 clip:1 note:A4 s:piano release:0.1 pan:0.5694444444444444 ]", + "[ 9/2 ⇜ (6/1 → 13/2) | gain:0.273436125488663 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", + "[ 11/2 ⇜ (6/1 → 13/2) | gain:0.27859638210984483 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ 11/2 ⇜ (6/1 → 13/2) | gain:0.13929819105492242 clip:1 note:G7 s:piano release:0.1 pan:0.7268518518518519 ]", + "[ 35/6 ⇜ (6/1 → 13/2) | gain:0.28039942590514827 clip:1 note:F3 s:piano release:0.1 pan:0.49537037037037035 ]", "[ 6/1 → 20/3 | gain:0.5644783658979073 clip:1 note:F2 s:piano release:0.1 pan:0.4398148148148148 ]", - "[ 5/1 ⇜ (6/1 → 7/1) | gain:0.18940842454252232 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", - "[ 5/1 ⇜ (6/1 → 7/1) | gain:0.18940842454252232 clip:1 note:A5 s:piano release:0.1 pan:0.625 ]", - "[ 5/1 ⇜ (6/1 → 7/1) | gain:0.18940842454252232 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", - "[ 11/2 ⇜ (6/1 → 7/1) ⇝ 15/2 | gain:0.1434895885856996 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", - "[ 11/2 ⇜ (6/1 → 7/1) ⇝ 15/2 | gain:0.1434895885856996 clip:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ 11/2 ⇜ (6/1 → 7/1) ⇝ 15/2 | gain:0.1434895885856996 clip:1 note:Eb7 s:piano release:0.1 pan:0.7083333333333333 ]", + "[ 5/1 ⇜ (6/1 → 7/1) | gain:0.18573092140656322 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ 5/1 ⇜ (6/1 → 7/1) | gain:0.18573092140656322 clip:1 note:A5 s:piano release:0.1 pan:0.625 ]", + "[ 5/1 ⇜ (6/1 → 7/1) | gain:0.18573092140656322 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", + "[ 11/2 ⇜ (6/1 → 7/1) ⇝ 15/2 | gain:0.14205631840689176 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", + "[ 11/2 ⇜ (6/1 → 7/1) ⇝ 15/2 | gain:0.14205631840689176 clip:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", + "[ 11/2 ⇜ (6/1 → 7/1) ⇝ 15/2 | gain:0.14205631840689176 clip:1 note:Eb7 s:piano release:0.1 pan:0.7083333333333333 ]", "[ 6/1 → 7/1 | gain:0.568225273627567 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", "[ 6/1 → 7/1 | gain:0.18940842454252232 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", "[ (6/1 → 7/1) ⇝ 8/1 | gain:0.5798073875911826 clip:1 note:F3 s:piano release:0.1 pan:0.49537037037037035 ]", @@ -6504,9 +6490,9 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ (13/2 → 7/1) ⇝ 43/6 | gain:0.2879481196998103 clip:1 note:F3 s:piano release:0.1 pan:0.49537037037037035 ]", "[ (13/2 → 7/1) ⇝ 15/2 | gain:0.2899036937955913 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", "[ (13/2 → 7/1) ⇝ 15/2 | gain:0.14495184689779564 clip:1 note:F7 s:piano release:0.1 pan:0.7175925925925926 ]", - "[ (13/2 → 7/1) ⇝ 17/2 | gain:0.292875009489248 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", - "[ (13/2 → 7/1) ⇝ 17/2 | gain:0.292875009489248 clip:1 note:A4 s:piano release:0.1 pan:0.5694444444444444 ]", - "[ (13/2 → 7/1) ⇝ 17/2 | gain:0.292875009489248 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", + "[ (13/2 → 7/1) ⇝ 17/2 | gain:0.29588166835112206 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", + "[ (13/2 → 7/1) ⇝ 17/2 | gain:0.29588166835112206 clip:1 note:A4 s:piano release:0.1 pan:0.5694444444444444 ]", + "[ (13/2 → 7/1) ⇝ 17/2 | gain:0.29588166835112206 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", "[ 20/3 → 7/1 | clip:1 gain:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ 20/3 → 7/1 | clip:1 gain:0.25 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ (20/3 → 7/1) ⇝ 22/3 | gain:0.5798073875911826 clip:1 note:F2 s:piano release:0.1 pan:0.4398148148148148 ]", @@ -6519,9 +6505,9 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 20/3 ⇜ (7/1 → 22/3) | gain:0.5798073875911826 clip:1 note:F2 s:piano release:0.1 pan:0.4398148148148148 ]", "[ 7/1 → 22/3 | clip:1 gain:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ 7/1 → 22/3 | clip:1 gain:0.25 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ 11/2 ⇜ (7/1 → 15/2) | gain:0.1434895885856996 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", - "[ 11/2 ⇜ (7/1 → 15/2) | gain:0.1434895885856996 clip:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ 11/2 ⇜ (7/1 → 15/2) | gain:0.1434895885856996 clip:1 note:Eb7 s:piano release:0.1 pan:0.7083333333333333 ]", + "[ 11/2 ⇜ (7/1 → 15/2) | gain:0.14205631840689176 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", + "[ 11/2 ⇜ (7/1 → 15/2) | gain:0.14205631840689176 clip:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", + "[ 11/2 ⇜ (7/1 → 15/2) | gain:0.14205631840689176 clip:1 note:Eb7 s:piano release:0.1 pan:0.7083333333333333 ]", "[ 13/2 ⇜ (7/1 → 15/2) | gain:0.2899036937955913 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", "[ 13/2 ⇜ (7/1 → 15/2) | gain:0.14495184689779564 clip:1 note:F7 s:piano release:0.1 pan:0.7175925925925926 ]", "[ 41/6 ⇜ (7/1 → 15/2) | gain:0.14594003660622698 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", @@ -6529,14 +6515,14 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 6/1 ⇜ (7/1 → 8/1) | gain:0.5798073875911826 clip:1 note:F3 s:piano release:0.1 pan:0.49537037037037035 ]", "[ 6/1 ⇜ (7/1 → 8/1) | gain:0.5798073875911826 clip:1 note:A3 s:piano release:0.1 pan:0.5138888888888888 ]", "[ 6/1 ⇜ (7/1 → 8/1) | gain:0.5798073875911826 clip:1 note:Eb4 s:piano release:0.1 pan:0.5416666666666667 ]", - "[ 13/2 ⇜ (7/1 → 8/1) ⇝ 17/2 | gain:0.292875009489248 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", - "[ 13/2 ⇜ (7/1 → 8/1) ⇝ 17/2 | gain:0.292875009489248 clip:1 note:A4 s:piano release:0.1 pan:0.5694444444444444 ]", - "[ 13/2 ⇜ (7/1 → 8/1) ⇝ 17/2 | gain:0.292875009489248 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", + "[ 13/2 ⇜ (7/1 → 8/1) ⇝ 17/2 | gain:0.29588166835112206 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", + "[ 13/2 ⇜ (7/1 → 8/1) ⇝ 17/2 | gain:0.29588166835112206 clip:1 note:A4 s:piano release:0.1 pan:0.5694444444444444 ]", + "[ 13/2 ⇜ (7/1 → 8/1) ⇝ 17/2 | gain:0.29588166835112206 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", "[ 7/1 → 8/1 | gain:0.5917633367022441 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", "[ 7/1 → 8/1 | gain:0.1972544455674147 clip:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ (7/1 → 8/1) ⇝ 9/1 | gain:0.1972544455674147 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", - "[ (7/1 → 8/1) ⇝ 9/1 | gain:0.1972544455674147 clip:1 note:A5 s:piano release:0.1 pan:0.625 ]", - "[ (7/1 → 8/1) ⇝ 9/1 | gain:0.1972544455674147 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", + "[ (7/1 → 8/1) ⇝ 9/1 | gain:0.20130281100670494 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ (7/1 → 8/1) ⇝ 9/1 | gain:0.20130281100670494 clip:1 note:A5 s:piano release:0.1 pan:0.625 ]", + "[ (7/1 → 8/1) ⇝ 9/1 | gain:0.20130281100670494 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", "[ 43/6 → 15/2 | clip:1 gain:0.5 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ 43/6 → 15/2 | clip:1 gain:0.125 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ 43/6 → 47/6 | gain:0.29588166835112206 clip:1 note:F3 s:piano release:0.1 pan:0.49537037037037035 ]", @@ -6545,37 +6531,37 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 22/3 → 8/1 | gain:0.595799977452322 clip:1 note:F2 s:piano release:0.1 pan:0.4398148148148148 ]", "[ 15/2 → 47/6 | clip:1 gain:0.5 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ 15/2 → 47/6 | clip:1 gain:0.125 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", - "[ (15/2 → 8/1) ⇝ 49/6 | gain:0.14945600272593212 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", - "[ (15/2 → 8/1) ⇝ 17/2 | gain:0.29891200545186425 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", - "[ (15/2 → 8/1) ⇝ 17/2 | gain:0.14945600272593212 clip:1 note:G7 s:piano release:0.1 pan:0.7268518518518519 ]", - "[ (15/2 → 8/1) ⇝ 19/2 | gain:0.14945600272593212 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", - "[ (15/2 → 8/1) ⇝ 19/2 | gain:0.14945600272593212 clip:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ (15/2 → 8/1) ⇝ 19/2 | gain:0.14945600272593212 clip:1 note:Eb7 s:piano release:0.1 pan:0.7083333333333333 ]", + "[ (15/2 → 8/1) ⇝ 49/6 | gain:0.1499626710398192 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ (15/2 → 8/1) ⇝ 17/2 | gain:0.30195421651005744 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ (15/2 → 8/1) ⇝ 17/2 | gain:0.15097710825502872 clip:1 note:G7 s:piano release:0.1 pan:0.7268518518518519 ]", + "[ (15/2 → 8/1) ⇝ 19/2 | gain:0.1540133823344964 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", + "[ (15/2 → 8/1) ⇝ 19/2 | gain:0.1540133823344964 clip:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", + "[ (15/2 → 8/1) ⇝ 19/2 | gain:0.1540133823344964 clip:1 note:Eb7 s:piano release:0.1 pan:0.7083333333333333 ]", "[ 23/3 → 8/1 | clip:1 gain:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ 23/3 → 8/1 | clip:1 gain:0.25 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ (23/3 → 8/1) ⇝ 25/3 | gain:0.19995022805309226 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", + "[ (23/3 → 8/1) ⇝ 25/3 | gain:0.20130281100670494 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", "[ (47/6 → 8/1) ⇝ 49/6 | clip:1 gain:0.5 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ (47/6 → 8/1) ⇝ 49/6 | clip:1 gain:0.125 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ (47/6 → 8/1) ⇝ 17/2 | gain:0.30093955912001435 clip:1 note:F3 s:piano release:0.1 pan:0.49537037037037035 ]", - "[ 15/2 ⇜ (8/1 → 49/6) | gain:0.15148443695005026 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", + "[ (47/6 → 8/1) ⇝ 17/2 | gain:0.3039830909404765 clip:1 note:F3 s:piano release:0.1 pan:0.49537037037037035 ]", + "[ 15/2 ⇜ (8/1 → 49/6) | gain:0.1499626710398192 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", "[ 47/6 ⇜ (8/1 → 49/6) | clip:1 gain:0.5 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ 47/6 ⇜ (8/1 → 49/6) | clip:1 gain:0.125 note:E6 s:piano release:0.1 pan:0.6574074074074074 ]", - "[ 23/3 ⇜ (8/1 → 25/3) | gain:0.20265539396031765 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", + "[ 23/3 ⇜ (8/1 → 25/3) | gain:0.20130281100670494 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", "[ 8/1 → 25/3 | clip:1 gain:1 note:E6 s:piano release:0.1 pan:0.6574074074074074 ]", "[ 8/1 → 25/3 | clip:1 gain:0.25 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ 13/2 ⇜ (8/1 → 17/2) | gain:0.3049964275682507 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", - "[ 13/2 ⇜ (8/1 → 17/2) | gain:0.3049964275682507 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", - "[ 13/2 ⇜ (8/1 → 17/2) | gain:0.3049964275682507 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", - "[ 15/2 ⇜ (8/1 → 17/2) | gain:0.3049964275682507 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", - "[ 15/2 ⇜ (8/1 → 17/2) | gain:0.15249821378412534 clip:1 note:E7 s:piano release:0.1 pan:0.712962962962963 ]", - "[ 47/6 ⇜ (8/1 → 17/2) | gain:0.3049964275682507 clip:1 note:D3 s:piano release:0.1 pan:0.4814814814814815 ]", + "[ 13/2 ⇜ (8/1 → 17/2) | gain:0.29588166835112206 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", + "[ 13/2 ⇜ (8/1 → 17/2) | gain:0.29588166835112206 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", + "[ 13/2 ⇜ (8/1 → 17/2) | gain:0.29588166835112206 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", + "[ 15/2 ⇜ (8/1 → 17/2) | gain:0.30195421651005744 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", + "[ 15/2 ⇜ (8/1 → 17/2) | gain:0.15097710825502872 clip:1 note:E7 s:piano release:0.1 pan:0.712962962962963 ]", + "[ 47/6 ⇜ (8/1 → 17/2) | gain:0.3039830909404765 clip:1 note:D3 s:piano release:0.1 pan:0.4814814814814815 ]", "[ 8/1 → 26/3 | gain:0.6120168885879078 clip:1 note:D2 s:piano release:0.1 pan:0.42592592592592593 ]", - "[ 7/1 ⇜ (8/1 → 9/1) | gain:0.2053511764459952 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", - "[ 7/1 ⇜ (8/1 → 9/1) | gain:0.2053511764459952 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", - "[ 7/1 ⇜ (8/1 → 9/1) | gain:0.2053511764459952 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", - "[ 15/2 ⇜ (8/1 → 9/1) ⇝ 19/2 | gain:0.15551671176543344 clip:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", - "[ 15/2 ⇜ (8/1 → 9/1) ⇝ 19/2 | gain:0.15551671176543344 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", - "[ 15/2 ⇜ (8/1 → 9/1) ⇝ 19/2 | gain:0.15551671176543344 clip:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", + "[ 7/1 ⇜ (8/1 → 9/1) | gain:0.20130281100670494 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", + "[ 7/1 ⇜ (8/1 → 9/1) | gain:0.20130281100670494 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ 7/1 ⇜ (8/1 → 9/1) | gain:0.20130281100670494 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", + "[ 15/2 ⇜ (8/1 → 9/1) ⇝ 19/2 | gain:0.1540133823344964 clip:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", + "[ 15/2 ⇜ (8/1 → 9/1) ⇝ 19/2 | gain:0.1540133823344964 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", + "[ 15/2 ⇜ (8/1 → 9/1) ⇝ 19/2 | gain:0.1540133823344964 clip:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ 8/1 → 9/1 | gain:0.6160535293379856 clip:1 note:E4 s:piano release:0.1 pan:0.5462962962962963 ]", "[ 8/1 → 9/1 | gain:0.2053511764459952 clip:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", "[ (8/1 → 9/1) ⇝ 10/1 | gain:0.6280094784490473 clip:1 note:D3 s:piano release:0.1 pan:0.4814814814814815 ]", @@ -6592,9 +6578,9 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ (17/2 → 9/1) ⇝ 55/6 | gain:0.3120283598076609 clip:1 note:D3 s:piano release:0.1 pan:0.4814814814814815 ]", "[ (17/2 → 9/1) ⇝ 19/2 | gain:0.31400473922452365 clip:1 note:E5 s:piano release:0.1 pan:0.6018518518518519 ]", "[ (17/2 → 9/1) ⇝ 19/2 | gain:0.15700236961226183 clip:1 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", - "[ (17/2 → 9/1) ⇝ 21/2 | gain:0.3169292558487157 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", - "[ (17/2 → 9/1) ⇝ 21/2 | gain:0.3169292558487157 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", - "[ (17/2 → 9/1) ⇝ 21/2 | gain:0.3169292558487157 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", + "[ (17/2 → 9/1) ⇝ 21/2 | gain:0.3197957962063314 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", + "[ (17/2 → 9/1) ⇝ 21/2 | gain:0.3197957962063314 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", + "[ (17/2 → 9/1) ⇝ 21/2 | gain:0.3197957962063314 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", "[ 26/3 → 9/1 | clip:1 gain:1 note:E6 s:piano release:0.1 pan:0.6574074074074074 ]", "[ 26/3 → 9/1 | clip:1 gain:0.25 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ (26/3 → 9/1) ⇝ 28/3 | gain:0.6280094784490473 clip:1 note:D2 s:piano release:0.1 pan:0.42592592592592593 ]", @@ -6607,9 +6593,9 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 26/3 ⇜ (9/1 → 28/3) | gain:0.6280094784490473 clip:1 note:D2 s:piano release:0.1 pan:0.42592592592592593 ]", "[ 9/1 → 28/3 | clip:1 gain:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ 9/1 → 28/3 | clip:1 gain:0.25 note:E6 s:piano release:0.1 pan:0.6574074074074074 ]", - "[ 15/2 ⇜ (9/1 → 19/2) | gain:0.15551671176543344 clip:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", - "[ 15/2 ⇜ (9/1 → 19/2) | gain:0.15551671176543344 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", - "[ 15/2 ⇜ (9/1 → 19/2) | gain:0.15551671176543344 clip:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", + "[ 15/2 ⇜ (9/1 → 19/2) | gain:0.1540133823344964 clip:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", + "[ 15/2 ⇜ (9/1 → 19/2) | gain:0.1540133823344964 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", + "[ 15/2 ⇜ (9/1 → 19/2) | gain:0.1540133823344964 clip:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ 17/2 ⇜ (9/1 → 19/2) | gain:0.31400473922452365 clip:1 note:E5 s:piano release:0.1 pan:0.6018518518518519 ]", "[ 17/2 ⇜ (9/1 → 19/2) | gain:0.15700236961226183 clip:1 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", "[ 53/6 ⇜ (9/1 → 19/2) | gain:0.15798015666015228 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", @@ -6617,14 +6603,14 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 8/1 ⇜ (9/1 → 10/1) | gain:0.6280094784490473 clip:1 note:D3 s:piano release:0.1 pan:0.4814814814814815 ]", "[ 8/1 ⇜ (9/1 → 10/1) | gain:0.6280094784490473 clip:1 note:F3 s:piano release:0.1 pan:0.49537037037037035 ]", "[ 8/1 ⇜ (9/1 → 10/1) | gain:0.6280094784490473 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", - "[ 17/2 ⇜ (9/1 → 10/1) ⇝ 21/2 | gain:0.3169292558487157 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", - "[ 17/2 ⇜ (9/1 → 10/1) ⇝ 21/2 | gain:0.3169292558487157 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", - "[ 17/2 ⇜ (9/1 → 10/1) ⇝ 21/2 | gain:0.3169292558487157 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", + "[ 17/2 ⇜ (9/1 → 10/1) ⇝ 21/2 | gain:0.3197957962063314 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", + "[ 17/2 ⇜ (9/1 → 10/1) ⇝ 21/2 | gain:0.3197957962063314 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", + "[ 17/2 ⇜ (9/1 → 10/1) ⇝ 21/2 | gain:0.3197957962063314 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", "[ 9/1 → 10/1 | gain:0.6395915924126628 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", "[ 9/1 → 10/1 | gain:0.2131971974708876 clip:1 note:E6 s:piano release:0.1 pan:0.6574074074074074 ]", - "[ (9/1 → 10/1) ⇝ 11/1 | gain:0.2131971974708876 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", - "[ (9/1 → 10/1) ⇝ 11/1 | gain:0.2131971974708876 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", - "[ (9/1 → 10/1) ⇝ 11/1 | gain:0.2131971974708876 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", + "[ (9/1 → 10/1) ⇝ 11/1 | gain:0.2168747006068467 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", + "[ (9/1 → 10/1) ⇝ 11/1 | gain:0.2168747006068467 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ (9/1 → 10/1) ⇝ 11/1 | gain:0.2168747006068467 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", "[ 55/6 → 19/2 | clip:1 gain:0.5 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ 55/6 → 19/2 | clip:1 gain:0.125 note:E6 s:piano release:0.1 pan:0.6574074074074074 ]", "[ 55/6 → 59/6 | gain:0.3197957962063314 clip:1 note:D3 s:piano release:0.1 pan:0.4814814814814815 ]", @@ -6633,37 +6619,37 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 28/3 → 10/1 | gain:0.6433385001423223 clip:1 note:D2 s:piano release:0.1 pan:0.42592592592592593 ]", "[ 19/2 → 59/6 | clip:1 gain:0.5 note:E6 s:piano release:0.1 pan:0.6574074074074074 ]", "[ 19/2 → 59/6 | clip:1 gain:0.125 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ (19/2 → 10/1) ⇝ 61/6 | gain:0.16129676574021448 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", - "[ (19/2 → 10/1) ⇝ 21/2 | gain:0.32259353148042896 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", - "[ (19/2 → 10/1) ⇝ 21/2 | gain:0.16129676574021448 clip:1 note:E7 s:piano release:0.1 pan:0.712962962962963 ]", - "[ (19/2 → 10/1) ⇝ 23/2 | gain:0.16129676574021448 clip:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", - "[ (19/2 → 10/1) ⇝ 23/2 | gain:0.16129676574021448 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", - "[ (19/2 → 10/1) ⇝ 23/2 | gain:0.16129676574021448 clip:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", + "[ (19/2 → 10/1) ⇝ 61/6 | gain:0.16175450355748333 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", + "[ (19/2 → 10/1) ⇝ 21/2 | gain:0.32531205091027005 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", + "[ (19/2 → 10/1) ⇝ 21/2 | gain:0.16265602545513502 clip:1 note:E7 s:piano release:0.1 pan:0.712962962962963 ]", + "[ (19/2 → 10/1) ⇝ 23/2 | gain:0.16523615376572595 clip:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", + "[ (19/2 → 10/1) ⇝ 23/2 | gain:0.16523615376572595 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", + "[ (19/2 → 10/1) ⇝ 23/2 | gain:0.16523615376572595 clip:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ 29/3 → 10/1 | clip:1 gain:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ 29/3 → 10/1 | clip:1 gain:0.25 note:E6 s:piano release:0.1 pan:0.6574074074074074 ]", - "[ (29/3 → 10/1) ⇝ 31/3 | gain:0.21567267140997776 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", + "[ (29/3 → 10/1) ⇝ 31/3 | gain:0.2168747006068467 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", "[ (59/6 → 10/1) ⇝ 61/6 | clip:1 gain:0.5 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ (59/6 → 10/1) ⇝ 61/6 | clip:1 gain:0.125 note:E6 s:piano release:0.1 pan:0.6574074074074074 ]", - "[ (59/6 → 10/1) ⇝ 21/2 | gain:0.32441530286034925 clip:1 note:D3 s:piano release:0.1 pan:0.4814814814814815 ]", - "[ 19/2 ⇜ (10/1 → 61/6) | gain:0.1630994450266366 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", + "[ (59/6 → 10/1) ⇝ 21/2 | gain:0.3270754659594865 clip:1 note:D3 s:piano release:0.1 pan:0.4814814814814815 ]", + "[ 19/2 ⇜ (10/1 → 61/6) | gain:0.16175450355748333 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", "[ 59/6 ⇜ (10/1 → 61/6) | clip:1 gain:0.5 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", "[ 59/6 ⇜ (10/1 → 61/6) | clip:1 gain:0.125 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ 29/3 ⇜ (10/1 → 31/3) | gain:0.21805031063965766 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", + "[ 29/3 ⇜ (10/1 → 31/3) | gain:0.2168747006068467 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", "[ 10/1 → 31/3 | clip:1 gain:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ 10/1 → 31/3 | clip:1 gain:0.25 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", - "[ 17/2 ⇜ (10/1 → 21/2) | gain:0.3279414314673541 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", - "[ 17/2 ⇜ (10/1 → 21/2) | gain:0.3279414314673541 clip:1 note:B4 s:piano release:0.1 pan:0.5787037037037037 ]", - "[ 17/2 ⇜ (10/1 → 21/2) | gain:0.3279414314673541 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", - "[ 19/2 ⇜ (10/1 → 21/2) | gain:0.3279414314673541 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", - "[ 19/2 ⇜ (10/1 → 21/2) | gain:0.16397071573367705 clip:1 note:A7 s:piano release:0.1 pan:0.7361111111111112 ]", - "[ 59/6 ⇜ (10/1 → 21/2) | gain:0.3279414314673541 clip:1 note:G3 s:piano release:0.1 pan:0.5046296296296297 ]", + "[ 17/2 ⇜ (10/1 → 21/2) | gain:0.3197957962063314 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", + "[ 17/2 ⇜ (10/1 → 21/2) | gain:0.3197957962063314 clip:1 note:B4 s:piano release:0.1 pan:0.5787037037037037 ]", + "[ 17/2 ⇜ (10/1 → 21/2) | gain:0.3197957962063314 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ 19/2 ⇜ (10/1 → 21/2) | gain:0.32531205091027005 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", + "[ 19/2 ⇜ (10/1 → 21/2) | gain:0.16265602545513502 clip:1 note:A7 s:piano release:0.1 pan:0.7361111111111112 ]", + "[ 59/6 ⇜ (10/1 → 21/2) | gain:0.3270754659594865 clip:1 note:G3 s:piano release:0.1 pan:0.5046296296296297 ]", "[ 10/1 → 32/3 | gain:0.6575928937407377 clip:1 note:G2 s:piano release:0.1 pan:0.44907407407407407 ]", - "[ 9/1 ⇜ (10/1 → 11/1) | gain:0.22031487168763458 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", - "[ 9/1 ⇜ (10/1 → 11/1) | gain:0.22031487168763458 clip:1 note:B5 s:piano release:0.1 pan:0.6342592592592593 ]", - "[ 9/1 ⇜ (10/1 → 11/1) | gain:0.22031487168763458 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", - "[ 19/2 ⇜ (10/1 → 11/1) ⇝ 23/2 | gain:0.16644797028331998 clip:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ 19/2 ⇜ (10/1 → 11/1) ⇝ 23/2 | gain:0.16644797028331998 clip:1 note:B6 s:piano release:0.1 pan:0.6898148148148149 ]", - "[ 19/2 ⇜ (10/1 → 11/1) ⇝ 23/2 | gain:0.16644797028331998 clip:1 note:F7 s:piano release:0.1 pan:0.7175925925925926 ]", + "[ 9/1 ⇜ (10/1 → 11/1) | gain:0.2168747006068467 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", + "[ 9/1 ⇜ (10/1 → 11/1) | gain:0.2168747006068467 clip:1 note:B5 s:piano release:0.1 pan:0.6342592592592593 ]", + "[ 9/1 ⇜ (10/1 → 11/1) | gain:0.2168747006068467 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", + "[ 19/2 ⇜ (10/1 → 11/1) ⇝ 23/2 | gain:0.16523615376572595 clip:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", + "[ 19/2 ⇜ (10/1 → 11/1) ⇝ 23/2 | gain:0.16523615376572595 clip:1 note:B6 s:piano release:0.1 pan:0.6898148148148149 ]", + "[ 19/2 ⇜ (10/1 → 11/1) ⇝ 23/2 | gain:0.16523615376572595 clip:1 note:F7 s:piano release:0.1 pan:0.7175925925925926 ]", "[ 10/1 → 11/1 | gain:0.6609446150629038 clip:1 note:A4 s:piano release:0.1 pan:0.5694444444444444 ]", "[ 10/1 → 11/1 | gain:0.22031487168763458 clip:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ (10/1 → 11/1) ⇝ 12/1 | gain:0.670408577594668 clip:1 note:G3 s:piano release:0.1 pan:0.5046296296296297 ]", @@ -6680,9 +6666,9 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ (21/2 → 11/1) ⇝ 67/6 | gain:0.33367857511494187 clip:1 note:G3 s:piano release:0.1 pan:0.5046296296296297 ]", "[ (21/2 → 11/1) ⇝ 23/2 | gain:0.335204288797334 clip:1 note:A5 s:piano release:0.1 pan:0.625 ]", "[ (21/2 → 11/1) ⇝ 23/2 | gain:0.167602144398667 clip:1 note:G7 s:piano release:0.1 pan:0.7268518518518519 ]", - "[ (21/2 → 11/1) ⇝ 25/2 | gain:0.33739007688432326 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", - "[ (21/2 → 11/1) ⇝ 25/2 | gain:0.33739007688432326 clip:1 note:B4 s:piano release:0.1 pan:0.5787037037037037 ]", - "[ (21/2 → 11/1) ⇝ 25/2 | gain:0.33739007688432326 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ (21/2 → 11/1) ⇝ 25/2 | gain:0.33944686560080417 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", + "[ (21/2 → 11/1) ⇝ 25/2 | gain:0.33944686560080417 clip:1 note:B4 s:piano release:0.1 pan:0.5787037037037037 ]", + "[ (21/2 → 11/1) ⇝ 25/2 | gain:0.33944686560080417 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", "[ 32/3 → 11/1 | clip:1 gain:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ 32/3 → 11/1 | clip:1 gain:0.25 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", "[ (32/3 → 11/1) ⇝ 34/3 | gain:0.670408577594668 clip:1 note:G2 s:piano release:0.1 pan:0.44907407407407407 ]", @@ -6695,9 +6681,9 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 32/3 ⇜ (11/1 → 34/3) | gain:0.670408577594668 clip:1 note:G2 s:piano release:0.1 pan:0.44907407407407407 ]", "[ 11/1 → 34/3 | clip:1 gain:1 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", "[ 11/1 → 34/3 | clip:1 gain:0.25 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ 19/2 ⇜ (11/1 → 23/2) | gain:0.16644797028331998 clip:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ 19/2 ⇜ (11/1 → 23/2) | gain:0.16644797028331998 clip:1 note:B6 s:piano release:0.1 pan:0.6898148148148149 ]", - "[ 19/2 ⇜ (11/1 → 23/2) | gain:0.16644797028331998 clip:1 note:F7 s:piano release:0.1 pan:0.7175925925925926 ]", + "[ 19/2 ⇜ (11/1 → 23/2) | gain:0.16523615376572595 clip:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", + "[ 19/2 ⇜ (11/1 → 23/2) | gain:0.16523615376572595 clip:1 note:B6 s:piano release:0.1 pan:0.6898148148148149 ]", + "[ 19/2 ⇜ (11/1 → 23/2) | gain:0.16523615376572595 clip:1 note:F7 s:piano release:0.1 pan:0.7175925925925926 ]", "[ 21/2 ⇜ (11/1 → 23/2) | gain:0.335204288797334 clip:1 note:A5 s:piano release:0.1 pan:0.625 ]", "[ 21/2 ⇜ (11/1 → 23/2) | gain:0.167602144398667 clip:1 note:G7 s:piano release:0.1 pan:0.7268518518518519 ]", "[ 65/6 ⇜ (11/1 → 23/2) | gain:0.1683377570503936 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", @@ -6705,14 +6691,14 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 10/1 ⇜ (11/1 → 12/1) | gain:0.670408577594668 clip:1 note:G3 s:piano release:0.1 pan:0.5046296296296297 ]", "[ 10/1 ⇜ (11/1 → 12/1) | gain:0.670408577594668 clip:1 note:B3 s:piano release:0.1 pan:0.5231481481481481 ]", "[ 10/1 ⇜ (11/1 → 12/1) | gain:0.670408577594668 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", - "[ 21/2 ⇜ (11/1 → 12/1) ⇝ 25/2 | gain:0.33739007688432326 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", - "[ 21/2 ⇜ (11/1 → 12/1) ⇝ 25/2 | gain:0.33739007688432326 clip:1 note:B4 s:piano release:0.1 pan:0.5787037037037037 ]", - "[ 21/2 ⇜ (11/1 → 12/1) ⇝ 25/2 | gain:0.33739007688432326 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ 21/2 ⇜ (11/1 → 12/1) ⇝ 25/2 | gain:0.33944686560080417 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", + "[ 21/2 ⇜ (11/1 → 12/1) ⇝ 25/2 | gain:0.33944686560080417 clip:1 note:B4 s:piano release:0.1 pan:0.5787037037037037 ]", + "[ 21/2 ⇜ (11/1 → 12/1) ⇝ 25/2 | gain:0.33944686560080417 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", "[ 11/1 → 12/1 | gain:0.6788937312016083 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", "[ 11/1 → 12/1 | gain:0.2262979104005361 clip:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ (11/1 → 12/1) ⇝ 13/1 | gain:0.2262979104005361 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", - "[ (11/1 → 12/1) ⇝ 13/1 | gain:0.2262979104005361 clip:1 note:B5 s:piano release:0.1 pan:0.6342592592592593 ]", - "[ (11/1 → 12/1) ⇝ 13/1 | gain:0.2262979104005361 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", + "[ (11/1 → 12/1) ⇝ 13/1 | gain:0.22876819108884472 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", + "[ (11/1 → 12/1) ⇝ 13/1 | gain:0.22876819108884472 clip:1 note:B5 s:piano release:0.1 pan:0.6342592592592593 ]", + "[ (11/1 → 12/1) ⇝ 13/1 | gain:0.22876819108884472 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", "[ 67/6 → 23/2 | clip:1 gain:0.5 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", "[ 67/6 → 23/2 | clip:1 gain:0.125 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ 67/6 → 71/6 | gain:0.33944686560080417 clip:1 note:G3 s:piano release:0.1 pan:0.5046296296296297 ]", @@ -6721,37 +6707,37 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 34/3 → 12/1 | gain:0.6814872396428084 clip:1 note:G2 s:piano release:0.1 pan:0.44907407407407407 ]", "[ 23/2 → 71/6 | clip:1 gain:0.5 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", "[ 23/2 → 71/6 | clip:1 gain:0.125 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", - "[ (23/2 → 12/1) ⇝ 73/6 | gain:0.17068456075420724 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", - "[ (23/2 → 12/1) ⇝ 25/2 | gain:0.3413691215084145 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", - "[ (23/2 → 12/1) ⇝ 25/2 | gain:0.17068456075420724 clip:1 note:A7 s:piano release:0.1 pan:0.7361111111111112 ]", - "[ (23/2 → 12/1) ⇝ 27/2 | gain:0.17068456075420724 clip:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ (23/2 → 12/1) ⇝ 27/2 | gain:0.17068456075420724 clip:1 note:B6 s:piano release:0.1 pan:0.6898148148148149 ]", - "[ (23/2 → 12/1) ⇝ 27/2 | gain:0.17068456075420724 clip:1 note:F7 s:piano release:0.1 pan:0.7175925925925926 ]", + "[ (23/2 → 12/1) ⇝ 73/6 | gain:0.17098958003101383 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", + "[ (23/2 → 12/1) ⇝ 25/2 | gain:0.3431522866332671 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", + "[ (23/2 → 12/1) ⇝ 25/2 | gain:0.17157614331663354 clip:1 note:A7 s:piano release:0.1 pan:0.7361111111111112 ]", + "[ (23/2 → 12/1) ⇝ 27/2 | gain:0.17314420400886532 clip:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", + "[ (23/2 → 12/1) ⇝ 27/2 | gain:0.17314420400886532 clip:1 note:B6 s:piano release:0.1 pan:0.6898148148148149 ]", + "[ (23/2 → 12/1) ⇝ 27/2 | gain:0.17314420400886532 clip:1 note:F7 s:piano release:0.1 pan:0.7175925925925926 ]", "[ 35/3 → 12/1 | clip:1 gain:1 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", "[ 35/3 → 12/1 | clip:1 gain:0.25 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ (35/3 → 12/1) ⇝ 37/3 | gain:0.22798610670801844 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", + "[ (35/3 → 12/1) ⇝ 37/3 | gain:0.22876819108884472 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", "[ (71/6 → 12/1) ⇝ 73/6 | clip:1 gain:0.5 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", "[ (71/6 → 12/1) ⇝ 73/6 | clip:1 gain:0.125 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ (71/6 → 12/1) ⇝ 25/2 | gain:0.34257359190086933 clip:1 note:G3 s:piano release:0.1 pan:0.5046296296296297 ]", - "[ 23/2 ⇜ (12/1 → 73/6) | gain:0.17185756367199134 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", + "[ (71/6 → 12/1) ⇝ 25/2 | gain:0.34426201088094527 clip:1 note:G3 s:piano release:0.1 pan:0.5046296296296297 ]", + "[ 23/2 ⇜ (12/1 → 73/6) | gain:0.17098958003101383 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", "[ 71/6 ⇜ (12/1 → 73/6) | clip:1 gain:0.5 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ 71/6 ⇜ (12/1 → 73/6) | clip:1 gain:0.125 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", - "[ 35/3 ⇜ (12/1 → 37/3) | gain:0.2295080072539635 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", + "[ 35/3 ⇜ (12/1 → 37/3) | gain:0.22876819108884472 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", "[ 12/1 → 37/3 | clip:1 gain:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", "[ 12/1 → 37/3 | clip:1 gain:0.25 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ 21/2 ⇜ (12/1 → 25/2) | gain:0.3447928481419841 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", - "[ 21/2 ⇜ (12/1 → 25/2) | gain:0.3447928481419841 clip:1 note:Eb4 s:piano release:0.1 pan:0.5416666666666667 ]", - "[ 21/2 ⇜ (12/1 → 25/2) | gain:0.3447928481419841 clip:1 note:Bb4 s:piano release:0.1 pan:0.5740740740740741 ]", - "[ 23/2 ⇜ (12/1 → 25/2) | gain:0.3447928481419841 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", - "[ 23/2 ⇜ (12/1 → 25/2) | gain:0.17239642407099204 clip:1 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", - "[ 71/6 ⇜ (12/1 → 25/2) | gain:0.3447928481419841 clip:1 note:C3 s:piano release:0.1 pan:0.4722222222222222 ]", + "[ 21/2 ⇜ (12/1 → 25/2) | gain:0.33944686560080417 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", + "[ 21/2 ⇜ (12/1 → 25/2) | gain:0.33944686560080417 clip:1 note:Eb4 s:piano release:0.1 pan:0.5416666666666667 ]", + "[ 21/2 ⇜ (12/1 → 25/2) | gain:0.33944686560080417 clip:1 note:Bb4 s:piano release:0.1 pan:0.5740740740740741 ]", + "[ 23/2 ⇜ (12/1 → 25/2) | gain:0.3431522866332671 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", + "[ 23/2 ⇜ (12/1 → 25/2) | gain:0.17157614331663354 clip:1 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", + "[ 71/6 ⇜ (12/1 → 25/2) | gain:0.34426201088094527 clip:1 note:C3 s:piano release:0.1 pan:0.4722222222222222 ]", "[ 12/1 → 38/3 | gain:0.690615128723121 clip:1 note:C2 s:piano release:0.1 pan:0.41666666666666663 ]", - "[ 11/1 ⇜ (12/1 → 13/1) | gain:0.23085893867848709 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", - "[ 11/1 ⇜ (12/1 → 13/1) | gain:0.23085893867848709 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", - "[ 11/1 ⇜ (12/1 → 13/1) | gain:0.23085893867848709 clip:1 note:Bb5 s:piano release:0.1 pan:0.6296296296296297 ]", - "[ 23/2 ⇜ (12/1 → 13/1) ⇝ 27/2 | gain:0.17381887636812446 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", - "[ 23/2 ⇜ (12/1 → 13/1) ⇝ 27/2 | gain:0.17381887636812446 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", - "[ 23/2 ⇜ (12/1 → 13/1) ⇝ 27/2 | gain:0.17381887636812446 clip:1 note:Bb6 s:piano release:0.1 pan:0.6851851851851851 ]", + "[ 11/1 ⇜ (12/1 → 13/1) | gain:0.22876819108884472 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", + "[ 11/1 ⇜ (12/1 → 13/1) | gain:0.22876819108884472 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", + "[ 11/1 ⇜ (12/1 → 13/1) | gain:0.22876819108884472 clip:1 note:Bb5 s:piano release:0.1 pan:0.6296296296296297 ]", + "[ 23/2 ⇜ (12/1 → 13/1) ⇝ 27/2 | gain:0.17314420400886532 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", + "[ 23/2 ⇜ (12/1 → 13/1) ⇝ 27/2 | gain:0.17314420400886532 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", + "[ 23/2 ⇜ (12/1 → 13/1) ⇝ 27/2 | gain:0.17314420400886532 clip:1 note:Bb6 s:piano release:0.1 pan:0.6851851851851851 ]", "[ 12/1 → 13/1 | gain:0.6925768160354613 clip:1 note:D4 s:piano release:0.1 pan:0.537037037037037 ]", "[ 12/1 → 13/1 | gain:0.23085893867848709 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", "[ (12/1 → 13/1) ⇝ 14/1 | gain:0.697681845883784 clip:1 note:C3 s:piano release:0.1 pan:0.4722222222222222 ]", @@ -6768,9 +6754,9 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ (25/2 → 13/1) ⇝ 79/6 | gain:0.34805501161047686 clip:1 note:C3 s:piano release:0.1 pan:0.4722222222222222 ]", "[ (25/2 → 13/1) ⇝ 27/2 | gain:0.348840922941892 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", "[ (25/2 → 13/1) ⇝ 27/2 | gain:0.174420461470946 clip:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", - "[ (25/2 → 13/1) ⇝ 29/2 | gain:0.34989928312365803 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", - "[ (25/2 → 13/1) ⇝ 29/2 | gain:0.34989928312365803 clip:1 note:Eb4 s:piano release:0.1 pan:0.5416666666666667 ]", - "[ (25/2 → 13/1) ⇝ 29/2 | gain:0.34989928312365803 clip:1 note:Bb4 s:piano release:0.1 pan:0.5740740740740741 ]", + "[ (25/2 → 13/1) ⇝ 29/2 | gain:0.35081559129122375 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", + "[ (25/2 → 13/1) ⇝ 29/2 | gain:0.35081559129122375 clip:1 note:Eb4 s:piano release:0.1 pan:0.5416666666666667 ]", + "[ (25/2 → 13/1) ⇝ 29/2 | gain:0.35081559129122375 clip:1 note:Bb4 s:piano release:0.1 pan:0.5740740740740741 ]", "[ 38/3 → 13/1 | clip:1 gain:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", "[ 38/3 → 13/1 | clip:1 gain:0.25 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ (38/3 → 13/1) ⇝ 40/3 | gain:0.697681845883784 clip:1 note:C2 s:piano release:0.1 pan:0.41666666666666663 ]", @@ -6783,9 +6769,9 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 38/3 ⇜ (13/1 → 40/3) | gain:0.697681845883784 clip:1 note:C2 s:piano release:0.1 pan:0.41666666666666663 ]", "[ 13/1 → 40/3 | clip:1 gain:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ 13/1 → 40/3 | clip:1 gain:0.25 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", - "[ 23/2 ⇜ (13/1 → 27/2) | gain:0.17381887636812446 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", - "[ 23/2 ⇜ (13/1 → 27/2) | gain:0.17381887636812446 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", - "[ 23/2 ⇜ (13/1 → 27/2) | gain:0.17381887636812446 clip:1 note:Bb6 s:piano release:0.1 pan:0.6851851851851851 ]", + "[ 23/2 ⇜ (13/1 → 27/2) | gain:0.17314420400886532 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", + "[ 23/2 ⇜ (13/1 → 27/2) | gain:0.17314420400886532 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", + "[ 23/2 ⇜ (13/1 → 27/2) | gain:0.17314420400886532 clip:1 note:Bb6 s:piano release:0.1 pan:0.6851851851851851 ]", "[ 25/2 ⇜ (13/1 → 27/2) | gain:0.348840922941892 clip:1 note:D5 s:piano release:0.1 pan:0.5925925925925926 ]", "[ 25/2 ⇜ (13/1 → 27/2) | gain:0.174420461470946 clip:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ 77/6 ⇜ (13/1 → 27/2) | gain:0.1747812227947151 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", @@ -6793,14 +6779,14 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 12/1 ⇜ (13/1 → 14/1) | gain:0.697681845883784 clip:1 note:C3 s:piano release:0.1 pan:0.4722222222222222 ]", "[ 12/1 ⇜ (13/1 → 14/1) | gain:0.697681845883784 clip:1 note:Eb3 s:piano release:0.1 pan:0.4861111111111111 ]", "[ 12/1 ⇜ (13/1 → 14/1) | gain:0.697681845883784 clip:1 note:Bb3 s:piano release:0.1 pan:0.5185185185185186 ]", - "[ 25/2 ⇜ (13/1 → 14/1) ⇝ 29/2 | gain:0.34989928312365803 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", - "[ 25/2 ⇜ (13/1 → 14/1) ⇝ 29/2 | gain:0.34989928312365803 clip:1 note:Eb4 s:piano release:0.1 pan:0.5416666666666667 ]", - "[ 25/2 ⇜ (13/1 → 14/1) ⇝ 29/2 | gain:0.34989928312365803 clip:1 note:Bb4 s:piano release:0.1 pan:0.5740740740740741 ]", + "[ 25/2 ⇜ (13/1 → 14/1) ⇝ 29/2 | gain:0.35081559129122375 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", + "[ 25/2 ⇜ (13/1 → 14/1) ⇝ 29/2 | gain:0.35081559129122375 clip:1 note:Eb4 s:piano release:0.1 pan:0.5416666666666667 ]", + "[ 25/2 ⇜ (13/1 → 14/1) ⇝ 29/2 | gain:0.35081559129122375 clip:1 note:Bb4 s:piano release:0.1 pan:0.5740740740740741 ]", "[ 13/1 → 14/1 | gain:0.7016311825824475 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", "[ 13/1 → 14/1 | gain:0.23387706086081583 clip:1 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", - "[ (13/1 → 14/1) ⇝ 15/1 | gain:0.23387706086081583 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", - "[ (13/1 → 14/1) ⇝ 15/1 | gain:0.23387706086081583 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", - "[ (13/1 → 14/1) ⇝ 15/1 | gain:0.23387706086081583 clip:1 note:Bb5 s:piano release:0.1 pan:0.6296296296296297 ]", + "[ (13/1 → 14/1) ⇝ 15/1 | gain:0.23482697952137338 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", + "[ (13/1 → 14/1) ⇝ 15/1 | gain:0.23482697952137338 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", + "[ (13/1 → 14/1) ⇝ 15/1 | gain:0.23482697952137338 clip:1 note:Bb5 s:piano release:0.1 pan:0.6296296296296297 ]", "[ 79/6 → 27/2 | clip:1 gain:0.5 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ 79/6 → 27/2 | clip:1 gain:0.125 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", "[ 79/6 → 83/6 | gain:0.35081559129122375 clip:1 note:C3 s:piano release:0.1 pan:0.4722222222222222 ]", @@ -6809,37 +6795,37 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 40/3 → 14/1 | gain:0.7026991356941406 clip:1 note:C2 s:piano release:0.1 pan:0.41666666666666663 ]", "[ 27/2 → 83/6 | clip:1 gain:0.5 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", "[ 27/2 → 83/6 | clip:1 gain:0.125 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ (27/2 → 14/1) ⇝ 85/6 | gain:0.1757970343254895 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", - "[ (27/2 → 14/1) ⇝ 29/2 | gain:0.351594068650979 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", - "[ (27/2 → 14/1) ⇝ 29/2 | gain:0.1757970343254895 clip:1 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", - "[ (27/2 → 14/1) ⇝ 31/2 | gain:0.1757970343254895 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", - "[ (27/2 → 14/1) ⇝ 31/2 | gain:0.1757970343254895 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", - "[ (27/2 → 14/1) ⇝ 31/2 | gain:0.1757970343254895 clip:1 note:Bb6 s:piano release:0.1 pan:0.6851851851851851 ]", + "[ (27/2 → 14/1) ⇝ 85/6 | gain:0.17591194053655546 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", + "[ (27/2 → 14/1) ⇝ 29/2 | gain:0.3522404692820601 clip:1 note:C5 s:piano release:0.1 pan:0.5833333333333333 ]", + "[ (27/2 → 14/1) ⇝ 29/2 | gain:0.17612023464103005 clip:1 note:D7 s:piano release:0.1 pan:0.7037037037037037 ]", + "[ (27/2 → 14/1) ⇝ 31/2 | gain:0.17658406954734143 clip:1 note:C6 s:piano release:0.1 pan:0.6388888888888888 ]", + "[ (27/2 → 14/1) ⇝ 31/2 | gain:0.17658406954734143 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", + "[ (27/2 → 14/1) ⇝ 31/2 | gain:0.17658406954734143 clip:1 note:Bb6 s:piano release:0.1 pan:0.6851851851851851 ]", "[ 41/3 → 14/1 | clip:1 gain:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ 41/3 → 14/1 | clip:1 gain:0.25 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", - "[ (41/3 → 14/1) ⇝ 43/3 | gain:0.2345492540487406 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", + "[ (41/3 → 14/1) ⇝ 43/3 | gain:0.23482697952137338 clip:1 note:C4 s:piano release:0.1 pan:0.5277777777777778 ]", "[ (83/6 → 14/1) ⇝ 85/6 | clip:1 gain:0.5 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ (83/6 → 14/1) ⇝ 85/6 | clip:1 gain:0.125 note:D6 s:piano release:0.1 pan:0.6481481481481481 ]", - "[ (83/6 → 14/1) ⇝ 29/2 | gain:0.3520392572231487 clip:1 note:C3 s:piano release:0.1 pan:0.4722222222222222 ]", - "[ 27/2 ⇜ (14/1 → 85/6) | gain:0.17621390489441566 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ (83/6 → 14/1) ⇝ 29/2 | gain:0.3526015919271991 clip:1 note:C3 s:piano release:0.1 pan:0.4722222222222222 ]", + "[ 27/2 ⇜ (14/1 → 85/6) | gain:0.17591194053655546 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", "[ 83/6 ⇜ (14/1 → 85/6) | clip:1 gain:0.5 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ 83/6 ⇜ (14/1 → 85/6) | clip:1 gain:0.125 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ 41/3 ⇜ (14/1 → 43/3) | gain:0.23506772795146605 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", + "[ 41/3 ⇜ (14/1 → 43/3) | gain:0.23482697952137338 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", "[ 14/1 → 43/3 | clip:1 gain:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ 14/1 → 43/3 | clip:1 gain:0.25 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", - "[ 25/2 ⇜ (14/1 → 29/2) | gain:0.35276214981238413 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", - "[ 25/2 ⇜ (14/1 → 29/2) | gain:0.35276214981238413 clip:1 note:A4 s:piano release:0.1 pan:0.5694444444444444 ]", - "[ 25/2 ⇜ (14/1 → 29/2) | gain:0.35276214981238413 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", - "[ 27/2 ⇜ (14/1 → 29/2) | gain:0.35276214981238413 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", - "[ 27/2 ⇜ (14/1 → 29/2) | gain:0.17638107490619206 clip:1 note:G7 s:piano release:0.1 pan:0.7268518518518519 ]", - "[ 83/6 ⇜ (14/1 → 29/2) | gain:0.35276214981238413 clip:1 note:F3 s:piano release:0.1 pan:0.49537037037037035 ]", + "[ 25/2 ⇜ (14/1 → 29/2) | gain:0.35081559129122375 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", + "[ 25/2 ⇜ (14/1 → 29/2) | gain:0.35081559129122375 clip:1 note:A4 s:piano release:0.1 pan:0.5694444444444444 ]", + "[ 25/2 ⇜ (14/1 → 29/2) | gain:0.35081559129122375 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", + "[ 27/2 ⇜ (14/1 → 29/2) | gain:0.3522404692820601 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ 27/2 ⇜ (14/1 → 29/2) | gain:0.17612023464103005 clip:1 note:G7 s:piano release:0.1 pan:0.7268518518518519 ]", + "[ 83/6 ⇜ (14/1 → 29/2) | gain:0.3526015919271991 clip:1 note:F3 s:piano release:0.1 pan:0.49537037037037035 ]", "[ 14/1 → 44/3 | gain:0.7058196775556453 clip:1 note:F2 s:piano release:0.1 pan:0.4398148148148148 ]", - "[ 13/1 ⇜ (14/1 → 15/1) | gain:0.2354454260631219 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", - "[ 13/1 ⇜ (14/1 → 15/1) | gain:0.2354454260631219 clip:1 note:A5 s:piano release:0.1 pan:0.625 ]", - "[ 13/1 ⇜ (14/1 → 15/1) | gain:0.2354454260631219 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", - "[ 27/2 ⇜ (14/1 → 15/1) ⇝ 31/2 | gain:0.17673460394126828 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", - "[ 27/2 ⇜ (14/1 → 15/1) ⇝ 31/2 | gain:0.17673460394126828 clip:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ 27/2 ⇜ (14/1 → 15/1) ⇝ 31/2 | gain:0.17673460394126828 clip:1 note:Eb7 s:piano release:0.1 pan:0.7083333333333333 ]", + "[ 13/1 ⇜ (14/1 → 15/1) | gain:0.23482697952137338 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ 13/1 ⇜ (14/1 → 15/1) | gain:0.23482697952137338 clip:1 note:A5 s:piano release:0.1 pan:0.625 ]", + "[ 13/1 ⇜ (14/1 → 15/1) | gain:0.23482697952137338 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", + "[ 27/2 ⇜ (14/1 → 15/1) ⇝ 31/2 | gain:0.17658406954734143 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", + "[ 27/2 ⇜ (14/1 → 15/1) ⇝ 31/2 | gain:0.17658406954734143 clip:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", + "[ 27/2 ⇜ (14/1 → 15/1) ⇝ 31/2 | gain:0.17658406954734143 clip:1 note:Eb7 s:piano release:0.1 pan:0.7083333333333333 ]", "[ 14/1 → 15/1 | gain:0.7063362781893657 clip:1 note:G4 s:piano release:0.1 pan:0.5601851851851851 ]", "[ 14/1 → 15/1 | gain:0.2354454260631219 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", "[ (14/1 → 15/1) ⇝ 16/1 | gain:0.7073558770128159 clip:1 note:F3 s:piano release:0.1 pan:0.49537037037037035 ]", @@ -6856,9 +6842,9 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ (29/2 → 15/1) ⇝ 91/6 | gain:0.3535483696800781 clip:1 note:F3 s:piano release:0.1 pan:0.49537037037037035 ]", "[ (29/2 → 15/1) ⇝ 31/2 | gain:0.35367793850640794 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", "[ (29/2 → 15/1) ⇝ 31/2 | gain:0.17683896925320397 clip:1 note:F7 s:piano release:0.1 pan:0.7175925925925926 ]", - "[ (29/2 → 15/1) ⇝ 33/2 | gain:0.3538087945496763 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", - "[ (29/2 → 15/1) ⇝ 33/2 | gain:0.3538087945496763 clip:1 note:A4 s:piano release:0.1 pan:0.5694444444444444 ]", - "[ (29/2 → 15/1) ⇝ 33/2 | gain:0.3538087945496763 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", + "[ (29/2 → 15/1) ⇝ 33/2 | gain:0.35387819052467123 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", + "[ (29/2 → 15/1) ⇝ 33/2 | gain:0.35387819052467123 clip:1 note:A4 s:piano release:0.1 pan:0.5694444444444444 ]", + "[ (29/2 → 15/1) ⇝ 33/2 | gain:0.35387819052467123 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", "[ 44/3 → 15/1 | clip:1 gain:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ 44/3 → 15/1 | clip:1 gain:0.25 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ (44/3 → 15/1) ⇝ 46/3 | gain:0.7073558770128159 clip:1 note:F2 s:piano release:0.1 pan:0.4398148148148148 ]", @@ -6871,9 +6857,9 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 44/3 ⇜ (15/1 → 46/3) | gain:0.7073558770128159 clip:1 note:F2 s:piano release:0.1 pan:0.4398148148148148 ]", "[ 15/1 → 46/3 | clip:1 gain:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ 15/1 → 46/3 | clip:1 gain:0.25 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ 27/2 ⇜ (15/1 → 31/2) | gain:0.17673460394126828 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", - "[ 27/2 ⇜ (15/1 → 31/2) | gain:0.17673460394126828 clip:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ 27/2 ⇜ (15/1 → 31/2) | gain:0.17673460394126828 clip:1 note:Eb7 s:piano release:0.1 pan:0.7083333333333333 ]", + "[ 27/2 ⇜ (15/1 → 31/2) | gain:0.17658406954734143 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", + "[ 27/2 ⇜ (15/1 → 31/2) | gain:0.17658406954734143 clip:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", + "[ 27/2 ⇜ (15/1 → 31/2) | gain:0.17658406954734143 clip:1 note:Eb7 s:piano release:0.1 pan:0.7083333333333333 ]", "[ 29/2 ⇜ (15/1 → 31/2) | gain:0.35367793850640794 clip:1 note:G5 s:piano release:0.1 pan:0.6157407407407407 ]", "[ 29/2 ⇜ (15/1 → 31/2) | gain:0.17683896925320397 clip:1 note:F7 s:piano release:0.1 pan:0.7175925925925926 ]", "[ 89/6 ⇜ (15/1 → 31/2) | gain:0.17688642813272723 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", @@ -6881,14 +6867,14 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 14/1 ⇜ (15/1 → 16/1) | gain:0.7073558770128159 clip:1 note:F3 s:piano release:0.1 pan:0.49537037037037035 ]", "[ 14/1 ⇜ (15/1 → 16/1) | gain:0.7073558770128159 clip:1 note:A3 s:piano release:0.1 pan:0.5138888888888888 ]", "[ 14/1 ⇜ (15/1 → 16/1) | gain:0.7073558770128159 clip:1 note:Eb4 s:piano release:0.1 pan:0.5416666666666667 ]", - "[ 29/2 ⇜ (15/1 → 16/1) ⇝ 33/2 | gain:0.3538087945496763 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", - "[ 29/2 ⇜ (15/1 → 16/1) ⇝ 33/2 | gain:0.3538087945496763 clip:1 note:A4 s:piano release:0.1 pan:0.5694444444444444 ]", - "[ 29/2 ⇜ (15/1 → 16/1) ⇝ 33/2 | gain:0.3538087945496763 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", + "[ 29/2 ⇜ (15/1 → 16/1) ⇝ 33/2 | gain:0.35387819052467123 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", + "[ 29/2 ⇜ (15/1 → 16/1) ⇝ 33/2 | gain:0.35387819052467123 clip:1 note:A4 s:piano release:0.1 pan:0.5694444444444444 ]", + "[ 29/2 ⇜ (15/1 → 16/1) ⇝ 33/2 | gain:0.35387819052467123 clip:1 note:Eb5 s:piano release:0.1 pan:0.5972222222222222 ]", "[ 15/1 → 16/1 | gain:0.7077563810493425 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", "[ 15/1 → 16/1 | gain:0.23591879368311414 clip:1 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ (15/1 → 16/1) ⇝ 17/1 | gain:0.23591879368311414 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", - "[ (15/1 → 16/1) ⇝ 17/1 | gain:0.23591879368311414 clip:1 note:A5 s:piano release:0.1 pan:0.625 ]", - "[ (15/1 → 16/1) ⇝ 17/1 | gain:0.23591879368311414 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", + "[ (15/1 → 16/1) ⇝ 17/1 | gain:0.23593895534674325 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ (15/1 → 16/1) ⇝ 17/1 | gain:0.23593895534674325 clip:1 note:A5 s:piano release:0.1 pan:0.625 ]", + "[ (15/1 → 16/1) ⇝ 17/1 | gain:0.23593895534674325 clip:1 note:Eb6 s:piano release:0.1 pan:0.6527777777777778 ]", "[ 91/6 → 31/2 | clip:1 gain:0.5 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ 91/6 → 31/2 | clip:1 gain:0.125 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ 91/6 → 95/6 | gain:0.35387819052467123 clip:1 note:F3 s:piano release:0.1 pan:0.49537037037037035 ]", @@ -6897,18 +6883,18 @@ exports[`renders tunes > tune: festivalOfFingers3 1`] = ` "[ 46/3 → 16/1 | gain:0.7077986570641782 clip:1 note:F2 s:piano release:0.1 pan:0.4398148148148148 ]", "[ 31/2 → 95/6 | clip:1 gain:0.5 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", "[ 31/2 → 95/6 | clip:1 gain:0.125 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", - "[ (31/2 → 16/1) ⇝ 97/6 | gain:0.17695228077435335 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", - "[ (31/2 → 16/1) ⇝ 33/2 | gain:0.3539045615487067 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", - "[ (31/2 → 16/1) ⇝ 33/2 | gain:0.17695228077435335 clip:1 note:G7 s:piano release:0.1 pan:0.7268518518518519 ]", - "[ (31/2 → 16/1) ⇝ 35/2 | gain:0.17695228077435335 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", - "[ (31/2 → 16/1) ⇝ 35/2 | gain:0.17695228077435335 clip:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", - "[ (31/2 → 16/1) ⇝ 35/2 | gain:0.17695228077435335 clip:1 note:Eb7 s:piano release:0.1 pan:0.7083333333333333 ]", + "[ (31/2 → 16/1) ⇝ 97/6 | gain:0.17695363841880415 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ (31/2 → 16/1) ⇝ 33/2 | gain:0.3539084330201149 clip:1 note:F5 s:piano release:0.1 pan:0.6064814814814814 ]", + "[ (31/2 → 16/1) ⇝ 33/2 | gain:0.17695421651005744 clip:1 note:G7 s:piano release:0.1 pan:0.7268518518518519 ]", + "[ (31/2 → 16/1) ⇝ 35/2 | gain:0.17696702224930969 clip:1 note:F6 s:piano release:0.1 pan:0.662037037037037 ]", + "[ (31/2 → 16/1) ⇝ 35/2 | gain:0.17696702224930969 clip:1 note:A6 s:piano release:0.1 pan:0.6805555555555556 ]", + "[ (31/2 → 16/1) ⇝ 35/2 | gain:0.17696702224930969 clip:1 note:Eb7 s:piano release:0.1 pan:0.7083333333333333 ]", "[ 47/3 → 16/1 | clip:1 gain:1 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ 47/3 → 16/1 | clip:1 gain:0.25 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ (47/3 → 16/1) ⇝ 49/3 | gain:0.23593818455840554 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", + "[ (47/3 → 16/1) ⇝ 49/3 | gain:0.23593895534674325 clip:1 note:F4 s:piano release:0.1 pan:0.5509259259259259 ]", "[ (95/6 → 16/1) ⇝ 97/6 | clip:1 gain:0.5 note:C7 s:piano release:0.1 pan:0.6944444444444444 ]", "[ (95/6 → 16/1) ⇝ 97/6 | clip:1 gain:0.125 note:G6 s:piano release:0.1 pan:0.6712962962962963 ]", - "[ (95/6 → 16/1) ⇝ 33/2 | gain:0.3539082873575392 clip:1 note:F3 s:piano release:0.1 pan:0.49537037037037035 ]", + "[ (95/6 → 16/1) ⇝ 33/2 | gain:0.3539094121570209 clip:1 note:F3 s:piano release:0.1 pan:0.49537037037037035 ]", ] `; @@ -6943,55 +6929,34 @@ exports[`renders tunes > tune: giantSteps 1`] = ` "[ 0/1 → 5/8 | note:Db5 ]", "[ 0/1 → 5/8 | note:Eb5 ]", "[ 0/1 → 5/8 | note:B2 ]", - "[ (5/8 → 1/1) ⇝ 5/4 | note:D5 ]", - "[ (5/8 → 1/1) ⇝ 5/4 | note:C4 ]", - "[ (5/8 → 1/1) ⇝ 5/4 | note:E4 ]", - "[ (5/8 → 1/1) ⇝ 5/4 | note:Gb4 ]", - "[ (5/8 → 1/1) ⇝ 5/4 | note:B4 ]", - "[ (5/8 → 1/1) ⇝ 5/4 | note:D2 ]", - "[ 5/8 ⇜ (1/1 → 5/4) | note:D5 ]", - "[ 5/8 ⇜ (1/1 → 5/4) | note:C4 ]", - "[ 5/8 ⇜ (1/1 → 5/4) | note:E4 ]", - "[ 5/8 ⇜ (1/1 → 5/4) | note:Gb4 ]", - "[ 5/8 ⇜ (1/1 → 5/4) | note:B4 ]", - "[ 5/8 ⇜ (1/1 → 5/4) | note:D2 ]", + "[ 5/8 → 5/4 | note:D5 ]", + "[ 5/8 → 5/4 | note:C4 ]", + "[ 5/8 → 5/4 | note:E4 ]", + "[ 5/8 → 5/4 | note:Gb4 ]", + "[ 5/8 → 5/4 | note:B4 ]", + "[ 5/8 → 5/4 | note:D2 ]", "[ 5/4 → 15/8 | note:B4 ]", "[ 5/4 → 15/8 | note:B3 ]", "[ 5/4 → 15/8 | note:D4 ]", "[ 5/4 → 15/8 | note:Gb4 ]", "[ 5/4 → 15/8 | note:A4 ]", "[ 5/4 → 15/8 | note:G2 ]", - "[ (15/8 → 2/1) ⇝ 5/2 | note:G4 ]", - "[ (15/8 → 2/1) ⇝ 5/2 | note:Ab3 ]", - "[ (15/8 → 2/1) ⇝ 5/2 | note:C4 ]", - "[ (15/8 → 2/1) ⇝ 5/2 | note:D4 ]", - "[ (15/8 → 2/1) ⇝ 5/2 | note:Bb2 ]", - "[ 15/8 ⇜ (2/1 → 5/2) | note:G4 ]", - "[ 15/8 ⇜ (2/1 → 5/2) | note:Ab3 ]", - "[ 15/8 ⇜ (2/1 → 5/2) | note:C4 ]", - "[ 15/8 ⇜ (2/1 → 5/2) | note:D4 ]", - "[ 15/8 ⇜ (2/1 → 5/2) | note:Bb2 ]", - "[ (5/2 → 3/1) ⇝ 25/8 | note:Eb2 ]", - "[ (5/2 → 3/1) ⇝ 15/4 | note:Bb4 ]", - "[ (5/2 → 3/1) ⇝ 15/4 | note:D4 ]", - "[ (5/2 → 3/1) ⇝ 15/4 | note:F4 ]", - "[ (5/2 → 3/1) ⇝ 15/4 | note:G4 ]", - "[ 5/2 ⇜ (3/1 → 25/8) | note:Eb2 ]", - "[ 5/2 ⇜ (3/1 → 15/4) | note:Bb4 ]", - "[ 5/2 ⇜ (3/1 → 15/4) | note:D4 ]", - "[ 5/2 ⇜ (3/1 → 15/4) | note:F4 ]", - "[ 5/2 ⇜ (3/1 → 15/4) | note:G4 ]", + "[ 15/8 → 5/2 | note:G4 ]", + "[ 15/8 → 5/2 | note:Ab3 ]", + "[ 15/8 → 5/2 | note:C4 ]", + "[ 15/8 → 5/2 | note:D4 ]", + "[ 15/8 → 5/2 | note:Bb2 ]", + "[ 5/2 → 25/8 | note:Eb2 ]", + "[ 5/2 → 15/4 | note:Bb4 ]", + "[ 5/2 → 15/4 | note:D4 ]", + "[ 5/2 → 15/4 | note:F4 ]", + "[ 5/2 → 15/4 | note:G4 ]", "[ 25/8 → 15/4 | note:Bb3 ]", - "[ (15/4 → 4/1) ⇝ 35/8 | note:B4 ]", - "[ (15/4 → 4/1) ⇝ 35/8 | note:C4 ]", - "[ (15/4 → 4/1) ⇝ 35/8 | note:E4 ]", - "[ (15/4 → 4/1) ⇝ 35/8 | note:G4 ]", - "[ (15/4 → 4/1) ⇝ 35/8 | note:A2 ]", - "[ 15/4 ⇜ (4/1 → 35/8) | note:B4 ]", - "[ 15/4 ⇜ (4/1 → 35/8) | note:C4 ]", - "[ 15/4 ⇜ (4/1 → 35/8) | note:E4 ]", - "[ 15/4 ⇜ (4/1 → 35/8) | note:G4 ]", - "[ 15/4 ⇜ (4/1 → 35/8) | note:A2 ]", + "[ 15/4 → 35/8 | note:B4 ]", + "[ 15/4 → 35/8 | note:C4 ]", + "[ 15/4 → 35/8 | note:E4 ]", + "[ 15/4 → 35/8 | note:G4 ]", + "[ 15/4 → 35/8 | note:A2 ]", "[ 35/8 → 5/1 | note:A4 ]", "[ 35/8 → 5/1 | note:Gb3 ]", "[ 35/8 → 5/1 | note:B3 ]", @@ -7003,55 +6968,34 @@ exports[`renders tunes > tune: giantSteps 1`] = ` "[ 5/1 → 45/8 | note:A4 ]", "[ 5/1 → 45/8 | note:B4 ]", "[ 5/1 → 45/8 | note:G2 ]", - "[ (45/8 → 6/1) ⇝ 25/4 | note:Bb4 ]", - "[ (45/8 → 6/1) ⇝ 25/4 | note:Ab3 ]", - "[ (45/8 → 6/1) ⇝ 25/4 | note:C4 ]", - "[ (45/8 → 6/1) ⇝ 25/4 | note:D4 ]", - "[ (45/8 → 6/1) ⇝ 25/4 | note:G4 ]", - "[ (45/8 → 6/1) ⇝ 25/4 | note:Bb2 ]", - "[ 45/8 ⇜ (6/1 → 25/4) | note:Bb4 ]", - "[ 45/8 ⇜ (6/1 → 25/4) | note:Ab3 ]", - "[ 45/8 ⇜ (6/1 → 25/4) | note:C4 ]", - "[ 45/8 ⇜ (6/1 → 25/4) | note:D4 ]", - "[ 45/8 ⇜ (6/1 → 25/4) | note:G4 ]", - "[ 45/8 ⇜ (6/1 → 25/4) | note:Bb2 ]", + "[ 45/8 → 25/4 | note:Bb4 ]", + "[ 45/8 → 25/4 | note:Ab3 ]", + "[ 45/8 → 25/4 | note:C4 ]", + "[ 45/8 → 25/4 | note:D4 ]", + "[ 45/8 → 25/4 | note:G4 ]", + "[ 45/8 → 25/4 | note:Bb2 ]", "[ 25/4 → 55/8 | note:G4 ]", "[ 25/4 → 55/8 | note:G3 ]", "[ 25/4 → 55/8 | note:Bb3 ]", "[ 25/4 → 55/8 | note:D4 ]", "[ 25/4 → 55/8 | note:F4 ]", "[ 25/4 → 55/8 | note:Eb2 ]", - "[ (55/8 → 7/1) ⇝ 15/2 | note:Eb4 ]", - "[ (55/8 → 7/1) ⇝ 15/2 | note:E3 ]", - "[ (55/8 → 7/1) ⇝ 15/2 | note:Ab3 ]", - "[ (55/8 → 7/1) ⇝ 15/2 | note:Bb3 ]", - "[ (55/8 → 7/1) ⇝ 15/2 | note:F#2 ]", - "[ 55/8 ⇜ (7/1 → 15/2) | note:Eb4 ]", - "[ 55/8 ⇜ (7/1 → 15/2) | note:E3 ]", - "[ 55/8 ⇜ (7/1 → 15/2) | note:Ab3 ]", - "[ 55/8 ⇜ (7/1 → 15/2) | note:Bb3 ]", - "[ 55/8 ⇜ (7/1 → 15/2) | note:F#2 ]", - "[ (15/2 → 8/1) ⇝ 65/8 | note:B2 ]", - "[ (15/2 → 8/1) ⇝ 35/4 | note:F#4 ]", - "[ (15/2 → 8/1) ⇝ 35/4 | note:Bb3 ]", - "[ (15/2 → 8/1) ⇝ 35/4 | note:Db4 ]", - "[ (15/2 → 8/1) ⇝ 35/4 | note:Eb4 ]", - "[ 15/2 ⇜ (8/1 → 65/8) | note:B2 ]", - "[ 15/2 ⇜ (8/1 → 35/4) | note:F#4 ]", - "[ 15/2 ⇜ (8/1 → 35/4) | note:Bb3 ]", - "[ 15/2 ⇜ (8/1 → 35/4) | note:Db4 ]", - "[ 15/2 ⇜ (8/1 → 35/4) | note:Eb4 ]", + "[ 55/8 → 15/2 | note:Eb4 ]", + "[ 55/8 → 15/2 | note:E3 ]", + "[ 55/8 → 15/2 | note:Ab3 ]", + "[ 55/8 → 15/2 | note:Bb3 ]", + "[ 55/8 → 15/2 | note:F#2 ]", + "[ 15/2 → 65/8 | note:B2 ]", + "[ 15/2 → 35/4 | note:F#4 ]", + "[ 15/2 → 35/4 | note:Bb3 ]", + "[ 15/2 → 35/4 | note:Db4 ]", + "[ 15/2 → 35/4 | note:Eb4 ]", "[ 65/8 → 35/4 | note:F#2 ]", - "[ (35/4 → 9/1) ⇝ 75/8 | note:G4 ]", - "[ (35/4 → 9/1) ⇝ 75/8 | note:Ab3 ]", - "[ (35/4 → 9/1) ⇝ 75/8 | note:C4 ]", - "[ (35/4 → 9/1) ⇝ 75/8 | note:Eb4 ]", - "[ (35/4 → 9/1) ⇝ 75/8 | note:F2 ]", - "[ 35/4 ⇜ (9/1 → 75/8) | note:G4 ]", - "[ 35/4 ⇜ (9/1 → 75/8) | note:Ab3 ]", - "[ 35/4 ⇜ (9/1 → 75/8) | note:C4 ]", - "[ 35/4 ⇜ (9/1 → 75/8) | note:Eb4 ]", - "[ 35/4 ⇜ (9/1 → 75/8) | note:F2 ]", + "[ 35/4 → 75/8 | note:G4 ]", + "[ 35/4 → 75/8 | note:Ab3 ]", + "[ 35/4 → 75/8 | note:C4 ]", + "[ 35/4 → 75/8 | note:Eb4 ]", + "[ 35/4 → 75/8 | note:F2 ]", "[ 75/8 → 10/1 | note:F4 ]", "[ 75/8 → 10/1 | note:D3 ]", "[ 75/8 → 10/1 | note:G3 ]", @@ -7059,54 +7003,33 @@ exports[`renders tunes > tune: giantSteps 1`] = ` "[ 75/8 → 10/1 | note:C4 ]", "[ 75/8 → 10/1 | note:Bb2 ]", "[ 10/1 → 85/8 | note:Eb2 ]", - "[ (10/1 → 11/1) ⇝ 45/4 | note:Bb4 ]", - "[ (10/1 → 11/1) ⇝ 45/4 | note:D4 ]", - "[ (10/1 → 11/1) ⇝ 45/4 | note:F4 ]", - "[ (10/1 → 11/1) ⇝ 45/4 | note:G4 ]", - "[ (85/8 → 11/1) ⇝ 45/4 | note:Bb2 ]", - "[ 10/1 ⇜ (11/1 → 45/4) | note:Bb4 ]", - "[ 10/1 ⇜ (11/1 → 45/4) | note:D4 ]", - "[ 10/1 ⇜ (11/1 → 45/4) | note:F4 ]", - "[ 10/1 ⇜ (11/1 → 45/4) | note:G4 ]", - "[ 85/8 ⇜ (11/1 → 45/4) | note:Bb2 ]", + "[ 10/1 → 45/4 | note:Bb4 ]", + "[ 10/1 → 45/4 | note:D4 ]", + "[ 10/1 → 45/4 | note:F4 ]", + "[ 10/1 → 45/4 | note:G4 ]", + "[ 85/8 → 45/4 | note:Bb2 ]", "[ 45/4 → 95/8 | note:B4 ]", "[ 45/4 → 95/8 | note:C4 ]", "[ 45/4 → 95/8 | note:E4 ]", "[ 45/4 → 95/8 | note:G4 ]", "[ 45/4 → 95/8 | note:A2 ]", - "[ (95/8 → 12/1) ⇝ 25/2 | note:A4 ]", - "[ (95/8 → 12/1) ⇝ 25/2 | note:Gb3 ]", - "[ (95/8 → 12/1) ⇝ 25/2 | note:B3 ]", - "[ (95/8 → 12/1) ⇝ 25/2 | note:C4 ]", - "[ (95/8 → 12/1) ⇝ 25/2 | note:E4 ]", - "[ (95/8 → 12/1) ⇝ 25/2 | note:D2 ]", - "[ 95/8 ⇜ (12/1 → 25/2) | note:A4 ]", - "[ 95/8 ⇜ (12/1 → 25/2) | note:Gb3 ]", - "[ 95/8 ⇜ (12/1 → 25/2) | note:B3 ]", - "[ 95/8 ⇜ (12/1 → 25/2) | note:C4 ]", - "[ 95/8 ⇜ (12/1 → 25/2) | note:E4 ]", - "[ 95/8 ⇜ (12/1 → 25/2) | note:D2 ]", - "[ (25/2 → 13/1) ⇝ 105/8 | note:G2 ]", - "[ (25/2 → 13/1) ⇝ 55/4 | note:D5 ]", - "[ (25/2 → 13/1) ⇝ 55/4 | note:Gb4 ]", - "[ (25/2 → 13/1) ⇝ 55/4 | note:A4 ]", - "[ (25/2 → 13/1) ⇝ 55/4 | note:B4 ]", - "[ 25/2 ⇜ (13/1 → 105/8) | note:G2 ]", - "[ 25/2 ⇜ (13/1 → 55/4) | note:D5 ]", - "[ 25/2 ⇜ (13/1 → 55/4) | note:Gb4 ]", - "[ 25/2 ⇜ (13/1 → 55/4) | note:A4 ]", - "[ 25/2 ⇜ (13/1 → 55/4) | note:B4 ]", + "[ 95/8 → 25/2 | note:A4 ]", + "[ 95/8 → 25/2 | note:Gb3 ]", + "[ 95/8 → 25/2 | note:B3 ]", + "[ 95/8 → 25/2 | note:C4 ]", + "[ 95/8 → 25/2 | note:E4 ]", + "[ 95/8 → 25/2 | note:D2 ]", + "[ 25/2 → 105/8 | note:G2 ]", + "[ 25/2 → 55/4 | note:D5 ]", + "[ 25/2 → 55/4 | note:Gb4 ]", + "[ 25/2 → 55/4 | note:A4 ]", + "[ 25/2 → 55/4 | note:B4 ]", "[ 105/8 → 55/4 | note:D2 ]", - "[ (55/4 → 14/1) ⇝ 115/8 | note:D#5 ]", - "[ (55/4 → 14/1) ⇝ 115/8 | note:E4 ]", - "[ (55/4 → 14/1) ⇝ 115/8 | note:Ab4 ]", - "[ (55/4 → 14/1) ⇝ 115/8 | note:B4 ]", - "[ (55/4 → 14/1) ⇝ 115/8 | note:C#2 ]", - "[ 55/4 ⇜ (14/1 → 115/8) | note:D#5 ]", - "[ 55/4 ⇜ (14/1 → 115/8) | note:E4 ]", - "[ 55/4 ⇜ (14/1 → 115/8) | note:Ab4 ]", - "[ 55/4 ⇜ (14/1 → 115/8) | note:B4 ]", - "[ 55/4 ⇜ (14/1 → 115/8) | note:C#2 ]", + "[ 55/4 → 115/8 | note:D#5 ]", + "[ 55/4 → 115/8 | note:E4 ]", + "[ 55/4 → 115/8 | note:Ab4 ]", + "[ 55/4 → 115/8 | note:B4 ]", + "[ 55/4 → 115/8 | note:C#2 ]", "[ 115/8 → 15/1 | note:C#5 ]", "[ 115/8 → 15/1 | note:Bb3 ]", "[ 115/8 → 15/1 | note:Eb4 ]", @@ -7114,56 +7037,34 @@ exports[`renders tunes > tune: giantSteps 1`] = ` "[ 115/8 → 15/1 | note:Ab4 ]", "[ 115/8 → 15/1 | note:F#2 ]", "[ 15/1 → 125/8 | note:B2 ]", - "[ (15/1 → 16/1) ⇝ 65/4 | note:F#5 ]", - "[ (15/1 → 16/1) ⇝ 65/4 | note:Bb4 ]", - "[ (15/1 → 16/1) ⇝ 65/4 | note:Db5 ]", - "[ (15/1 → 16/1) ⇝ 65/4 | note:Eb5 ]", - "[ (125/8 → 16/1) ⇝ 65/4 | note:F#2 ]", - "[ 15/1 ⇜ (16/1 → 65/4) | note:F#5 ]", - "[ 15/1 ⇜ (16/1 → 65/4) | note:Bb4 ]", - "[ 15/1 ⇜ (16/1 → 65/4) | note:Db5 ]", - "[ 15/1 ⇜ (16/1 → 65/4) | note:Eb5 ]", - "[ 125/8 ⇜ (16/1 → 65/4) | note:F#2 ]", + "[ 15/1 → 65/4 | note:F#5 ]", + "[ 15/1 → 65/4 | note:Bb4 ]", + "[ 15/1 → 65/4 | note:Db5 ]", + "[ 15/1 → 65/4 | note:Eb5 ]", + "[ 125/8 → 65/4 | note:F#2 ]", "[ 65/4 → 135/8 | note:G5 ]", "[ 65/4 → 135/8 | note:Ab4 ]", "[ 65/4 → 135/8 | note:C5 ]", "[ 65/4 → 135/8 | note:Eb5 ]", "[ 65/4 → 135/8 | note:F2 ]", - "[ (135/8 → 17/1) ⇝ 35/2 | note:F5 ]", - "[ (135/8 → 17/1) ⇝ 35/2 | note:D4 ]", - "[ (135/8 → 17/1) ⇝ 35/2 | note:G4 ]", - "[ (135/8 → 17/1) ⇝ 35/2 | note:Ab4 ]", - "[ (135/8 → 17/1) ⇝ 35/2 | note:C5 ]", - "[ (135/8 → 17/1) ⇝ 35/2 | note:Bb2 ]", - "[ 135/8 ⇜ (17/1 → 35/2) | note:F5 ]", - "[ 135/8 ⇜ (17/1 → 35/2) | note:D4 ]", - "[ 135/8 ⇜ (17/1 → 35/2) | note:G4 ]", - "[ 135/8 ⇜ (17/1 → 35/2) | note:Ab4 ]", - "[ 135/8 ⇜ (17/1 → 35/2) | note:C5 ]", - "[ 135/8 ⇜ (17/1 → 35/2) | note:Bb2 ]", - "[ (35/2 → 18/1) ⇝ 145/8 | note:Eb2 ]", - "[ (35/2 → 18/1) ⇝ 75/4 | note:Bb5 ]", - "[ (35/2 → 18/1) ⇝ 75/4 | note:D5 ]", - "[ (35/2 → 18/1) ⇝ 75/4 | note:F5 ]", - "[ (35/2 → 18/1) ⇝ 75/4 | note:G5 ]", - "[ 35/2 ⇜ (18/1 → 145/8) | note:Eb2 ]", - "[ 35/2 ⇜ (18/1 → 75/4) | note:Bb5 ]", - "[ 35/2 ⇜ (18/1 → 75/4) | note:D5 ]", - "[ 35/2 ⇜ (18/1 → 75/4) | note:F5 ]", - "[ 35/2 ⇜ (18/1 → 75/4) | note:G5 ]", + "[ 135/8 → 35/2 | note:F5 ]", + "[ 135/8 → 35/2 | note:D4 ]", + "[ 135/8 → 35/2 | note:G4 ]", + "[ 135/8 → 35/2 | note:Ab4 ]", + "[ 135/8 → 35/2 | note:C5 ]", + "[ 135/8 → 35/2 | note:Bb2 ]", + "[ 35/2 → 145/8 | note:Eb2 ]", + "[ 35/2 → 75/4 | note:Bb5 ]", + "[ 35/2 → 75/4 | note:D5 ]", + "[ 35/2 → 75/4 | note:F5 ]", + "[ 35/2 → 75/4 | note:G5 ]", "[ 145/8 → 75/4 | note:Bb3 ]", - "[ (75/4 → 19/1) ⇝ 155/8 | note:F#5 ]", - "[ (75/4 → 19/1) ⇝ 155/8 | note:E4 ]", - "[ (75/4 → 19/1) ⇝ 155/8 | note:Ab4 ]", - "[ (75/4 → 19/1) ⇝ 155/8 | note:B4 ]", - "[ (75/4 → 19/1) ⇝ 155/8 | note:Eb5 ]", - "[ (75/4 → 19/1) ⇝ 155/8 | note:C#2 ]", - "[ 75/4 ⇜ (19/1 → 155/8) | note:F#5 ]", - "[ 75/4 ⇜ (19/1 → 155/8) | note:E4 ]", - "[ 75/4 ⇜ (19/1 → 155/8) | note:Ab4 ]", - "[ 75/4 ⇜ (19/1 → 155/8) | note:B4 ]", - "[ 75/4 ⇜ (19/1 → 155/8) | note:Eb5 ]", - "[ 75/4 ⇜ (19/1 → 155/8) | note:C#2 ]", + "[ 75/4 → 155/8 | note:F#5 ]", + "[ 75/4 → 155/8 | note:E4 ]", + "[ 75/4 → 155/8 | note:Ab4 ]", + "[ 75/4 → 155/8 | note:B4 ]", + "[ 75/4 → 155/8 | note:Eb5 ]", + "[ 75/4 → 155/8 | note:C#2 ]", "[ 155/8 → 20/1 | note:F#5 ]", "[ 155/8 → 20/1 | note:E4 ]", "[ 155/8 → 20/1 | note:Ab4 ]", @@ -7309,29 +7210,29 @@ exports[`renders tunes > tune: holyflute 1`] = ` exports[`renders tunes > tune: hyperpop 1`] = ` [ - "[ -1/4 ⇜ (0/1 → 1/12) ⇝ 1/8 | gain:0.0002512336761852884 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", - "[ -1/4 ⇜ (0/1 → 1/12) ⇝ 1/8 | gain:0.0002512336761852884 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", - "[ -3/8 ⇜ (0/1 → 1/8) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:1666.5665766857219 ]", - "[ -3/8 ⇜ (0/1 → 1/8) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:1666.5665766857219 ]", - "[ -1/8 ⇜ (0/1 → 1/6) ⇝ 1/4 | gain:0.0003185964356240245 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.143312438893 cutoff:4000 ]", - "[ -1/8 ⇜ (0/1 → 1/6) ⇝ 1/4 | gain:0.0003185964356240245 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.143312438893 cutoff:4000 ]", - "[ -1/4 ⇜ (0/1 → 1/4) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:1683.1306585059317 ]", - "[ -1/4 ⇜ (0/1 → 1/4) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:1683.1306585059317 ]", + "[ -1/4 ⇜ (0/1 → 1/12) ⇝ 1/8 | gain:0.00024394233952886464 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", + "[ -1/4 ⇜ (0/1 → 1/12) ⇝ 1/8 | gain:0.00024394233952886464 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", + "[ -3/8 ⇜ (0/1 → 1/8) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:1616.8693414940683 ]", + "[ -3/8 ⇜ (0/1 → 1/8) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:1616.8693414940683 ]", + "[ -1/8 ⇜ (0/1 → 1/6) ⇝ 1/4 | gain:0.00031404209523161047 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", + "[ -1/8 ⇜ (0/1 → 1/6) ⇝ 1/4 | gain:0.00031404209523161047 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", + "[ -1/4 ⇜ (0/1 → 1/4) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:1650 ]", + "[ -1/4 ⇜ (0/1 → 1/4) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:1650 ]", "[ 0/1 → 1/4 | gain:0.00039824554453003064 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.143312438893 cutoff:4000 ]", "[ 0/1 → 1/4 | gain:0.00039824554453003064 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.143312438893 cutoff:4000 ]", "[ 0/1 → 1/4 | s:bd gain:0.7 ]", "[ (0/1 → 1/3) ⇝ 3/8 | gain:0.26103468453995016 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5998.072590601808 cutoff:4000 ]", "[ (0/1 → 1/3) ⇝ 3/8 | gain:0.26103468453995016 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5998.072590601808 cutoff:4000 ]", - "[ -1/8 ⇜ (0/1 → 3/8) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:1699.6897509708342 ]", - "[ -1/8 ⇜ (0/1 → 3/8) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:1699.6897509708342 ]", - "[ -1/4 ⇜ (1/12 → 1/8) | gain:0.0002512336761852884 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", - "[ -1/4 ⇜ (1/12 → 1/8) | gain:0.0002512336761852884 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", + "[ -1/8 ⇜ (0/1 → 3/8) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:1683.1306585059317 ]", + "[ -1/8 ⇜ (0/1 → 3/8) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:1683.1306585059317 ]", + "[ -1/4 ⇜ (1/12 → 1/8) | gain:0.00024394233952886464 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", + "[ -1/4 ⇜ (1/12 → 1/8) | gain:0.00024394233952886464 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", "[ 1/8 → 1/4 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:1699.6897509708342 lpattack:0.1 lpenv:2 ftype:24db ]", "[ 1/8 → 1/4 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:1699.6897509708342 lpattack:0.1 lpenv:2 ftype:24db ]", "[ (1/8 → 5/12) ⇝ 1/2 | gain:0.0002657724569848846 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5994.647308096509 cutoff:4000 ]", "[ (1/8 → 5/12) ⇝ 1/2 | gain:0.0002657724569848846 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5994.647308096509 cutoff:4000 ]", - "[ -1/8 ⇜ (1/6 → 1/4) | gain:0.0003185964356240245 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.143312438893 cutoff:4000 ]", - "[ -1/8 ⇜ (1/6 → 1/4) | gain:0.0003185964356240245 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.143312438893 cutoff:4000 ]", + "[ -1/8 ⇜ (1/6 → 1/4) | gain:0.00031404209523161047 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", + "[ -1/8 ⇜ (1/6 → 1/4) | gain:0.00031404209523161047 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", "[ 1/4 → 1/2 | gain:0.0003367315392180906 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5992.29333433282 cutoff:4000 ]", "[ 1/4 → 1/2 | gain:0.0003367315392180906 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5992.29333433282 cutoff:4000 ]", "[ 1/4 → 1/2 | s:hh3 gain:0.7 ]", @@ -7364,20 +7265,16 @@ exports[`renders tunes > tune: hyperpop 1`] = ` "[ 3/4 → 1/1 | gain:0.300533478008833 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5958.137268909887 cutoff:4000 ]", "[ 3/4 → 1/1 | gain:0.300533478008833 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5958.137268909887 cutoff:4000 ]", "[ 3/4 → 1/1 | s:hh3 gain:0.7 ]", - "[ (3/4 → 1/1) ⇝ 9/8 | gain:0.15563993880588714 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5951.963201008076 cutoff:4000 ]", - "[ (3/4 → 1/1) ⇝ 9/8 | gain:0.15563993880588714 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5951.963201008076 cutoff:4000 ]", + "[ (3/4 → 13/12) ⇝ 9/8 | gain:0.15563993880588714 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5951.963201008076 cutoff:4000 ]", + "[ (3/4 → 13/12) ⇝ 9/8 | gain:0.15563993880588714 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5951.963201008076 cutoff:4000 ]", "[ 1/2 ⇜ (5/6 → 7/8) | gain:0.18560442471759028 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5974.128467049176 cutoff:4000 ]", "[ 1/2 ⇜ (5/6 → 7/8) | gain:0.18560442471759028 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5974.128467049176 cutoff:4000 ]", "[ 7/8 → 1/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:1897.1038487394403 lpattack:0.1 lpenv:2 ftype:24db ]", "[ 7/8 → 1/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:1897.1038487394403 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (7/8 → 1/1) ⇝ 5/4 | gain:0.1989031661444791 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5938.355801271282 cutoff:4000 ]", - "[ (7/8 → 1/1) ⇝ 5/4 | gain:0.1989031661444791 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5938.355801271282 cutoff:4000 ]", + "[ (7/8 → 7/6) ⇝ 5/4 | gain:0.1989031661444791 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5938.355801271282 cutoff:4000 ]", + "[ (7/8 → 7/6) ⇝ 5/4 | gain:0.1989031661444791 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5938.355801271282 cutoff:4000 ]", "[ 5/8 ⇜ (11/12 → 1/1) | gain:0.237641808847867 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5963.890147645195 cutoff:4000 ]", "[ 5/8 ⇜ (11/12 → 1/1) | gain:0.237641808847867 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5963.890147645195 cutoff:4000 ]", - "[ 3/4 ⇜ (1/1 → 13/12) ⇝ 9/8 | gain:0.15563993880588714 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5951.963201008076 cutoff:4000 ]", - "[ 3/4 ⇜ (1/1 → 13/12) ⇝ 9/8 | gain:0.15563993880588714 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5951.963201008076 cutoff:4000 ]", - "[ 7/8 ⇜ (1/1 → 7/6) ⇝ 5/4 | gain:0.1989031661444791 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5938.355801271282 cutoff:4000 ]", - "[ 7/8 ⇜ (1/1 → 7/6) ⇝ 5/4 | gain:0.1989031661444791 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5938.355801271282 cutoff:4000 ]", "[ 1/1 → 5/4 | gain:0.2513066112116339 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5930.924800994192 cutoff:4000 ]", "[ 1/1 → 5/4 | gain:0.2513066112116339 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5930.924800994192 cutoff:4000 ]", "[ 1/1 → 5/4 | s:bd gain:0.7 ]", @@ -7418,8 +7315,8 @@ exports[`renders tunes > tune: hyperpop 1`] = ` "[ 5/4 ⇜ (19/12 → 13/8) | gain:0.10821620301269062 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5887.549861142967 cutoff:4000 ]", "[ (13/8 → 23/12) ⇝ 2/1 | gain:0.11402475157686406 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5822.02388217981 cutoff:4000 ]", "[ (13/8 → 23/12) ⇝ 2/1 | gain:0.11402475157686406 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5822.02388217981 cutoff:4000 ]", - "[ (13/8 → 2/1) ⇝ 17/8 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2120.3652183367367 ]", - "[ (13/8 → 2/1) ⇝ 17/8 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2120.3652183367367 ]", + "[ (13/8 → 2/1) ⇝ 17/8 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2135.8582993222344 ]", + "[ (13/8 → 2/1) ⇝ 17/8 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2135.8582993222344 ]", "[ 11/8 ⇜ (5/3 → 7/4) | gain:0.13777765528071248 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5867.325323737765 cutoff:4000 ]", "[ 11/8 ⇜ (5/3 → 7/4) | gain:0.13777765528071248 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5867.325323737765 cutoff:4000 ]", "[ 7/4 → 15/8 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2120.3652183367367 lpattack:0.1 lpenv:2 ftype:24db ]", @@ -7427,43 +7324,43 @@ exports[`renders tunes > tune: hyperpop 1`] = ` "[ 7/4 → 2/1 | gain:0.14366058218580086 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5809.698831278217 cutoff:4000 ]", "[ 7/4 → 2/1 | gain:0.14366058218580086 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5809.698831278217 cutoff:4000 ]", "[ 7/4 → 2/1 | s:hh3 gain:0.7 ]", - "[ (7/4 → 2/1) ⇝ 17/8 | gain:0.07355421807913005 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5809.698831278217 cutoff:4000 ]", - "[ (7/4 → 2/1) ⇝ 17/8 | gain:0.07355421807913005 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5809.698831278217 cutoff:4000 ]", - "[ (7/4 → 2/1) ⇝ 9/4 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2135.8582993222344 ]", - "[ (7/4 → 2/1) ⇝ 9/4 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2135.8582993222344 ]", + "[ (7/4 → 2/1) ⇝ 17/8 | gain:0.07411986998714647 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5796.978025372246 cutoff:4000 ]", + "[ (7/4 → 2/1) ⇝ 17/8 | gain:0.07411986998714647 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5796.978025372246 cutoff:4000 ]", + "[ (7/4 → 2/1) ⇝ 9/4 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2166.622633692871 ]", + "[ (7/4 → 2/1) ⇝ 9/4 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2166.622633692871 ]", "[ 3/2 ⇜ (11/6 → 15/8) | gain:0.08972789051217522 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5845.47833980621 cutoff:4000 ]", "[ 3/2 ⇜ (11/6 → 15/8) | gain:0.08972789051217522 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5845.47833980621 cutoff:4000 ]", "[ 15/8 → 2/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2151.2782118349805 lpattack:0.1 lpenv:2 ftype:24db ]", "[ 15/8 → 2/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2151.2782118349805 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (15/8 → 2/1) ⇝ 9/4 | gain:0.09264983748393309 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5796.978025372246 cutoff:4000 ]", - "[ (15/8 → 2/1) ⇝ 9/4 | gain:0.09264983748393309 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5796.978025372246 cutoff:4000 ]", - "[ (15/8 → 2/1) ⇝ 19/8 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2151.2782118349805 ]", - "[ (15/8 → 2/1) ⇝ 19/8 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2151.2782118349805 ]", + "[ (15/8 → 2/1) ⇝ 9/4 | gain:0.09401455409698445 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5770.357934562703 cutoff:4000 ]", + "[ (15/8 → 2/1) ⇝ 9/4 | gain:0.09401455409698445 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5770.357934562703 cutoff:4000 ]", + "[ (15/8 → 2/1) ⇝ 19/8 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2197.0757739067362 ]", + "[ (15/8 → 2/1) ⇝ 19/8 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2197.0757739067362 ]", "[ 13/8 ⇜ (23/12 → 2/1) | gain:0.11402475157686406 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5822.02388217981 cutoff:4000 ]", "[ 13/8 ⇜ (23/12 → 2/1) | gain:0.11402475157686406 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5822.02388217981 cutoff:4000 ]", - "[ 7/4 ⇜ (2/1 → 25/12) ⇝ 17/8 | gain:0.07521164327758756 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5770.357934562703 cutoff:4000 ]", - "[ 7/4 ⇜ (2/1 → 25/12) ⇝ 17/8 | gain:0.07521164327758756 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5770.357934562703 cutoff:4000 ]", - "[ 13/8 ⇜ (2/1 → 17/8) | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2181.889254082415 ]", - "[ 13/8 ⇜ (2/1 → 17/8) | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2181.889254082415 ]", - "[ 15/8 ⇜ (2/1 → 13/6) ⇝ 9/4 | gain:0.09467138377075762 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5756.463210874651 cutoff:4000 ]", - "[ 15/8 ⇜ (2/1 → 13/6) ⇝ 9/4 | gain:0.09467138377075762 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5756.463210874651 cutoff:4000 ]", - "[ 7/4 ⇜ (2/1 → 9/4) | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2197.0757739067362 ]", - "[ 7/4 ⇜ (2/1 → 9/4) | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2197.0757739067362 ]", + "[ 7/4 ⇜ (2/1 → 25/12) ⇝ 17/8 | gain:0.07411986998714647 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5796.978025372246 cutoff:4000 ]", + "[ 7/4 ⇜ (2/1 → 25/12) ⇝ 17/8 | gain:0.07411986998714647 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5796.978025372246 cutoff:4000 ]", + "[ 13/8 ⇜ (2/1 → 17/8) | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2135.8582993222344 ]", + "[ 13/8 ⇜ (2/1 → 17/8) | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2135.8582993222344 ]", + "[ 15/8 ⇜ (2/1 → 13/6) ⇝ 9/4 | gain:0.09401455409698445 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5770.357934562703 cutoff:4000 ]", + "[ 15/8 ⇜ (2/1 → 13/6) ⇝ 9/4 | gain:0.09401455409698445 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5770.357934562703 cutoff:4000 ]", + "[ 7/4 ⇜ (2/1 → 9/4) | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2166.622633692871 ]", + "[ 7/4 ⇜ (2/1 → 9/4) | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2166.622633692871 ]", "[ 2/1 → 9/4 | gain:0.11833922971344701 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5756.463210874651 cutoff:4000 ]", "[ 2/1 → 9/4 | gain:0.11833922971344701 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5756.463210874651 cutoff:4000 ]", "[ 2/1 → 9/4 | s:bd gain:0.7 ]", "[ (2/1 → 7/3) ⇝ 19/8 | gain:0.06099882456242525 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5742.18185383172 cutoff:4000 ]", "[ (2/1 → 7/3) ⇝ 19/8 | gain:0.06099882456242525 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5742.18185383172 cutoff:4000 ]", - "[ 15/8 ⇜ (2/1 → 19/8) | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2212.17990613181 ]", - "[ 15/8 ⇜ (2/1 → 19/8) | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2212.17990613181 ]", - "[ 7/4 ⇜ (25/12 → 17/8) | gain:0.07521164327758756 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5770.357934562703 cutoff:4000 ]", - "[ 7/4 ⇜ (25/12 → 17/8) | gain:0.07521164327758756 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5770.357934562703 cutoff:4000 ]", + "[ 15/8 ⇜ (2/1 → 19/8) | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2197.0757739067362 ]", + "[ 15/8 ⇜ (2/1 → 19/8) | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2197.0757739067362 ]", + "[ 7/4 ⇜ (25/12 → 17/8) | gain:0.07411986998714647 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5796.978025372246 cutoff:4000 ]", + "[ 7/4 ⇜ (25/12 → 17/8) | gain:0.07411986998714647 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5796.978025372246 cutoff:4000 ]", "[ 17/8 → 9/4 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2212.17990613181 lpattack:0.1 lpenv:2 ftype:24db ]", "[ 17/8 → 9/4 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2212.17990613181 lpattack:0.1 lpenv:2 ftype:24db ]", "[ (17/8 → 29/12) ⇝ 5/2 | gain:0.07722803431084992 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5712.469093657604 cutoff:4000 ]", "[ (17/8 → 29/12) ⇝ 5/2 | gain:0.07722803431084992 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5712.469093657604 cutoff:4000 ]", - "[ 15/8 ⇜ (13/6 → 9/4) | gain:0.09467138377075762 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5756.463210874651 cutoff:4000 ]", - "[ 15/8 ⇜ (13/6 → 9/4) | gain:0.09467138377075762 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5756.463210874651 cutoff:4000 ]", + "[ 15/8 ⇜ (13/6 → 9/4) | gain:0.09401455409698445 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5770.357934562703 cutoff:4000 ]", + "[ 15/8 ⇜ (13/6 → 9/4) | gain:0.09401455409698445 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5770.357934562703 cutoff:4000 ]", "[ 9/4 → 5/2 | gain:0.09711940526986938 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5697.042781654914 cutoff:4000 ]", "[ 9/4 → 5/2 | gain:0.09711940526986938 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5697.042781654914 cutoff:4000 ]", "[ 9/4 → 5/2 | s:hh3 gain:0.7 ]", @@ -7496,20 +7393,16 @@ exports[`renders tunes > tune: hyperpop 1`] = ` "[ 11/4 → 3/1 | gain:0.06469267544862903 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5560.31547155504 cutoff:4000 ]", "[ 11/4 → 3/1 | gain:0.06469267544862903 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5560.31547155504 cutoff:4000 ]", "[ 11/4 → 3/1 | s:hh3 gain:0.7 ]", - "[ (11/4 → 3/1) ⇝ 25/8 | gain:0.033254339487292464 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5541.603887904197 cutoff:4000 ]", - "[ (11/4 → 3/1) ⇝ 25/8 | gain:0.033254339487292464 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5541.603887904197 cutoff:4000 ]", + "[ (11/4 → 37/12) ⇝ 25/8 | gain:0.033254339487292464 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5541.603887904197 cutoff:4000 ]", + "[ (11/4 → 37/12) ⇝ 25/8 | gain:0.033254339487292464 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5541.603887904197 cutoff:4000 ]", "[ 5/2 ⇜ (17/6 → 23/8) | gain:0.04085727749307612 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5614.319554259933 cutoff:4000 ]", "[ 5/2 ⇜ (17/6 → 23/8) | gain:0.04085727749307612 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5614.319554259933 cutoff:4000 ]", "[ 23/8 → 3/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2386.1887343697626 lpattack:0.1 lpenv:2 ftype:24db ]", "[ 23/8 → 3/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2386.1887343697626 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (23/8 → 3/1) ⇝ 13/4 | gain:0.041870446443995187 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5503.134531727652 cutoff:4000 ]", - "[ (23/8 → 3/1) ⇝ 13/4 | gain:0.041870446443995187 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5503.134531727652 cutoff:4000 ]", + "[ (23/8 → 19/6) ⇝ 13/4 | gain:0.041870446443995187 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5503.134531727652 cutoff:4000 ]", + "[ (23/8 → 19/6) ⇝ 13/4 | gain:0.041870446443995187 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5503.134531727652 cutoff:4000 ]", "[ 21/8 ⇜ (35/12 → 3/1) | gain:0.051537412445127495 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5578.674030756363 cutoff:4000 ]", "[ 21/8 ⇜ (35/12 → 3/1) | gain:0.051537412445127495 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5578.674030756363 cutoff:4000 ]", - "[ 11/4 ⇜ (3/1 → 37/12) ⇝ 25/8 | gain:0.033254339487292464 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5541.603887904197 cutoff:4000 ]", - "[ 11/4 ⇜ (3/1 → 37/12) ⇝ 25/8 | gain:0.033254339487292464 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5541.603887904197 cutoff:4000 ]", - "[ 23/8 ⇜ (3/1 → 19/6) ⇝ 13/4 | gain:0.041870446443995187 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5503.134531727652 cutoff:4000 ]", - "[ 23/8 ⇜ (3/1 → 19/6) ⇝ 13/4 | gain:0.041870446443995187 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5503.134531727652 cutoff:4000 ]", "[ 3/1 → 13/4 | gain:0.05251021778611238 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5483.383350728088 cutoff:4000 ]", "[ 3/1 → 13/4 | gain:0.05251021778611238 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5483.383350728088 cutoff:4000 ]", "[ 3/1 → 13/4 | s:bd gain:0.7 ]", @@ -7550,8 +7443,8 @@ exports[`renders tunes > tune: hyperpop 1`] = ` "[ 13/4 ⇜ (43/12 → 29/8) | gain:0.021789864126373813 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5379.599518697443 cutoff:4000 ]", "[ (29/8 → 47/12) ⇝ 4/1 | gain:0.02196788874761195 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5244.4761496042 cutoff:4000 ]", "[ (29/8 → 47/12) ⇝ 4/1 | gain:0.02196788874761195 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5244.4761496042 cutoff:4000 ]", - "[ (29/8 → 4/1) ⇝ 33/8 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2568.811347023862 ]", - "[ (29/8 → 4/1) ⇝ 33/8 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2568.811347023862 ]", + "[ (29/8 → 4/1) ⇝ 33/8 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2580.8797353950404 ]", + "[ (29/8 → 4/1) ⇝ 33/8 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2580.8797353950404 ]", "[ 27/8 ⇜ (11/3 → 15/4) | gain:0.02733603378769718 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5335.806273589214 cutoff:4000 ]", "[ 27/8 ⇜ (11/3 → 15/4) | gain:0.02733603378769718 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5335.806273589214 cutoff:4000 ]", "[ 15/4 → 31/8 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2568.811347023862 lpattack:0.1 lpenv:2 ftype:24db ]", @@ -7559,44 +7452,44 @@ exports[`renders tunes > tune: hyperpop 1`] = ` "[ 15/4 → 4/1 | gain:0.027475374351507095 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5220.886439234386 cutoff:4000 ]", "[ 15/4 → 4/1 | gain:0.027475374351507095 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5220.886439234386 cutoff:4000 ]", "[ 15/4 → 4/1 | s:hh3 gain:0.7 ]", - "[ (15/4 → 4/1) ⇝ 33/8 | gain:0.014067391667971637 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5220.886439234386 cutoff:4000 ]", - "[ (15/4 → 4/1) ⇝ 33/8 | gain:0.014067391667971637 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5220.886439234386 cutoff:4000 ]", - "[ (15/4 → 4/1) ⇝ 17/4 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2580.8797353950404 ]", - "[ (15/4 → 4/1) ⇝ 17/4 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2580.8797353950404 ]", + "[ (15/4 → 4/1) ⇝ 33/8 | gain:0.01407215930427397 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5197.0018638323545 cutoff:4000 ]", + "[ (15/4 → 4/1) ⇝ 33/8 | gain:0.01407215930427397 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5197.0018638323545 cutoff:4000 ]", + "[ (15/4 → 4/1) ⇝ 17/4 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2604.594154601839 ]", + "[ (15/4 → 4/1) ⇝ 17/4 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2604.594154601839 ]", "[ 7/2 ⇜ (23/6 → 31/8) | gain:0.017542573009485987 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5290.754858561636 cutoff:4000 ]", "[ 7/2 ⇜ (23/6 → 31/8) | gain:0.017542573009485987 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5290.754858561636 cutoff:4000 ]", "[ 31/8 → 4/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2592.8079367021132 lpattack:0.1 lpenv:2 ftype:24db ]", "[ 31/8 → 4/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2592.8079367021132 lpattack:0.1 lpenv:2 ftype:24db ]", "[ 31/8 → 4/1 | s:bd gain:0.7 ]", - "[ (31/8 → 4/1) ⇝ 17/4 | gain:0.01759019913034246 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5197.0018638323545 cutoff:4000 ]", - "[ (31/8 → 4/1) ⇝ 17/4 | gain:0.01759019913034246 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5197.0018638323545 cutoff:4000 ]", - "[ (31/8 → 4/1) ⇝ 35/8 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2592.8079367021132 ]", - "[ (31/8 → 4/1) ⇝ 35/8 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2592.8079367021132 ]", + "[ (31/8 → 4/1) ⇝ 17/4 | gain:0.01759019913034246 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5148.3645377501725 cutoff:4000 ]", + "[ (31/8 → 4/1) ⇝ 17/4 | gain:0.01759019913034246 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5148.3645377501725 cutoff:4000 ]", + "[ (31/8 → 4/1) ⇝ 35/8 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2627.7335619844803 ]", + "[ (31/8 → 4/1) ⇝ 35/8 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2627.7335619844803 ]", "[ 29/8 ⇜ (47/12 → 4/1) | gain:0.02196788874761195 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5244.4761496042 cutoff:4000 ]", "[ 29/8 ⇜ (47/12 → 4/1) | gain:0.02196788874761195 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5244.4761496042 cutoff:4000 ]", - "[ 15/4 ⇜ (4/1 → 49/12) ⇝ 33/8 | gain:0.01407215930427397 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5148.3645377501725 cutoff:4000 ]", - "[ 15/4 ⇜ (4/1 → 49/12) ⇝ 33/8 | gain:0.01407215930427397 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5148.3645377501725 cutoff:4000 ]", - "[ 29/8 ⇜ (4/1 → 33/8) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2616.236614133155 ]", - "[ 29/8 ⇜ (4/1 → 33/8) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2616.236614133155 ]", - "[ 31/8 ⇜ (4/1 → 25/6) ⇝ 17/4 | gain:0.017584239584964544 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5123.62012082546 cutoff:4000 ]", - "[ 31/8 ⇜ (4/1 → 25/6) ⇝ 17/4 | gain:0.017584239584964544 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5123.62012082546 cutoff:4000 ]", - "[ 15/4 ⇜ (4/1 → 17/4) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2627.7335619844803 ]", - "[ 15/4 ⇜ (4/1 → 17/4) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2627.7335619844803 ]", + "[ 15/4 ⇜ (4/1 → 49/12) ⇝ 33/8 | gain:0.01407215930427397 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5197.0018638323545 cutoff:4000 ]", + "[ 15/4 ⇜ (4/1 → 49/12) ⇝ 33/8 | gain:0.01407215930427397 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5197.0018638323545 cutoff:4000 ]", + "[ 29/8 ⇜ (4/1 → 33/8) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2580.8797353950404 ]", + "[ 29/8 ⇜ (4/1 → 33/8) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2580.8797353950404 ]", + "[ 31/8 ⇜ (4/1 → 25/6) ⇝ 17/4 | gain:0.01759019913034246 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5148.3645377501725 cutoff:4000 ]", + "[ 31/8 ⇜ (4/1 → 25/6) ⇝ 17/4 | gain:0.01759019913034246 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5148.3645377501725 cutoff:4000 ]", + "[ 15/4 ⇜ (4/1 → 17/4) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2604.594154601839 ]", + "[ 15/4 ⇜ (4/1 → 17/4) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2604.594154601839 ]", "[ 4/1 → 17/4 | gain:0.02198029948120568 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5123.62012082546 cutoff:4000 ]", "[ 4/1 → 17/4 | gain:0.02198029948120568 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5123.62012082546 cutoff:4000 ]", "[ 4/1 → 17/4 | s:bd gain:0.7 ]", "[ (4/1 → 13/3) ⇝ 35/8 | gain:0.011247559038777319 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5098.597504951462 cutoff:4000 ]", "[ (4/1 → 13/3) ⇝ 35/8 | gain:0.011247559038777319 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5098.597504951462 cutoff:4000 ]", - "[ 31/8 ⇜ (4/1 → 35/8) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2639.083266757757 ]", - "[ 31/8 ⇜ (4/1 → 35/8) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2639.083266757757 ]", - "[ 15/4 ⇜ (49/12 → 33/8) | gain:0.01407215930427397 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5148.3645377501725 cutoff:4000 ]", - "[ 15/4 ⇜ (49/12 → 33/8) | gain:0.01407215930427397 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5148.3645377501725 cutoff:4000 ]", + "[ 31/8 ⇜ (4/1 → 35/8) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2627.7335619844803 ]", + "[ 31/8 ⇜ (4/1 → 35/8) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2627.7335619844803 ]", + "[ 15/4 ⇜ (49/12 → 33/8) | gain:0.01407215930427397 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5197.0018638323545 cutoff:4000 ]", + "[ 15/4 ⇜ (49/12 → 33/8) | gain:0.01407215930427397 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5197.0018638323545 cutoff:4000 ]", "[ 33/8 → 17/4 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2639.083266757757 lpattack:0.1 lpenv:2 ftype:24db ]", "[ 33/8 → 17/4 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2639.083266757757 lpattack:0.1 lpenv:2 ftype:24db ]", "[ (33/8 → 53/12) ⇝ 9/2 | gain:0.01403405840758879 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5047.734873274585 cutoff:4000 ]", "[ (33/8 → 53/12) ⇝ 9/2 | gain:0.01403405840758879 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5047.734873274585 cutoff:4000 ]", - "[ 31/8 ⇜ (25/6 → 17/4) | gain:0.017584239584964544 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5123.62012082546 cutoff:4000 ]", - "[ 31/8 ⇜ (25/6 → 17/4) | gain:0.017584239584964544 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5123.62012082546 cutoff:4000 ]", + "[ 31/8 ⇜ (25/6 → 17/4) | gain:0.01759019913034246 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5148.3645377501725 cutoff:4000 ]", + "[ 31/8 ⇜ (25/6 → 17/4) | gain:0.01759019913034246 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5148.3645377501725 cutoff:4000 ]", "[ 17/4 → 9/2 | gain:0.01752078272553497 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5021.903572521802 cutoff:4000 ]", "[ 17/4 → 9/2 | gain:0.01752078272553497 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5021.903572521802 cutoff:4000 ]", "[ 17/4 → 9/2 | s:hh3 gain:0.7 ]", @@ -7629,20 +7522,16 @@ exports[`renders tunes > tune: hyperpop 1`] = ` "[ 19/4 → 5/1 | gain:0.011012190825058119 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4806.246411789873 cutoff:4000 ]", "[ 19/4 → 5/1 | gain:0.011012190825058119 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4806.246411789873 cutoff:4000 ]", "[ 19/4 → 5/1 | s:hh3 gain:0.7 ]", - "[ (19/4 → 5/1) ⇝ 41/8 | gain:0.005619756192058716 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4778.23271519263 cutoff:4000 ]", - "[ (19/4 → 5/1) ⇝ 41/8 | gain:0.005619756192058716 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4778.23271519263 cutoff:4000 ]", + "[ (19/4 → 61/12) ⇝ 41/8 | gain:0.005619756192058716 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4778.23271519263 cutoff:4000 ]", + "[ (19/4 → 61/12) ⇝ 41/8 | gain:0.005619756192058716 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4778.23271519263 cutoff:4000 ]", "[ 9/2 ⇜ (29/6 → 39/8) | gain:0.007107876545841471 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4888.925582549005 cutoff:4000 ]", "[ 9/2 ⇜ (29/6 → 39/8) | gain:0.007107876545841471 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4888.925582549005 cutoff:4000 ]", "[ 39/8 → 5/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2763.195558759784 lpattack:0.1 lpenv:2 ftype:24db ]", "[ 39/8 → 5/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2763.195558759784 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (39/8 → 5/1) ⇝ 21/4 | gain:0.006973940456445439 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4721.553103742387 cutoff:4000 ]", - "[ (39/8 → 5/1) ⇝ 21/4 | gain:0.006973940456445439 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4721.553103742387 cutoff:4000 ]", + "[ (39/8 → 31/6) ⇝ 21/4 | gain:0.006973940456445439 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4721.553103742387 cutoff:4000 ]", + "[ (39/8 → 31/6) ⇝ 21/4 | gain:0.006973940456445439 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4721.553103742387 cutoff:4000 ]", "[ 37/8 ⇜ (59/12 → 5/1) | gain:0.008836720604435567 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4834.036289789029 cutoff:4000 ]", "[ 37/8 ⇜ (59/12 → 5/1) | gain:0.008836720604435567 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4834.036289789029 cutoff:4000 ]", - "[ 19/4 ⇜ (5/1 → 61/12) ⇝ 41/8 | gain:0.005619756192058716 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4778.23271519263 cutoff:4000 ]", - "[ 19/4 ⇜ (5/1 → 61/12) ⇝ 41/8 | gain:0.005619756192058716 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4778.23271519263 cutoff:4000 ]", - "[ 39/8 ⇜ (5/1 → 31/6) ⇝ 21/4 | gain:0.006973940456445439 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4721.553103742387 cutoff:4000 ]", - "[ 39/8 ⇜ (5/1 → 31/6) ⇝ 21/4 | gain:0.006973940456445439 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4721.553103742387 cutoff:4000 ]", "[ 5/1 → 21/4 | gain:0.008682903916956372 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4692.8969006490215 cutoff:4000 ]", "[ 5/1 → 21/4 | gain:0.008682903916956372 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4692.8969006490215 cutoff:4000 ]", "[ 5/1 → 21/4 | s:bd gain:0.7 ]", @@ -7683,8 +7572,8 @@ exports[`renders tunes > tune: hyperpop 1`] = ` "[ 21/4 ⇜ (67/12 → 45/8) | gain:0.00347470282155788 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4546.64934384357 cutoff:4000 ]", "[ (45/8 → 71/12) ⇝ 6/1 | gain:0.0033534458443527444 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4365.292642693734 cutoff:4000 ]", "[ (45/8 → 71/12) ⇝ 6/1 | gain:0.0033534458443527444 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4365.292642693734 cutoff:4000 ]", - "[ (45/8 → 6/1) ⇝ 49/8 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2877.376777172205 ]", - "[ (45/8 → 6/1) ⇝ 49/8 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2877.376777172205 ]", + "[ (45/8 → 6/1) ⇝ 49/8 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2884.183170199766 ]", + "[ (45/8 → 6/1) ⇝ 49/8 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2884.183170199766 ]", "[ 43/8 ⇜ (17/3 → 23/4) | gain:0.004296220430900771 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4486.859640960669 cutoff:4000 ]", "[ 43/8 ⇜ (17/3 → 23/4) | gain:0.004296220430900771 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4486.859640960669 cutoff:4000 ]", "[ 23/4 → 47/8 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2877.376777172205 lpattack:0.1 lpenv:2 ftype:24db ]", @@ -7692,43 +7581,43 @@ exports[`renders tunes > tune: hyperpop 1`] = ` "[ 23/4 → 6/1 | gain:0.0041636914909436865 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4334.517148084427 cutoff:4000 ]", "[ 23/4 → 6/1 | gain:0.0041636914909436865 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4334.517148084427 cutoff:4000 ]", "[ 23/4 → 6/1 | s:hh3 gain:0.7 ]", - "[ (23/4 → 6/1) ⇝ 49/8 | gain:0.0021318100433631677 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4334.517148084427 cutoff:4000 ]", - "[ (23/4 → 6/1) ⇝ 49/8 | gain:0.0021318100433631677 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4334.517148084427 cutoff:4000 ]", - "[ (23/4 → 6/1) ⇝ 25/4 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2884.183170199766 ]", - "[ (23/4 → 6/1) ⇝ 25/4 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2884.183170199766 ]", + "[ (23/4 → 6/1) ⇝ 49/8 | gain:0.0021170195539929144 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4303.598663257904 cutoff:4000 ]", + "[ (23/4 → 6/1) ⇝ 49/8 | gain:0.0021170195539929144 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4303.598663257904 cutoff:4000 ]", + "[ (23/4 → 6/1) ⇝ 25/4 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2897.237368890237 ]", + "[ (23/4 → 6/1) ⇝ 25/4 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2897.237368890237 ]", "[ 11/2 ⇜ (35/6 → 47/8) | gain:0.0027172198948820303 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4426.39359377459 cutoff:4000 ]", "[ 11/2 ⇜ (35/6 → 47/8) | gain:0.0027172198948820303 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4426.39359377459 cutoff:4000 ]", "[ 47/8 → 6/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2890.803699781578 lpattack:0.1 lpenv:2 ftype:24db ]", "[ 47/8 → 6/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2890.803699781578 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (47/8 → 6/1) ⇝ 25/4 | gain:0.002646274442491143 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4303.598663257904 cutoff:4000 ]", - "[ (47/8 → 6/1) ⇝ 25/4 | gain:0.002646274442491143 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4303.598663257904 cutoff:4000 ]", - "[ (47/8 → 6/1) ⇝ 51/8 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2890.803699781578 ]", - "[ (47/8 → 6/1) ⇝ 51/8 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2890.803699781578 ]", + "[ (47/8 → 6/1) ⇝ 25/4 | gain:0.002607861084803616 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4241.3539374389275 cutoff:4000 ]", + "[ (47/8 → 6/1) ⇝ 25/4 | gain:0.002607861084803616 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4241.3539374389275 cutoff:4000 ]", + "[ (47/8 → 6/1) ⇝ 51/8 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2909.5402784268977 ]", + "[ (47/8 → 6/1) ⇝ 51/8 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2909.5402784268977 ]", "[ 45/8 ⇜ (71/12 → 6/1) | gain:0.0033534458443527444 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4365.292642693734 cutoff:4000 ]", "[ 45/8 ⇜ (71/12 → 6/1) | gain:0.0033534458443527444 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4365.292642693734 cutoff:4000 ]", - "[ 23/4 ⇜ (6/1 → 73/12) ⇝ 49/8 | gain:0.002086288867842893 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4241.3539374389275 cutoff:4000 ]", - "[ 23/4 ⇜ (6/1 → 73/12) ⇝ 49/8 | gain:0.002086288867842893 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4241.3539374389275 cutoff:4000 ]", - "[ 45/8 ⇜ (6/1 → 49/8) | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2903.483208638841 ]", - "[ 45/8 ⇜ (6/1 → 49/8) | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2903.483208638841 ]", - "[ 47/8 ⇜ (6/1 → 37/6) ⇝ 25/4 | gain:0.0025879589775992078 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4210.038361759807 cutoff:4000 ]", - "[ 47/8 ⇜ (6/1 → 37/6) ⇝ 25/4 | gain:0.0025879589775992078 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4210.038361759807 cutoff:4000 ]", - "[ 23/4 ⇜ (6/1 → 25/4) | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2909.5402784268977 ]", - "[ 23/4 ⇜ (6/1 → 25/4) | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2909.5402784268977 ]", + "[ 23/4 ⇜ (6/1 → 73/12) ⇝ 49/8 | gain:0.0021170195539929144 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4303.598663257904 cutoff:4000 ]", + "[ 23/4 ⇜ (6/1 → 73/12) ⇝ 49/8 | gain:0.0021170195539929144 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4303.598663257904 cutoff:4000 ]", + "[ 45/8 ⇜ (6/1 → 49/8) | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2884.183170199766 ]", + "[ 45/8 ⇜ (6/1 → 49/8) | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2884.183170199766 ]", + "[ 47/8 ⇜ (6/1 → 37/6) ⇝ 25/4 | gain:0.002607861084803616 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4241.3539374389275 cutoff:4000 ]", + "[ 47/8 ⇜ (6/1 → 37/6) ⇝ 25/4 | gain:0.002607861084803616 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4241.3539374389275 cutoff:4000 ]", + "[ 23/4 ⇜ (6/1 → 25/4) | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2897.237368890237 ]", + "[ 23/4 ⇜ (6/1 → 25/4) | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2897.237368890237 ]", "[ 6/1 → 25/4 | gain:0.0032349487219990097 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4210.038361759807 cutoff:4000 ]", "[ 6/1 → 25/4 | gain:0.0032349487219990097 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4210.038361759807 cutoff:4000 ]", "[ 6/1 → 25/4 | s:bd gain:0.7 ]", "[ (6/1 → 19/3) ⇝ 51/8 | gain:0.0016432698518802527 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4178.601124662687 cutoff:4000 ]", "[ (6/1 → 19/3) ⇝ 51/8 | gain:0.0016432698518802527 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4178.601124662687 cutoff:4000 ]", - "[ 47/8 ⇜ (6/1 → 51/8) | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2915.4076660819765 ]", - "[ 47/8 ⇜ (6/1 → 51/8) | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2915.4076660819765 ]", - "[ 23/4 ⇜ (73/12 → 49/8) | gain:0.002086288867842893 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4241.3539374389275 cutoff:4000 ]", - "[ 23/4 ⇜ (73/12 → 49/8) | gain:0.002086288867842893 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4241.3539374389275 cutoff:4000 ]", + "[ 47/8 ⇜ (6/1 → 51/8) | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2909.5402784268977 ]", + "[ 47/8 ⇜ (6/1 → 51/8) | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2909.5402784268977 ]", + "[ 23/4 ⇜ (73/12 → 49/8) | gain:0.0021170195539929144 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4303.598663257904 cutoff:4000 ]", + "[ 23/4 ⇜ (73/12 → 49/8) | gain:0.0021170195539929144 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4303.598663257904 cutoff:4000 ]", "[ 49/8 → 25/4 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2915.4076660819765 lpattack:0.1 lpenv:2 ftype:24db ]", "[ 49/8 → 25/4 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2915.4076660819765 lpattack:0.1 lpenv:2 ftype:24db ]", "[ (49/8 → 77/12) ⇝ 13/2 | gain:0.002020492471376867 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4115.383232572483 cutoff:4000 ]", "[ (49/8 → 77/12) ⇝ 13/2 | gain:0.002020492471376867 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4115.383232572483 cutoff:4000 ]", - "[ 47/8 ⇜ (37/6 → 25/4) | gain:0.0025879589775992078 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4210.038361759807 cutoff:4000 ]", - "[ 47/8 ⇜ (37/6 → 25/4) | gain:0.0025879589775992078 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4210.038361759807 cutoff:4000 ]", + "[ 47/8 ⇜ (37/6 → 25/4) | gain:0.002607861084803616 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4241.3539374389275 cutoff:4000 ]", + "[ 47/8 ⇜ (37/6 → 25/4) | gain:0.002607861084803616 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4241.3539374389275 cutoff:4000 ]", "[ 25/4 → 13/2 | gain:0.0025039971642624803 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4083.6134096397636 cutoff:4000 ]", "[ 25/4 → 13/2 | gain:0.0025039971642624803 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4083.6134096397636 cutoff:4000 ]", "[ 25/4 → 13/2 | s:hh3 gain:0.7 ]", @@ -7761,20 +7650,16 @@ exports[`renders tunes > tune: hyperpop 1`] = ` "[ 27/4 → 7/1 | gain:0.001483452397136718 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3826.315480550129 cutoff:4000 ]", "[ 27/4 → 7/1 | gain:0.001483452397136718 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3826.315480550129 cutoff:4000 ]", "[ 27/4 → 7/1 | s:hh3 gain:0.7 ]", - "[ (27/4 → 7/1) ⇝ 57/8 | gain:0.0007514349161098732 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3793.8434936445938 cutoff:4000 ]", - "[ (27/4 → 7/1) ⇝ 57/8 | gain:0.0007514349161098732 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3793.8434936445938 cutoff:4000 ]", + "[ (27/4 → 85/12) ⇝ 57/8 | gain:0.0007514349161098732 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3793.8434936445938 cutoff:4000 ]", + "[ (27/4 → 85/12) ⇝ 57/8 | gain:0.0007514349161098732 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3793.8434936445938 cutoff:4000 ]", "[ 13/2 ⇜ (41/6 → 55/8) | gain:0.0009790326438946302 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3923.373759622562 cutoff:4000 ]", "[ 13/2 ⇜ (41/6 → 55/8) | gain:0.0009790326438946302 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3923.373759622562 cutoff:4000 ]", "[ 55/8 → 7/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2970.728450471497 lpattack:0.1 lpenv:2 ftype:24db ]", "[ 55/8 → 7/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2970.728450471497 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (55/8 → 7/1) ⇝ 29/4 | gain:0.0009187360380160062 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3728.7540466585065 cutoff:4000 ]", - "[ (55/8 → 7/1) ⇝ 29/4 | gain:0.0009187360380160062 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3728.7540466585065 cutoff:4000 ]", + "[ (55/8 → 43/6) ⇝ 29/4 | gain:0.0009187360380160062 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3728.7540466585065 cutoff:4000 ]", + "[ (55/8 → 43/6) ⇝ 29/4 | gain:0.0009187360380160062 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3728.7540466585065 cutoff:4000 ]", "[ 53/8 ⇜ (83/12 → 7/1) | gain:0.0011992608333914556 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3858.7315549779487 cutoff:4000 ]", "[ 53/8 ⇜ (83/12 → 7/1) | gain:0.0011992608333914556 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3858.7315549779487 cutoff:4000 ]", - "[ 27/4 ⇜ (7/1 → 85/12) ⇝ 57/8 | gain:0.0007514349161098732 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3793.8434936445938 cutoff:4000 ]", - "[ 27/4 ⇜ (7/1 → 85/12) ⇝ 57/8 | gain:0.0007514349161098732 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3793.8434936445938 cutoff:4000 ]", - "[ 55/8 ⇜ (7/1 → 43/6) ⇝ 29/4 | gain:0.0009187360380160062 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3728.7540466585065 cutoff:4000 ]", - "[ 55/8 ⇜ (7/1 → 43/6) ⇝ 29/4 | gain:0.0009187360380160062 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3728.7540466585065 cutoff:4000 ]", "[ 7/1 → 29/4 | gain:0.0011353833788233256 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3696.147739319613 cutoff:4000 ]", "[ 7/1 → 29/4 | gain:0.0011353833788233256 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3696.147739319613 cutoff:4000 ]", "[ 7/1 → 29/4 | s:bd gain:0.7 ]", @@ -7815,8 +7700,8 @@ exports[`renders tunes > tune: hyperpop 1`] = ` "[ 29/4 ⇜ (91/12 → 61/8) | gain:0.00043771267437304546 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3532.7239889283615 cutoff:4000 ]", "[ (61/8 → 95/12) ⇝ 8/1 | gain:0.00040393160954279157 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3336.4921769246425 cutoff:4000 ]", "[ (61/8 → 95/12) ⇝ 8/1 | gain:0.00040393160954279157 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3336.4921769246425 cutoff:4000 ]", - "[ (61/8 → 8/1) ⇝ 65/8 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.0852191942718 ]", - "[ (61/8 → 8/1) ⇝ 65/8 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.0852191942718 ]", + "[ (61/8 → 8/1) ⇝ 65/8 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", + "[ (61/8 → 8/1) ⇝ 65/8 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", "[ 59/8 ⇜ (23/3 → 31/4) | gain:0.0005331735858040315 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3467.276011071639 cutoff:4000 ]", "[ 59/8 ⇜ (23/3 → 31/4) | gain:0.0005331735858040315 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3467.276011071639 cutoff:4000 ]", "[ 31/4 → 63/8 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2999.0852191942718 lpattack:0.1 lpenv:2 ftype:24db ]", @@ -7824,44 +7709,44 @@ exports[`renders tunes > tune: hyperpop 1`] = ` "[ 31/4 → 8/1 | gain:0.0004978069306625383 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3303.852260680389 cutoff:4000 ]", "[ 31/4 → 8/1 | gain:0.0004978069306625383 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3303.852260680389 cutoff:4000 ]", "[ 31/4 → 8/1 | s:hh3 gain:0.7 ]", - "[ (31/4 → 8/1) ⇝ 65/8 | gain:0.00025487714849921963 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3303.852260680389 cutoff:4000 ]", - "[ (31/4 → 8/1) ⇝ 65/8 | gain:0.00025487714849921963 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3303.852260680389 cutoff:4000 ]", - "[ (31/4 → 8/1) ⇝ 33/4 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", - "[ (31/4 → 8/1) ⇝ 33/4 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", + "[ (31/4 → 8/1) ⇝ 65/8 | gain:0.0002512336761852884 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3271.2459533414954 cutoff:4000 ]", + "[ (31/4 → 8/1) ⇝ 65/8 | gain:0.0002512336761852884 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3271.2459533414954 cutoff:4000 ]", + "[ (31/4 → 8/1) ⇝ 33/4 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:3000 ]", + "[ (31/4 → 8/1) ⇝ 33/4 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:3000 ]", "[ 15/2 ⇜ (47/6 → 63/8) | gain:0.0003322155712311059 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3401.8504606023293 cutoff:4000 ]", "[ 15/2 ⇜ (47/6 → 63/8) | gain:0.0003322155712311059 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3401.8504606023293 cutoff:4000 ]", "[ 63/8 → 8/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2999.898347482845 lpattack:0.1 lpenv:2 ftype:24db ]", "[ 63/8 → 8/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2999.898347482845 lpattack:0.1 lpenv:2 ftype:24db ]", "[ 63/8 → 8/1 | s:bd gain:0.7 ]", - "[ (63/8 → 8/1) ⇝ 33/4 | gain:0.00031404209523161047 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3271.2459533414954 cutoff:4000 ]", - "[ (63/8 → 8/1) ⇝ 33/4 | gain:0.00031404209523161047 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3271.2459533414954 cutoff:4000 ]", - "[ (63/8 → 8/1) ⇝ 67/8 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.898347482845 ]", - "[ (63/8 → 8/1) ⇝ 67/8 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.898347482845 ]", + "[ (63/8 → 8/1) ⇝ 33/4 | gain:0.0003049279244110808 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3206.156506355406 cutoff:4000 ]", + "[ (63/8 → 8/1) ⇝ 33/4 | gain:0.0003049279244110808 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3206.156506355406 cutoff:4000 ]", + "[ (63/8 → 8/1) ⇝ 67/8 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", + "[ (63/8 → 8/1) ⇝ 67/8 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", "[ 61/8 ⇜ (95/12 → 8/1) | gain:0.00040393160954279157 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3336.4921769246425 cutoff:4000 ]", "[ 61/8 ⇜ (95/12 → 8/1) | gain:0.00040393160954279157 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3336.4921769246425 cutoff:4000 ]", - "[ 31/4 ⇜ (8/1 → 97/12) ⇝ 65/8 | gain:0.00024394233952886466 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3206.156506355406 cutoff:4000 ]", - "[ 31/4 ⇜ (8/1 → 97/12) ⇝ 65/8 | gain:0.00024394233952886466 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3206.156506355406 cutoff:4000 ]", - "[ 61/8 ⇜ (8/1 → 65/8) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.898347482845 ]", - "[ 61/8 ⇜ (8/1 → 65/8) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.898347482845 ]", - "[ 63/8 ⇜ (8/1 → 49/6) ⇝ 33/4 | gain:0.0003003735840186667 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3173.6845194498705 cutoff:4000 ]", - "[ 63/8 ⇜ (8/1 → 49/6) ⇝ 33/4 | gain:0.0003003735840186667 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3173.6845194498705 cutoff:4000 ]", - "[ 31/4 ⇜ (8/1 → 33/4) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", - "[ 31/4 ⇜ (8/1 → 33/4) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", + "[ 31/4 ⇜ (8/1 → 97/12) ⇝ 65/8 | gain:0.0002512336761852884 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3271.2459533414954 cutoff:4000 ]", + "[ 31/4 ⇜ (8/1 → 97/12) ⇝ 65/8 | gain:0.0002512336761852884 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3271.2459533414954 cutoff:4000 ]", + "[ 61/8 ⇜ (8/1 → 65/8) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", + "[ 61/8 ⇜ (8/1 → 65/8) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", + "[ 63/8 ⇜ (8/1 → 49/6) ⇝ 33/4 | gain:0.0003049279244110808 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3206.156506355406 cutoff:4000 ]", + "[ 63/8 ⇜ (8/1 → 49/6) ⇝ 33/4 | gain:0.0003049279244110808 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3206.156506355406 cutoff:4000 ]", + "[ 31/4 ⇜ (8/1 → 33/4) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:3000 ]", + "[ 31/4 ⇜ (8/1 → 33/4) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:3000 ]", "[ 8/1 → 33/4 | gain:0.0003754669800233334 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3173.6845194498705 cutoff:4000 ]", "[ 8/1 → 33/4 | gain:0.0003754669800233334 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3173.6845194498705 cutoff:4000 ]", "[ 8/1 → 33/4 | s:bd gain:0.7 ]", "[ (8/1 → 25/3) ⇝ 67/8 | gain:0.2389653154600499 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3141.2684450220513 cutoff:4000 ]", "[ (8/1 → 25/3) ⇝ 67/8 | gain:0.2389653154600499 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3141.2684450220513 cutoff:4000 ]", - "[ 63/8 ⇜ (8/1 → 67/8) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.0852191942718 ]", - "[ 63/8 ⇜ (8/1 → 67/8) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.0852191942718 ]", - "[ 31/4 ⇜ (97/12 → 65/8) | gain:0.00024394233952886466 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3206.156506355406 cutoff:4000 ]", - "[ 31/4 ⇜ (97/12 → 65/8) | gain:0.00024394233952886466 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3206.156506355406 cutoff:4000 ]", + "[ 63/8 ⇜ (8/1 → 67/8) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", + "[ 63/8 ⇜ (8/1 → 67/8) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", + "[ 31/4 ⇜ (97/12 → 65/8) | gain:0.0002512336761852884 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3271.2459533414954 cutoff:4000 ]", + "[ 31/4 ⇜ (97/12 → 65/8) | gain:0.0002512336761852884 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3271.2459533414954 cutoff:4000 ]", "[ 65/8 → 33/4 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2999.0852191942718 lpattack:0.1 lpenv:2 ftype:24db ]", "[ 65/8 → 33/4 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2999.0852191942718 lpattack:0.1 lpenv:2 ftype:24db ]", "[ (65/8 → 101/12) ⇝ 17/2 | gain:0.00022940355872926835 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3076.6262403774385 cutoff:4000 ]", "[ (65/8 → 101/12) ⇝ 17/2 | gain:0.00022940355872926835 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3076.6262403774385 cutoff:4000 ]", - "[ 63/8 ⇜ (49/6 → 33/4) | gain:0.0003003735840186667 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3173.6845194498705 cutoff:4000 ]", - "[ 63/8 ⇜ (49/6 → 33/4) | gain:0.0003003735840186667 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3173.6845194498705 cutoff:4000 ]", + "[ 63/8 ⇜ (49/6 → 33/4) | gain:0.0003049279244110808 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3206.156506355406 cutoff:4000 ]", + "[ 63/8 ⇜ (49/6 → 33/4) | gain:0.0003049279244110808 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3206.156506355406 cutoff:4000 ]", "[ 33/4 → 17/2 | gain:0.00028223848042460063 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3044.4111862696313 cutoff:4000 ]", "[ 33/4 → 17/2 | gain:0.00028223848042460063 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3044.4111862696313 cutoff:4000 ]", "[ 33/4 → 17/2 | s:hh3 gain:0.7 ]", @@ -7894,20 +7779,16 @@ exports[`renders tunes > tune: hyperpop 1`] = ` "[ 35/4 → 9/1 | gain:0.19946652199116702 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2789.9616382401937 cutoff:4000 ]", "[ 35/4 → 9/1 | gain:0.19946652199116702 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2789.9616382401937 cutoff:4000 ]", "[ 35/4 → 9/1 | s:hh3 gain:0.7 ]", - "[ (35/4 → 9/1) ⇝ 73/8 | gain:0.10036006119411293 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2758.6460625610725 cutoff:4000 ]", - "[ (35/4 → 9/1) ⇝ 73/8 | gain:0.10036006119411293 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2758.6460625610725 cutoff:4000 ]", + "[ (35/4 → 109/12) ⇝ 73/8 | gain:0.10036006119411293 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2758.6460625610725 cutoff:4000 ]", + "[ (35/4 → 109/12) ⇝ 73/8 | gain:0.10036006119411293 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2758.6460625610725 cutoff:4000 ]", "[ 17/2 ⇜ (53/6 → 71/8) | gain:0.1343955752824098 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2884.6167674275184 cutoff:4000 ]", "[ 17/2 ⇜ (53/6 → 71/8) | gain:0.1343955752824098 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2884.6167674275184 cutoff:4000 ]", "[ 71/8 → 9/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2977.1924080321423 lpattack:0.1 lpenv:2 ftype:24db ]", "[ 71/8 → 9/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2977.1924080321423 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (71/8 → 9/1) ⇝ 37/4 | gain:0.12109683385552102 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2696.4013367420957 cutoff:4000 ]", - "[ (71/8 → 9/1) ⇝ 37/4 | gain:0.12109683385552102 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2696.4013367420957 cutoff:4000 ]", + "[ (71/8 → 55/6) ⇝ 37/4 | gain:0.12109683385552102 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2696.4013367420957 cutoff:4000 ]", + "[ (71/8 → 55/6) ⇝ 37/4 | gain:0.12109683385552102 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2696.4013367420957 cutoff:4000 ]", "[ 69/8 ⇜ (107/12 → 9/1) | gain:0.16235819115213307 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2821.398875337315 cutoff:4000 ]", "[ 69/8 ⇜ (107/12 → 9/1) | gain:0.16235819115213307 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2821.398875337315 cutoff:4000 ]", - "[ 35/4 ⇜ (9/1 → 109/12) ⇝ 73/8 | gain:0.10036006119411293 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2758.6460625610725 cutoff:4000 ]", - "[ 35/4 ⇜ (9/1 → 109/12) ⇝ 73/8 | gain:0.10036006119411293 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2758.6460625610725 cutoff:4000 ]", - "[ 71/8 ⇜ (9/1 → 55/6) ⇝ 37/4 | gain:0.12109683385552102 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2696.4013367420957 cutoff:4000 ]", - "[ 71/8 ⇜ (9/1 → 55/6) ⇝ 37/4 | gain:0.12109683385552102 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2696.4013367420957 cutoff:4000 ]", "[ 9/1 → 37/4 | gain:0.1486933887883662 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2665.4828519155726 cutoff:4000 ]", "[ 9/1 → 37/4 | gain:0.1486933887883662 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2665.4828519155726 cutoff:4000 ]", "[ 9/1 → 37/4 | s:bd gain:0.7 ]", @@ -7948,8 +7829,8 @@ exports[`renders tunes > tune: hyperpop 1`] = ` "[ 37/4 ⇜ (115/12 → 77/8) | gain:0.05562379698730943 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2513.140359039332 cutoff:4000 ]", "[ (77/8 → 119/12) ⇝ 10/1 | gain:0.04981524842313599 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2335.9636991872226 cutoff:4000 ]", "[ (77/8 → 119/12) ⇝ 10/1 | gain:0.04981524842313599 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2335.9636991872226 cutoff:4000 ]", - "[ (77/8 → 10/1) ⇝ 81/8 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2915.4076660819765 ]", - "[ (77/8 → 10/1) ⇝ 81/8 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2915.4076660819765 ]", + "[ (77/8 → 10/1) ⇝ 81/8 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2909.5402784268977 ]", + "[ (77/8 → 10/1) ⇝ 81/8 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2909.5402784268977 ]", "[ 75/8 ⇜ (29/3 → 39/4) | gain:0.0670223447192876 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2453.350656156431 cutoff:4000 ]", "[ 75/8 ⇜ (29/3 → 39/4) | gain:0.0670223447192876 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2453.350656156431 cutoff:4000 ]", "[ 39/4 → 79/8 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2915.4076660819765 lpattack:0.1 lpenv:2 ftype:24db ]", @@ -7957,18 +7838,18 @@ exports[`renders tunes > tune: hyperpop 1`] = ` "[ 39/4 → 10/1 | gain:0.0611394178141992 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2307.1030993509794 cutoff:4000 ]", "[ 39/4 → 10/1 | gain:0.0611394178141992 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2307.1030993509794 cutoff:4000 ]", "[ 39/4 → 10/1 | s:hh3 gain:0.7 ]", - "[ (39/4 → 10/1) ⇝ 81/8 | gain:0.031303381920869996 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2307.1030993509794 cutoff:4000 ]", - "[ (39/4 → 10/1) ⇝ 81/8 | gain:0.031303381920869996 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2307.1030993509794 cutoff:4000 ]", - "[ (39/4 → 10/1) ⇝ 41/4 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2909.5402784268977 ]", - "[ (39/4 → 10/1) ⇝ 41/4 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2909.5402784268977 ]", + "[ (39/4 → 10/1) ⇝ 81/8 | gain:0.030737730012853577 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2278.446896257612 cutoff:4000 ]", + "[ (39/4 → 10/1) ⇝ 81/8 | gain:0.030737730012853577 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2278.446896257612 cutoff:4000 ]", + "[ (39/4 → 10/1) ⇝ 41/4 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2897.237368890237 ]", + "[ (39/4 → 10/1) ⇝ 41/4 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2897.237368890237 ]", "[ 19/2 ⇜ (59/6 → 79/8) | gain:0.04134410948782485 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2394.2782744524975 cutoff:4000 ]", "[ 19/2 ⇜ (59/6 → 79/8) | gain:0.04134410948782485 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2394.2782744524975 cutoff:4000 ]", "[ 79/8 → 10/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2903.483208638841 lpattack:0.1 lpenv:2 ftype:24db ]", "[ 79/8 → 10/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2903.483208638841 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (79/8 → 10/1) ⇝ 41/4 | gain:0.03842216251606697 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2278.446896257612 cutoff:4000 ]", - "[ (79/8 → 10/1) ⇝ 41/4 | gain:0.03842216251606697 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2278.446896257612 cutoff:4000 ]", - "[ (79/8 → 10/1) ⇝ 83/8 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2903.483208638841 ]", - "[ (79/8 → 10/1) ⇝ 83/8 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2903.483208638841 ]", + "[ (79/8 → 10/1) ⇝ 41/4 | gain:0.03705744590301562 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2221.7672848073694 cutoff:4000 ]", + "[ (79/8 → 10/1) ⇝ 41/4 | gain:0.03705744590301562 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2221.7672848073694 cutoff:4000 ]", + "[ (79/8 → 10/1) ⇝ 83/8 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2884.183170199766 ]", + "[ (79/8 → 10/1) ⇝ 83/8 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2884.183170199766 ]", "[ 77/8 ⇜ (119/12 → 10/1) | gain:0.04981524842313599 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2335.9636991872226 cutoff:4000 ]", "[ 77/8 ⇜ (119/12 → 10/1) | gain:0.04981524842313599 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2335.9636991872226 cutoff:4000 ]", ] @@ -7982,8 +7863,8 @@ exports[`renders tunes > tune: juxUndTollerei 1`] = ` "[ 1/4 → 1/2 | note:g3 s:sawtooth pan:1 cutoff:1361.2562095290161 lpattack:0.2 lpenv:-2 decay:0.05 sustain:0 room:0.6 delay:0.5 delaytime:0.1 delayfeedback:0.4 ]", "[ 1/2 → 3/4 | note:g3 s:sawtooth pan:0 cutoff:1524.257063143398 lpattack:0.2 lpenv:-2 decay:0.05 sustain:0 room:0.6 delay:0.5 delaytime:0.1 delayfeedback:0.4 ]", "[ 1/2 → 3/4 | note:eb3 s:sawtooth pan:1 cutoff:1524.257063143398 lpattack:0.2 lpenv:-2 decay:0.05 sustain:0 room:0.6 delay:0.5 delaytime:0.1 delayfeedback:0.4 ]", - "[ (101/200 → 1/1) ⇝ 201/200 | note:55 s:triangle pan:0 cutoff:1601.4815730092653 lpattack:0.2 lpenv:-2 decay:0.05 sustain:0 room:0.6 delay:0.5 delaytime:0.1 delayfeedback:0.4 ]", - "[ (101/200 → 1/1) ⇝ 201/200 | note:65 s:triangle pan:1 cutoff:1601.4815730092653 lpattack:0.2 lpenv:-2 decay:0.05 sustain:0 room:0.6 delay:0.5 delaytime:0.1 delayfeedback:0.4 ]", + "[ (101/200 → 1/1) ⇝ 201/200 | note:55 s:triangle pan:0 cutoff:1602.9480029324704 lpattack:0.2 lpenv:-2 decay:0.05 sustain:0 room:0.6 delay:0.5 delaytime:0.1 delayfeedback:0.4 ]", + "[ (101/200 → 1/1) ⇝ 201/200 | note:65 s:triangle pan:1 cutoff:1602.9480029324704 lpattack:0.2 lpenv:-2 decay:0.05 sustain:0 room:0.6 delay:0.5 delaytime:0.1 delayfeedback:0.4 ]", "[ 3/4 → 1/1 | note:bb3 s:sawtooth pan:0 cutoff:1670.953955747281 lpattack:0.2 lpenv:-2 decay:0.05 sustain:0 room:0.6 delay:0.5 delaytime:0.1 delayfeedback:0.4 ]", "[ 3/4 → 1/1 | note:c3 s:sawtooth pan:1 cutoff:1670.953955747281 lpattack:0.2 lpenv:-2 decay:0.05 sustain:0 room:0.6 delay:0.5 delaytime:0.1 delayfeedback:0.4 ]", ] @@ -7992,27 +7873,27 @@ exports[`renders tunes > tune: juxUndTollerei 1`] = ` exports[`renders tunes > tune: loungeSponge 1`] = ` [ "[ 0/1 → 1/4 | note:C2 gain:1 ]", - "[ 0/1 → 3/8 | note:B3 cutoff:1396 ]", - "[ 0/1 → 3/8 | note:D4 cutoff:1396 ]", - "[ 0/1 → 3/8 | note:E4 cutoff:1396 ]", - "[ 0/1 → 3/8 | note:G4 cutoff:1396 ]", + "[ 0/1 → 3/8 | note:B3 cutoff:1537 ]", + "[ 0/1 → 3/8 | note:D4 cutoff:1537 ]", + "[ 0/1 → 3/8 | note:E4 cutoff:1537 ]", + "[ 0/1 → 3/8 | note:G4 cutoff:1537 ]", "[ -1/4 ⇜ (0/1 → 1/2) | n:E5 clip:0.25 ]", "[ 0/1 → 1/2 | s:bd bank:RolandTR909 ]", "[ 0/1 → 3/4 | n:A4 clip:0.25 ]", "[ 1/4 → 1/2 | note:C2 gain:4 ]", "[ 1/4 → 1/2 | s:hh bank:RolandTR909 ]", - "[ 3/8 → 3/4 | note:B3 cutoff:1396 ]", - "[ 3/8 → 3/4 | note:D4 cutoff:1396 ]", - "[ 3/8 → 3/4 | note:E4 cutoff:1396 ]", - "[ 3/8 → 3/4 | note:G4 cutoff:1396 ]", + "[ 3/8 → 3/4 | note:B3 cutoff:1537 ]", + "[ 3/8 → 3/4 | note:D4 cutoff:1537 ]", + "[ 3/8 → 3/4 | note:E4 cutoff:1537 ]", + "[ 3/8 → 3/4 | note:G4 cutoff:1537 ]", "[ 1/2 → 3/4 | note:C2 gain:1 ]", "[ 1/2 → 1/1 | s:bd bank:RolandTR909 ]", "[ 1/2 → 1/1 | s:cp bank:RolandTR909 ]", "[ (1/2 → 1/1) ⇝ 5/4 | n:C5 clip:0.25 ]", - "[ 3/4 → 1/1 | note:B3 cutoff:1396 ]", - "[ 3/4 → 1/1 | note:D4 cutoff:1396 ]", - "[ 3/4 → 1/1 | note:E4 cutoff:1396 ]", - "[ 3/4 → 1/1 | note:G4 cutoff:1396 ]", + "[ 3/4 → 1/1 | note:B3 cutoff:1537 ]", + "[ 3/4 → 1/1 | note:D4 cutoff:1537 ]", + "[ 3/4 → 1/1 | note:E4 cutoff:1537 ]", + "[ 3/4 → 1/1 | note:G4 cutoff:1537 ]", "[ 3/4 → 1/1 | note:C2 gain:4 ]", "[ 3/4 → 1/1 | s:hh bank:RolandTR909 ]", "[ (3/4 → 1/1) ⇝ 3/2 | n:A5 clip:0.25 ]", @@ -8087,146 +7968,74 @@ exports[`renders tunes > tune: orbit 1`] = ` exports[`renders tunes > tune: randomBells 1`] = ` [ - "[ -9/8 ⇜ (0/1 → 3/8) | gain:0.6 note:G4 velocity:0.7893480537459254 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ -3/4 ⇜ (0/1 → 3/4) | gain:0.6 note:F5 velocity:0.9213038925081491 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (0/1 → 1/1) ⇝ 3/2 | note:D2 s:bass clip:1 gain:0.8 ]", - "[ (0/1 → 1/1) ⇝ 9/4 | gain:0.6 note:A3 velocity:0.6003328701481223 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (3/8 → 1/1) ⇝ 21/8 | gain:0.6 note:D4 velocity:0.6848798459395766 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (3/4 → 1/1) ⇝ 3/1 | gain:0.6 note:G4 velocity:0.7837830819189548 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 0/1 ⇜ (1/1 → 3/2) | note:D2 s:bass clip:1 gain:0.8 ]", - "[ 0/1 ⇜ (1/1 → 2/1) ⇝ 9/4 | gain:0.6 note:A3 velocity:0.6003328701481223 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 3/8 ⇜ (1/1 → 2/1) ⇝ 21/8 | gain:0.6 note:D4 velocity:0.6848798459395766 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 3/4 ⇜ (1/1 → 2/1) ⇝ 3/1 | gain:0.6 note:G4 velocity:0.7837830819189548 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (3/2 → 2/1) ⇝ 9/4 | note:D2 s:bass clip:1 gain:0.8 ]", - "[ 0/1 ⇜ (2/1 → 9/4) | gain:0.6 note:A3 velocity:0.6003328701481223 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 3/2 ⇜ (2/1 → 9/4) | note:D2 s:bass clip:1 gain:0.8 ]", - "[ 3/8 ⇜ (2/1 → 21/8) | gain:0.6 note:D4 velocity:0.6848798459395766 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 3/4 ⇜ (2/1 → 3/1) | gain:0.6 note:G4 velocity:0.7837830819189548 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ -9/8 ⇜ (0/1 → 3/8) | gain:0.6 note:F5 velocity:0.9184964690357447 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ -3/4 ⇜ (0/1 → 3/4) | gain:0.6 note:D3 velocity:0.5 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 0/1 → 3/2 | note:D2 s:bass clip:1 gain:0.8 ]", + "[ 0/1 → 9/4 | gain:0.6 note:A3 velocity:0.6003328701481223 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 3/8 → 21/8 | gain:0.6 note:D4 velocity:0.6848798459395766 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 3/4 → 3/1 | gain:0.6 note:G4 velocity:0.7837830819189548 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 3/2 → 9/4 | note:D2 s:bass clip:1 gain:0.8 ]", "[ 9/4 → 3/1 | note:D2 s:bass clip:1 gain:0.8 ]", - "[ (9/4 → 3/1) ⇝ 9/2 | gain:0.6 note:G3 velocity:0.5819958923384547 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (21/8 → 3/1) ⇝ 39/8 | gain:0.6 note:G3 velocity:0.567817933857441 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 9/4 ⇜ (3/1 → 4/1) ⇝ 9/2 | gain:0.6 note:G3 velocity:0.5819958923384547 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 21/8 ⇜ (3/1 → 4/1) ⇝ 39/8 | gain:0.6 note:G3 velocity:0.567817933857441 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (3/1 → 4/1) ⇝ 9/2 | note:D2 s:bass clip:1 gain:0.8 ]", - "[ (3/1 → 4/1) ⇝ 21/4 | gain:0.6 note:D4 velocity:0.704405858181417 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 9/4 ⇜ (4/1 → 9/2) | gain:0.6 note:G3 velocity:0.5819958923384547 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 3/1 ⇜ (4/1 → 9/2) | note:D2 s:bass clip:1 gain:0.8 ]", - "[ 21/8 ⇜ (4/1 → 39/8) | gain:0.6 note:G3 velocity:0.567817933857441 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 3/1 ⇜ (4/1 → 5/1) ⇝ 21/4 | gain:0.6 note:D4 velocity:0.704405858181417 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (9/2 → 5/1) ⇝ 21/4 | note:D2 s:bass clip:1 gain:0.8 ]", - "[ (9/2 → 5/1) ⇝ 6/1 | gain:0.6 note:D4 velocity:0.6988155404105783 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (39/8 → 5/1) ⇝ 51/8 | gain:0.6 note:C5 velocity:0.867275302298367 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 3/1 ⇜ (5/1 → 21/4) | gain:0.6 note:D4 velocity:0.704405858181417 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 9/2 ⇜ (5/1 → 21/4) | note:D2 s:bass clip:1 gain:0.8 ]", - "[ 9/2 ⇜ (5/1 → 6/1) | gain:0.6 note:D4 velocity:0.6988155404105783 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 39/8 ⇜ (5/1 → 6/1) ⇝ 51/8 | gain:0.6 note:C5 velocity:0.867275302298367 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 9/4 → 9/2 | gain:0.6 note:G3 velocity:0.5819958923384547 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 21/8 → 39/8 | gain:0.6 note:G3 velocity:0.567817933857441 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 3/1 → 9/2 | note:D2 s:bass clip:1 gain:0.8 ]", + "[ 3/1 → 21/4 | gain:0.6 note:D4 velocity:0.704405858181417 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 9/2 → 21/4 | note:D2 s:bass clip:1 gain:0.8 ]", + "[ 9/2 → 6/1 | gain:0.6 note:D4 velocity:0.6988155404105783 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ (39/8 → 6/1) ⇝ 51/8 | gain:0.6 note:C5 velocity:0.8514789454638958 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", "[ 21/4 → 6/1 | note:D2 s:bass clip:1 gain:0.8 ]", - "[ (21/4 → 6/1) ⇝ 27/4 | gain:0.6 note:C5 velocity:0.8514789454638958 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 39/8 ⇜ (6/1 → 51/8) | gain:0.6 note:G3 velocity:0.5832531340420246 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 21/4 ⇜ (6/1 → 27/4) | gain:0.6 note:G4 velocity:0.7743164440616965 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (6/1 → 7/1) ⇝ 15/2 | note:A2 s:bass clip:1 gain:0.8 ]", - "[ (6/1 → 7/1) ⇝ 33/4 | gain:0.6 note:F3 velocity:0.5408733254298568 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (51/8 → 7/1) ⇝ 69/8 | gain:0.6 note:C5 velocity:0.8643641015514731 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (27/4 → 7/1) ⇝ 9/1 | gain:0.6 note:F3 velocity:0.5405213935300708 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 6/1 ⇜ (7/1 → 15/2) | note:A2 s:bass clip:1 gain:0.8 ]", - "[ 6/1 ⇜ (7/1 → 8/1) ⇝ 33/4 | gain:0.6 note:F3 velocity:0.5408733254298568 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 51/8 ⇜ (7/1 → 8/1) ⇝ 69/8 | gain:0.6 note:C5 velocity:0.8643641015514731 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 27/4 ⇜ (7/1 → 8/1) ⇝ 9/1 | gain:0.6 note:F3 velocity:0.5405213935300708 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (15/2 → 8/1) ⇝ 33/4 | note:A2 s:bass clip:1 gain:0.8 ]", - "[ 6/1 ⇜ (8/1 → 33/4) | gain:0.6 note:F3 velocity:0.5408733254298568 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 15/2 ⇜ (8/1 → 33/4) | note:A2 s:bass clip:1 gain:0.8 ]", - "[ 51/8 ⇜ (8/1 → 69/8) | gain:0.6 note:C5 velocity:0.8643641015514731 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 27/4 ⇜ (8/1 → 9/1) | gain:0.6 note:F3 velocity:0.5405213935300708 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ (21/4 → 6/1) ⇝ 27/4 | gain:0.6 note:G4 velocity:0.7597710825502872 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 39/8 ⇜ (6/1 → 51/8) | gain:0.6 note:C5 velocity:0.8514789454638958 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 21/4 ⇜ (6/1 → 27/4) | gain:0.6 note:G4 velocity:0.7597710825502872 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 6/1 → 15/2 | note:A2 s:bass clip:1 gain:0.8 ]", + "[ 6/1 → 33/4 | gain:0.6 note:F3 velocity:0.5408733254298568 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 51/8 → 69/8 | gain:0.6 note:C5 velocity:0.8643641015514731 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 27/4 → 9/1 | gain:0.6 note:F3 velocity:0.5405213935300708 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 15/2 → 33/4 | note:A2 s:bass clip:1 gain:0.8 ]", "[ 33/4 → 9/1 | note:A2 s:bass clip:1 gain:0.8 ]", - "[ (33/4 → 9/1) ⇝ 21/2 | gain:0.6 note:A3 velocity:0.5854638321325183 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (69/8 → 9/1) ⇝ 87/8 | gain:0.6 note:F4 velocity:0.7483773557469249 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 33/4 ⇜ (9/1 → 10/1) ⇝ 21/2 | gain:0.6 note:A3 velocity:0.5854638321325183 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 69/8 ⇜ (9/1 → 10/1) ⇝ 87/8 | gain:0.6 note:F4 velocity:0.7483773557469249 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (9/1 → 10/1) ⇝ 21/2 | note:A2 s:bass clip:1 gain:0.8 ]", - "[ (9/1 → 10/1) ⇝ 45/4 | gain:0.6 note:C4 velocity:0.6479453053325415 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 33/4 ⇜ (10/1 → 21/2) | gain:0.6 note:A3 velocity:0.5854638321325183 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 9/1 ⇜ (10/1 → 21/2) | note:A2 s:bass clip:1 gain:0.8 ]", - "[ 69/8 ⇜ (10/1 → 87/8) | gain:0.6 note:F4 velocity:0.7483773557469249 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 9/1 ⇜ (10/1 → 11/1) ⇝ 45/4 | gain:0.6 note:C4 velocity:0.6479453053325415 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (21/2 → 11/1) ⇝ 45/4 | note:A2 s:bass clip:1 gain:0.8 ]", - "[ (21/2 → 11/1) ⇝ 12/1 | gain:0.6 note:A4 velocity:0.7972785895690322 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (87/8 → 11/1) ⇝ 99/8 | gain:0.6 note:F4 velocity:0.7249447042122483 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 9/1 ⇜ (11/1 → 45/4) | gain:0.6 note:C4 velocity:0.6479453053325415 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 21/2 ⇜ (11/1 → 45/4) | note:A2 s:bass clip:1 gain:0.8 ]", - "[ 21/2 ⇜ (11/1 → 12/1) | gain:0.6 note:A4 velocity:0.7972785895690322 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 87/8 ⇜ (11/1 → 12/1) ⇝ 99/8 | gain:0.6 note:F4 velocity:0.7249447042122483 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 33/4 → 21/2 | gain:0.6 note:A3 velocity:0.5854638321325183 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 69/8 → 87/8 | gain:0.6 note:F4 velocity:0.7483773557469249 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 9/1 → 21/2 | note:A2 s:bass clip:1 gain:0.8 ]", + "[ 9/1 → 45/4 | gain:0.6 note:C4 velocity:0.6479453053325415 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 21/2 → 45/4 | note:A2 s:bass clip:1 gain:0.8 ]", + "[ 21/2 → 12/1 | gain:0.6 note:A4 velocity:0.7972785895690322 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ (87/8 → 12/1) ⇝ 99/8 | gain:0.6 note:F5 velocity:0.9336296319961548 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", "[ 45/4 → 12/1 | note:A2 s:bass clip:1 gain:0.8 ]", - "[ (45/4 → 12/1) ⇝ 51/4 | gain:0.6 note:F5 velocity:0.9336296319961548 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 87/8 ⇜ (12/1 → 99/8) | gain:0.6 note:C5 velocity:0.8424309445545077 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 45/4 ⇜ (12/1 → 51/4) | gain:0.6 note:C4 velocity:0.6662392104044557 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (12/1 → 13/1) ⇝ 27/2 | note:G2 s:bass clip:1 gain:0.8 ]", - "[ (12/1 → 13/1) ⇝ 57/4 | gain:0.6 note:F3 velocity:0.5185003904625773 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (99/8 → 13/1) ⇝ 117/8 | gain:0.6 note:D4 velocity:0.67274125572294 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (51/4 → 13/1) ⇝ 15/1 | gain:0.6 note:A4 velocity:0.8324771635234356 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 12/1 ⇜ (13/1 → 27/2) | note:G2 s:bass clip:1 gain:0.8 ]", - "[ 12/1 ⇜ (13/1 → 14/1) ⇝ 57/4 | gain:0.6 note:F3 velocity:0.5185003904625773 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 99/8 ⇜ (13/1 → 14/1) ⇝ 117/8 | gain:0.6 note:D4 velocity:0.67274125572294 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 51/4 ⇜ (13/1 → 14/1) ⇝ 15/1 | gain:0.6 note:A4 velocity:0.8324771635234356 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (27/2 → 14/1) ⇝ 57/4 | note:G2 s:bass clip:1 gain:0.8 ]", - "[ 12/1 ⇜ (14/1 → 57/4) | gain:0.6 note:F3 velocity:0.5185003904625773 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 27/2 ⇜ (14/1 → 57/4) | note:G2 s:bass clip:1 gain:0.8 ]", - "[ 99/8 ⇜ (14/1 → 117/8) | gain:0.6 note:D4 velocity:0.67274125572294 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 51/4 ⇜ (14/1 → 15/1) | gain:0.6 note:A4 velocity:0.8324771635234356 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ (45/4 → 12/1) ⇝ 51/4 | gain:0.6 note:G5 velocity:0.9797635599970818 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 87/8 ⇜ (12/1 → 99/8) | gain:0.6 note:F5 velocity:0.9336296319961548 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 45/4 ⇜ (12/1 → 51/4) | gain:0.6 note:G5 velocity:0.9797635599970818 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 12/1 → 27/2 | note:G2 s:bass clip:1 gain:0.8 ]", + "[ 12/1 → 57/4 | gain:0.6 note:F3 velocity:0.5185003904625773 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 99/8 → 117/8 | gain:0.6 note:D4 velocity:0.67274125572294 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 51/4 → 15/1 | gain:0.6 note:A4 velocity:0.8324771635234356 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 27/2 → 57/4 | note:G2 s:bass clip:1 gain:0.8 ]", "[ 57/4 → 15/1 | note:G2 s:bass clip:1 gain:0.8 ]", - "[ (57/4 → 15/1) ⇝ 33/2 | gain:0.6 note:A4 velocity:0.803433682769537 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (117/8 → 15/1) ⇝ 135/8 | gain:0.6 note:G3 velocity:0.5800967421382666 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 57/4 ⇜ (15/1 → 16/1) ⇝ 33/2 | gain:0.6 note:A4 velocity:0.803433682769537 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 117/8 ⇜ (15/1 → 16/1) ⇝ 135/8 | gain:0.6 note:G3 velocity:0.5800967421382666 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (15/1 → 16/1) ⇝ 33/2 | note:G2 s:bass clip:1 gain:0.8 ]", - "[ (15/1 → 16/1) ⇝ 69/4 | gain:0.6 note:G4 velocity:0.769017674960196 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 57/4 ⇜ (16/1 → 33/2) | gain:0.6 note:A4 velocity:0.803433682769537 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 15/1 ⇜ (16/1 → 33/2) | note:G2 s:bass clip:1 gain:0.8 ]", - "[ 117/8 ⇜ (16/1 → 135/8) | gain:0.6 note:G3 velocity:0.5800967421382666 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 15/1 ⇜ (16/1 → 17/1) ⇝ 69/4 | gain:0.6 note:G4 velocity:0.769017674960196 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (33/2 → 17/1) ⇝ 69/4 | note:G2 s:bass clip:1 gain:0.8 ]", - "[ (33/2 → 17/1) ⇝ 18/1 | gain:0.6 note:F3 velocity:0.5081270858645439 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (135/8 → 17/1) ⇝ 147/8 | gain:0.6 note:F4 velocity:0.7109030662104487 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 15/1 ⇜ (17/1 → 69/4) | gain:0.6 note:G4 velocity:0.769017674960196 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 33/2 ⇜ (17/1 → 69/4) | note:G2 s:bass clip:1 gain:0.8 ]", - "[ 33/2 ⇜ (17/1 → 18/1) | gain:0.6 note:F3 velocity:0.5081270858645439 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 135/8 ⇜ (17/1 → 18/1) ⇝ 147/8 | gain:0.6 note:F4 velocity:0.7109030662104487 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 57/4 → 33/2 | gain:0.6 note:A4 velocity:0.803433682769537 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 117/8 → 135/8 | gain:0.6 note:G3 velocity:0.5800967421382666 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 15/1 → 33/2 | note:G2 s:bass clip:1 gain:0.8 ]", + "[ 15/1 → 69/4 | gain:0.6 note:G4 velocity:0.769017674960196 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 33/2 → 69/4 | note:G2 s:bass clip:1 gain:0.8 ]", + "[ 33/2 → 18/1 | gain:0.6 note:F3 velocity:0.5081270858645439 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ (135/8 → 18/1) ⇝ 147/8 | gain:0.6 note:C4 velocity:0.6415294744074345 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", "[ 69/4 → 18/1 | note:G2 s:bass clip:1 gain:0.8 ]", - "[ (69/4 → 18/1) ⇝ 75/4 | gain:0.6 note:C4 velocity:0.6415294744074345 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 135/8 ⇜ (18/1 → 147/8) | gain:0.6 note:G3 velocity:0.583311184309423 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 69/4 ⇜ (18/1 → 75/4) | gain:0.6 note:F3 velocity:0.5062594395130873 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (18/1 → 19/1) ⇝ 39/2 | note:F2 s:bass clip:1 gain:0.8 ]", - "[ (18/1 → 19/1) ⇝ 81/4 | gain:0.6 note:F5 velocity:0.9528779787942767 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (147/8 → 19/1) ⇝ 165/8 | gain:0.6 note:G5 velocity:0.9961825357750058 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (75/4 → 19/1) ⇝ 21/1 | gain:0.6 note:C4 velocity:0.6617662012577057 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 18/1 ⇜ (19/1 → 39/2) | note:F2 s:bass clip:1 gain:0.8 ]", - "[ 18/1 ⇜ (19/1 → 20/1) ⇝ 81/4 | gain:0.6 note:F5 velocity:0.9528779787942767 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 147/8 ⇜ (19/1 → 20/1) ⇝ 165/8 | gain:0.6 note:G5 velocity:0.9961825357750058 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 75/4 ⇜ (19/1 → 20/1) ⇝ 21/1 | gain:0.6 note:C4 velocity:0.6617662012577057 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (39/2 → 20/1) ⇝ 81/4 | note:F2 s:bass clip:1 gain:0.8 ]", - "[ 18/1 ⇜ (20/1 → 81/4) | gain:0.6 note:F5 velocity:0.9528779787942767 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 39/2 ⇜ (20/1 → 81/4) | note:F2 s:bass clip:1 gain:0.8 ]", - "[ 147/8 ⇜ (20/1 → 165/8) | gain:0.6 note:G5 velocity:0.9961825357750058 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 75/4 ⇜ (20/1 → 21/1) | gain:0.6 note:C4 velocity:0.6617662012577057 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ (69/4 → 18/1) ⇝ 75/4 | gain:0.6 note:A3 velocity:0.6086445553228259 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 135/8 ⇜ (18/1 → 147/8) | gain:0.6 note:C4 velocity:0.6415294744074345 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 69/4 ⇜ (18/1 → 75/4) | gain:0.6 note:A3 velocity:0.6086445553228259 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 18/1 → 39/2 | note:F2 s:bass clip:1 gain:0.8 ]", + "[ 18/1 → 81/4 | gain:0.6 note:F5 velocity:0.9528779787942767 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 147/8 → 165/8 | gain:0.6 note:G5 velocity:0.9961825357750058 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 75/4 → 21/1 | gain:0.6 note:C4 velocity:0.6617662012577057 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 39/2 → 81/4 | note:F2 s:bass clip:1 gain:0.8 ]", "[ 81/4 → 21/1 | note:F2 s:bass clip:1 gain:0.8 ]", - "[ (81/4 → 21/1) ⇝ 45/2 | gain:0.6 note:D5 velocity:0.9066732861101627 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (165/8 → 21/1) ⇝ 183/8 | gain:0.6 note:G5 velocity:0.9695742893964052 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 81/4 ⇜ (21/1 → 22/1) ⇝ 45/2 | gain:0.6 note:D5 velocity:0.9066732861101627 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 165/8 ⇜ (21/1 → 22/1) ⇝ 183/8 | gain:0.6 note:G5 velocity:0.9695742893964052 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (21/1 → 22/1) ⇝ 45/2 | note:F2 s:bass clip:1 gain:0.8 ]", - "[ (21/1 → 22/1) ⇝ 93/4 | gain:0.6 note:G5 velocity:0.9865687442943454 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 81/4 ⇜ (22/1 → 45/2) | gain:0.6 note:D5 velocity:0.9066732861101627 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 21/1 ⇜ (22/1 → 45/2) | note:F2 s:bass clip:1 gain:0.8 ]", - "[ 165/8 ⇜ (22/1 → 183/8) | gain:0.6 note:G5 velocity:0.9695742893964052 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 21/1 ⇜ (22/1 → 23/1) ⇝ 93/4 | gain:0.6 note:G5 velocity:0.9865687442943454 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (45/2 → 23/1) ⇝ 93/4 | note:F2 s:bass clip:1 gain:0.8 ]", - "[ (45/2 → 23/1) ⇝ 24/1 | gain:0.6 note:C5 velocity:0.8680832693353295 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ (183/8 → 23/1) ⇝ 195/8 | gain:0.6 note:D4 velocity:0.7065566582605243 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 21/1 ⇜ (23/1 → 93/4) | gain:0.6 note:G5 velocity:0.9865687442943454 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 45/2 ⇜ (23/1 → 93/4) | note:F2 s:bass clip:1 gain:0.8 ]", - "[ 45/2 ⇜ (23/1 → 24/1) | gain:0.6 note:C5 velocity:0.8680832693353295 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", - "[ 183/8 ⇜ (23/1 → 24/1) ⇝ 195/8 | gain:0.6 note:D4 velocity:0.7065566582605243 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 81/4 → 45/2 | gain:0.6 note:D5 velocity:0.9066732861101627 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 165/8 → 183/8 | gain:0.6 note:G5 velocity:0.9695742893964052 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 21/1 → 45/2 | note:F2 s:bass clip:1 gain:0.8 ]", + "[ 21/1 → 93/4 | gain:0.6 note:G5 velocity:0.9865687442943454 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ 45/2 → 93/4 | note:F2 s:bass clip:1 gain:0.8 ]", + "[ 45/2 → 24/1 | gain:0.6 note:C5 velocity:0.8680832693353295 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ (183/8 → 24/1) ⇝ 195/8 | gain:0.6 note:C4 velocity:0.6528211180120707 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", "[ 93/4 → 24/1 | note:F2 s:bass clip:1 gain:0.8 ]", - "[ (93/4 → 24/1) ⇝ 99/4 | gain:0.6 note:C4 velocity:0.6528211180120707 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", + "[ (93/4 → 24/1) ⇝ 99/4 | gain:0.6 note:F3 velocity:0.5404728800058365 s:bell delay:0.2 delaytime:0.3333333333333333 delayfeedback:0.8 ]", ] `; @@ -8620,24 +8429,19 @@ exports[`renders tunes > tune: swimming 1`] = ` "[ 0/1 → 3/4 | note:Bb4 ]", "[ 0/1 → 3/4 | note:D5 ]", "[ 0/1 → 3/4 | note:G3 ]", - "[ (3/4 → 1/1) ⇝ 5/4 | note:D4 ]", - "[ (3/4 → 1/1) ⇝ 5/4 | note:G4 ]", - "[ (3/4 → 1/1) ⇝ 5/4 | note:Bb4 ]", - "[ (3/4 → 1/1) ⇝ 3/2 | note:G3 ]", - "[ 3/4 ⇜ (1/1 → 5/4) | note:D4 ]", - "[ 3/4 ⇜ (1/1 → 5/4) | note:G4 ]", - "[ 3/4 ⇜ (1/1 → 5/4) | note:Bb4 ]", - "[ 3/4 ⇜ (1/1 → 3/2) | note:G3 ]", + "[ 3/4 → 5/4 | note:D4 ]", + "[ 3/4 → 5/4 | note:G4 ]", + "[ 3/4 → 5/4 | note:Bb4 ]", + "[ 3/4 → 3/2 | note:G3 ]", "[ 5/4 → 3/2 | note:Bb3 ]", "[ 5/4 → 3/2 | note:D4 ]", "[ 5/4 → 3/2 | note:F4 ]", "[ 3/2 → 2/1 | note:G3 ]", "[ 3/2 → 2/1 | note:C4 ]", "[ 3/2 → 2/1 | note:E4 ]", - "[ (3/2 → 2/1) ⇝ 9/4 | note:C3 ]", + "[ 3/2 → 9/4 | note:C3 ]", "[ 2/1 → 17/8 | note:Ab3 ]", "[ 2/1 → 17/8 | note:F4 ]", - "[ 3/2 ⇜ (2/1 → 9/4) | note:C3 ]", "[ 17/8 → 9/4 | note:A3 ]", "[ 17/8 → 9/4 | note:Gb4 ]", "[ 9/4 → 3/1 | note:Bb3 ]", @@ -8651,19 +8455,17 @@ exports[`renders tunes > tune: swimming 1`] = ` "[ 7/2 → 15/4 | note:F3 ]", "[ 7/2 → 15/4 | note:A3 ]", "[ 7/2 → 15/4 | note:C3 ]", - "[ (15/4 → 4/1) ⇝ 9/2 | note:D2 ]", + "[ 15/4 → 9/2 | note:D2 ]", "[ 4/1 → 17/4 | note:F3 ]", "[ 4/1 → 17/4 | note:A3 ]", "[ 4/1 → 17/4 | note:C3 ]", - "[ 15/4 ⇜ (4/1 → 9/2) | note:D2 ]", "[ 17/4 → 9/2 | note:F3 ]", "[ 17/4 → 9/2 | note:A3 ]", "[ 17/4 → 9/2 | note:C3 ]", - "[ (9/2 → 5/1) ⇝ 21/4 | note:G2 ]", + "[ 9/2 → 21/4 | note:G2 ]", "[ 19/4 → 5/1 | note:F3 ]", "[ 19/4 → 5/1 | note:Bb3 ]", "[ 19/4 → 5/1 | note:D3 ]", - "[ 9/2 ⇜ (5/1 → 21/4) | note:G2 ]", "[ 5/1 → 21/4 | note:F3 ]", "[ 5/1 → 21/4 | note:Bb3 ]", "[ 5/1 → 21/4 | note:D3 ]", @@ -8681,19 +8483,17 @@ exports[`renders tunes > tune: swimming 1`] = ` "[ 13/2 → 27/4 | note:F3 ]", "[ 13/2 → 27/4 | note:A3 ]", "[ 13/2 → 27/4 | note:C3 ]", - "[ (27/4 → 7/1) ⇝ 15/2 | note:D2 ]", + "[ 27/4 → 15/2 | note:D2 ]", "[ 7/1 → 29/4 | note:F3 ]", "[ 7/1 → 29/4 | note:A3 ]", "[ 7/1 → 29/4 | note:C3 ]", - "[ 27/4 ⇜ (7/1 → 15/2) | note:D2 ]", "[ 29/4 → 15/2 | note:F3 ]", "[ 29/4 → 15/2 | note:A3 ]", "[ 29/4 → 15/2 | note:C3 ]", - "[ (15/2 → 8/1) ⇝ 33/4 | note:G2 ]", + "[ 15/2 → 33/4 | note:G2 ]", "[ 31/4 → 8/1 | note:F3 ]", "[ 31/4 → 8/1 | note:Bb3 ]", "[ 31/4 → 8/1 | note:D3 ]", - "[ 15/2 ⇜ (8/1 → 33/4) | note:G2 ]", "[ 8/1 → 33/4 | note:F3 ]", "[ 8/1 → 33/4 | note:Bb3 ]", "[ 8/1 → 33/4 | note:D3 ]", @@ -8712,23 +8512,20 @@ exports[`renders tunes > tune: swimming 1`] = ` "[ 19/2 → 39/4 | note:F3 ]", "[ 19/2 → 39/4 | note:A3 ]", "[ 19/2 → 39/4 | note:C3 ]", - "[ (39/4 → 10/1) ⇝ 41/4 | note:F5 ]", - "[ (39/4 → 10/1) ⇝ 21/2 | note:A2 ]", - "[ 39/4 ⇜ (10/1 → 41/4) | note:F5 ]", + "[ 39/4 → 41/4 | note:F5 ]", + "[ 39/4 → 21/2 | note:A2 ]", "[ 10/1 → 41/4 | note:F3 ]", "[ 10/1 → 41/4 | note:A3 ]", "[ 10/1 → 41/4 | note:C3 ]", - "[ 39/4 ⇜ (10/1 → 21/2) | note:A2 ]", "[ 41/4 → 21/2 | note:C5 ]", "[ 41/4 → 21/2 | note:F3 ]", "[ 41/4 → 21/2 | note:A3 ]", "[ 41/4 → 21/2 | note:C3 ]", "[ 21/2 → 11/1 | note:D5 ]", - "[ (21/2 → 11/1) ⇝ 45/4 | note:Bb2 ]", + "[ 21/2 → 45/4 | note:Bb2 ]", "[ 43/4 → 11/1 | note:F3 ]", "[ 43/4 → 11/1 | note:Bb3 ]", "[ 43/4 → 11/1 | note:D3 ]", - "[ 21/2 ⇜ (11/1 → 45/4) | note:Bb2 ]", "[ 11/1 → 45/4 | note:F5 ]", "[ 11/1 → 45/4 | note:F3 ]", "[ 11/1 → 45/4 | note:Bb3 ]", @@ -8750,24 +8547,20 @@ exports[`renders tunes > tune: swimming 1`] = ` "[ 25/2 → 51/4 | note:A3 ]", "[ 25/2 → 51/4 | note:C4 ]", "[ 25/2 → 51/4 | note:E4 ]", - "[ (51/4 → 13/1) ⇝ 53/4 | note:F5 ]", - "[ (51/4 → 13/1) ⇝ 27/2 | note:Ab2 ]", - "[ 51/4 ⇜ (13/1 → 53/4) | note:F5 ]", + "[ 51/4 → 53/4 | note:F5 ]", + "[ 51/4 → 27/2 | note:Ab2 ]", "[ 13/1 → 53/4 | note:Ab3 ]", "[ 13/1 → 53/4 | note:C4 ]", "[ 13/1 → 53/4 | note:Eb4 ]", - "[ 51/4 ⇜ (13/1 → 27/2) | note:Ab2 ]", "[ 53/4 → 27/2 | note:C6 ]", "[ 53/4 → 27/2 | note:Ab3 ]", "[ 53/4 → 27/2 | note:C4 ]", "[ 53/4 → 27/2 | note:Eb4 ]", - "[ (27/2 → 14/1) ⇝ 57/4 | note:A5 ]", - "[ (27/2 → 14/1) ⇝ 57/4 | note:G2 ]", + "[ 27/2 → 57/4 | note:A5 ]", + "[ 27/2 → 57/4 | note:G2 ]", "[ 55/4 → 14/1 | note:F3 ]", "[ 55/4 → 14/1 | note:Bb3 ]", "[ 55/4 → 14/1 | note:D3 ]", - "[ 27/2 ⇜ (14/1 → 57/4) | note:A5 ]", - "[ 27/2 ⇜ (14/1 → 57/4) | note:G2 ]", "[ 14/1 → 57/4 | note:F3 ]", "[ 14/1 → 57/4 | note:Bb3 ]", "[ 14/1 → 57/4 | note:D3 ]", @@ -8787,23 +8580,20 @@ exports[`renders tunes > tune: swimming 1`] = ` "[ 31/2 → 63/4 | note:F3 ]", "[ 31/2 → 63/4 | note:A3 ]", "[ 31/2 → 63/4 | note:C4 ]", - "[ (63/4 → 16/1) ⇝ 65/4 | note:F5 ]", - "[ (63/4 → 16/1) ⇝ 33/2 | note:A2 ]", - "[ 63/4 ⇜ (16/1 → 65/4) | note:F5 ]", + "[ 63/4 → 65/4 | note:F5 ]", + "[ 63/4 → 33/2 | note:A2 ]", "[ 16/1 → 65/4 | note:F3 ]", "[ 16/1 → 65/4 | note:A3 ]", "[ 16/1 → 65/4 | note:C4 ]", - "[ 63/4 ⇜ (16/1 → 33/2) | note:A2 ]", "[ 65/4 → 33/2 | note:C5 ]", "[ 65/4 → 33/2 | note:F3 ]", "[ 65/4 → 33/2 | note:A3 ]", "[ 65/4 → 33/2 | note:C4 ]", "[ 33/2 → 17/1 | note:D5 ]", - "[ (33/2 → 17/1) ⇝ 69/4 | note:Bb2 ]", + "[ 33/2 → 69/4 | note:Bb2 ]", "[ 67/4 → 17/1 | note:F3 ]", "[ 67/4 → 17/1 | note:Bb3 ]", "[ 67/4 → 17/1 | note:D3 ]", - "[ 33/2 ⇜ (17/1 → 69/4) | note:Bb2 ]", "[ 17/1 → 69/4 | note:F5 ]", "[ 17/1 → 69/4 | note:F3 ]", "[ 17/1 → 69/4 | note:Bb3 ]", @@ -8826,26 +8616,23 @@ exports[`renders tunes > tune: swimming 1`] = ` "[ 37/2 → 75/4 | note:Bb3 ]", "[ 37/2 → 75/4 | note:D4 ]", "[ 75/4 → 19/1 | note:Bb5 ]", - "[ (75/4 → 19/1) ⇝ 39/2 | note:C2 ]", + "[ 75/4 → 39/2 | note:C2 ]", "[ 19/1 → 77/4 | note:A5 ]", "[ 19/1 → 77/4 | note:F3 ]", "[ 19/1 → 77/4 | note:Bb3 ]", "[ 19/1 → 77/4 | note:C4 ]", - "[ 75/4 ⇜ (19/1 → 39/2) | note:C2 ]", "[ 77/4 → 39/2 | note:G5 ]", "[ 77/4 → 39/2 | note:F3 ]", "[ 77/4 → 39/2 | note:Bb3 ]", "[ 77/4 → 39/2 | note:C4 ]", - "[ (39/2 → 20/1) ⇝ 81/4 | note:F2 ]", - "[ (39/2 → 20/1) ⇝ 21/1 | note:F5 ]", + "[ 39/2 → 81/4 | note:F2 ]", + "[ 39/2 → 21/1 | note:F5 ]", "[ 79/4 → 20/1 | note:F3 ]", "[ 79/4 → 20/1 | note:A3 ]", "[ 79/4 → 20/1 | note:C4 ]", - "[ 39/2 ⇜ (20/1 → 81/4) | note:F2 ]", "[ 20/1 → 81/4 | note:F3 ]", "[ 20/1 → 81/4 | note:A3 ]", "[ 20/1 → 81/4 | note:C4 ]", - "[ 39/2 ⇜ (20/1 → 21/1) | note:F5 ]", "[ 81/4 → 21/1 | note:F2 ]", "[ 41/2 → 83/4 | note:F3 ]", "[ 41/2 → 83/4 | note:A3 ]", @@ -8861,23 +8648,20 @@ exports[`renders tunes > tune: swimming 1`] = ` "[ 43/2 → 87/4 | note:F3 ]", "[ 43/2 → 87/4 | note:A3 ]", "[ 43/2 → 87/4 | note:C3 ]", - "[ (87/4 → 22/1) ⇝ 89/4 | note:F5 ]", - "[ (87/4 → 22/1) ⇝ 45/2 | note:A2 ]", - "[ 87/4 ⇜ (22/1 → 89/4) | note:F5 ]", + "[ 87/4 → 89/4 | note:F5 ]", + "[ 87/4 → 45/2 | note:A2 ]", "[ 22/1 → 89/4 | note:F3 ]", "[ 22/1 → 89/4 | note:A3 ]", "[ 22/1 → 89/4 | note:C3 ]", - "[ 87/4 ⇜ (22/1 → 45/2) | note:A2 ]", "[ 89/4 → 45/2 | note:C5 ]", "[ 89/4 → 45/2 | note:F3 ]", "[ 89/4 → 45/2 | note:A3 ]", "[ 89/4 → 45/2 | note:C3 ]", "[ 45/2 → 23/1 | note:D5 ]", - "[ (45/2 → 23/1) ⇝ 93/4 | note:Bb2 ]", + "[ 45/2 → 93/4 | note:Bb2 ]", "[ 91/4 → 23/1 | note:F3 ]", "[ 91/4 → 23/1 | note:Bb3 ]", "[ 91/4 → 23/1 | note:D3 ]", - "[ 45/2 ⇜ (23/1 → 93/4) | note:Bb2 ]", "[ 23/1 → 93/4 | note:F5 ]", "[ 23/1 → 93/4 | note:F3 ]", "[ 23/1 → 93/4 | note:Bb3 ]", @@ -8899,24 +8683,20 @@ exports[`renders tunes > tune: swimming 1`] = ` "[ 49/2 → 99/4 | note:A3 ]", "[ 49/2 → 99/4 | note:C4 ]", "[ 49/2 → 99/4 | note:E4 ]", - "[ (99/4 → 25/1) ⇝ 101/4 | note:F5 ]", - "[ (99/4 → 25/1) ⇝ 51/2 | note:Ab2 ]", - "[ 99/4 ⇜ (25/1 → 101/4) | note:F5 ]", + "[ 99/4 → 101/4 | note:F5 ]", + "[ 99/4 → 51/2 | note:Ab2 ]", "[ 25/1 → 101/4 | note:Ab3 ]", "[ 25/1 → 101/4 | note:C4 ]", "[ 25/1 → 101/4 | note:Eb4 ]", - "[ 99/4 ⇜ (25/1 → 51/2) | note:Ab2 ]", "[ 101/4 → 51/2 | note:C6 ]", "[ 101/4 → 51/2 | note:Ab3 ]", "[ 101/4 → 51/2 | note:C4 ]", "[ 101/4 → 51/2 | note:Eb4 ]", - "[ (51/2 → 26/1) ⇝ 105/4 | note:A5 ]", - "[ (51/2 → 26/1) ⇝ 105/4 | note:G2 ]", + "[ 51/2 → 105/4 | note:A5 ]", + "[ 51/2 → 105/4 | note:G2 ]", "[ 103/4 → 26/1 | note:F3 ]", "[ 103/4 → 26/1 | note:Bb3 ]", "[ 103/4 → 26/1 | note:D3 ]", - "[ 51/2 ⇜ (26/1 → 105/4) | note:A5 ]", - "[ 51/2 ⇜ (26/1 → 105/4) | note:G2 ]", "[ 26/1 → 105/4 | note:F3 ]", "[ 26/1 → 105/4 | note:Bb3 ]", "[ 26/1 → 105/4 | note:D3 ]", @@ -8936,23 +8716,20 @@ exports[`renders tunes > tune: swimming 1`] = ` "[ 55/2 → 111/4 | note:F3 ]", "[ 55/2 → 111/4 | note:A3 ]", "[ 55/2 → 111/4 | note:C3 ]", - "[ (111/4 → 28/1) ⇝ 113/4 | note:F5 ]", - "[ (111/4 → 28/1) ⇝ 57/2 | note:A2 ]", - "[ 111/4 ⇜ (28/1 → 113/4) | note:F5 ]", + "[ 111/4 → 113/4 | note:F5 ]", + "[ 111/4 → 57/2 | note:A2 ]", "[ 28/1 → 113/4 | note:F3 ]", "[ 28/1 → 113/4 | note:A3 ]", "[ 28/1 → 113/4 | note:C3 ]", - "[ 111/4 ⇜ (28/1 → 57/2) | note:A2 ]", "[ 113/4 → 57/2 | note:C5 ]", "[ 113/4 → 57/2 | note:F3 ]", "[ 113/4 → 57/2 | note:A3 ]", "[ 113/4 → 57/2 | note:C3 ]", "[ 57/2 → 29/1 | note:D5 ]", - "[ (57/2 → 29/1) ⇝ 117/4 | note:Bb2 ]", + "[ 57/2 → 117/4 | note:Bb2 ]", "[ 115/4 → 29/1 | note:F3 ]", "[ 115/4 → 29/1 | note:Bb3 ]", "[ 115/4 → 29/1 | note:D3 ]", - "[ 57/2 ⇜ (29/1 → 117/4) | note:Bb2 ]", "[ 29/1 → 117/4 | note:F5 ]", "[ 29/1 → 117/4 | note:F3 ]", "[ 29/1 → 117/4 | note:Bb3 ]", @@ -8975,26 +8752,23 @@ exports[`renders tunes > tune: swimming 1`] = ` "[ 61/2 → 123/4 | note:Bb3 ]", "[ 61/2 → 123/4 | note:D4 ]", "[ 123/4 → 31/1 | note:Bb5 ]", - "[ (123/4 → 31/1) ⇝ 63/2 | note:C2 ]", + "[ 123/4 → 63/2 | note:C2 ]", "[ 31/1 → 125/4 | note:A5 ]", "[ 31/1 → 125/4 | note:F3 ]", "[ 31/1 → 125/4 | note:Bb3 ]", "[ 31/1 → 125/4 | note:C4 ]", - "[ 123/4 ⇜ (31/1 → 63/2) | note:C2 ]", "[ 125/4 → 63/2 | note:G5 ]", "[ 125/4 → 63/2 | note:F3 ]", "[ 125/4 → 63/2 | note:Bb3 ]", "[ 125/4 → 63/2 | note:C4 ]", - "[ (63/2 → 32/1) ⇝ 129/4 | note:F2 ]", - "[ (63/2 → 32/1) ⇝ 33/1 | note:F5 ]", + "[ 63/2 → 129/4 | note:F2 ]", + "[ 63/2 → 33/1 | note:F5 ]", "[ 127/4 → 32/1 | note:F3 ]", "[ 127/4 → 32/1 | note:A3 ]", "[ 127/4 → 32/1 | note:C4 ]", - "[ 63/2 ⇜ (32/1 → 129/4) | note:F2 ]", "[ 32/1 → 129/4 | note:F3 ]", "[ 32/1 → 129/4 | note:A3 ]", "[ 32/1 → 129/4 | note:C4 ]", - "[ 63/2 ⇜ (32/1 → 33/1) | note:F5 ]", "[ 129/4 → 33/1 | note:F2 ]", "[ 65/2 → 131/4 | note:F3 ]", "[ 65/2 → 131/4 | note:A3 ]", @@ -9010,24 +8784,20 @@ exports[`renders tunes > tune: swimming 1`] = ` "[ 67/2 → 135/4 | note:Bb3 ]", "[ 67/2 → 135/4 | note:D3 ]", "[ 67/2 → 135/4 | note:F4 ]", - "[ (135/4 → 34/1) ⇝ 137/4 | note:F5 ]", - "[ (135/4 → 34/1) ⇝ 69/2 | note:Bb2 ]", - "[ 135/4 ⇜ (34/1 → 137/4) | note:F5 ]", + "[ 135/4 → 137/4 | note:F5 ]", + "[ 135/4 → 69/2 | note:Bb2 ]", "[ 34/1 → 137/4 | note:Bb3 ]", "[ 34/1 → 137/4 | note:D3 ]", "[ 34/1 → 137/4 | note:F4 ]", - "[ 135/4 ⇜ (34/1 → 69/2) | note:Bb2 ]", "[ 137/4 → 69/2 | note:C5 ]", "[ 137/4 → 69/2 | note:Bb3 ]", "[ 137/4 → 69/2 | note:D3 ]", "[ 137/4 → 69/2 | note:F4 ]", - "[ (69/2 → 35/1) ⇝ 141/4 | note:A5 ]", - "[ (69/2 → 35/1) ⇝ 141/4 | note:A2 ]", + "[ 69/2 → 141/4 | note:A5 ]", + "[ 69/2 → 141/4 | note:A2 ]", "[ 139/4 → 35/1 | note:A3 ]", "[ 139/4 → 35/1 | note:C4 ]", "[ 139/4 → 35/1 | note:F4 ]", - "[ 69/2 ⇜ (35/1 → 141/4) | note:A5 ]", - "[ 69/2 ⇜ (35/1 → 141/4) | note:A2 ]", "[ 35/1 → 141/4 | note:A3 ]", "[ 35/1 → 141/4 | note:C4 ]", "[ 35/1 → 141/4 | note:F4 ]", @@ -9047,27 +8817,23 @@ exports[`renders tunes > tune: swimming 1`] = ` "[ 73/2 → 147/4 | note:Ab3 ]", "[ 73/2 → 147/4 | note:B3 ]", "[ 73/2 → 147/4 | note:F4 ]", - "[ (147/4 → 37/1) ⇝ 149/4 | note:F5 ]", - "[ (147/4 → 37/1) ⇝ 75/2 | note:Ab2 ]", - "[ 147/4 ⇜ (37/1 → 149/4) | note:F5 ]", + "[ 147/4 → 149/4 | note:F5 ]", + "[ 147/4 → 75/2 | note:Ab2 ]", "[ 37/1 → 149/4 | note:Ab3 ]", "[ 37/1 → 149/4 | note:B3 ]", "[ 37/1 → 149/4 | note:F4 ]", - "[ 147/4 ⇜ (37/1 → 75/2) | note:Ab2 ]", "[ 149/4 → 75/2 | note:Ab5 ]", "[ 149/4 → 75/2 | note:Ab3 ]", "[ 149/4 → 75/2 | note:B3 ]", "[ 149/4 → 75/2 | note:F4 ]", - "[ (75/2 → 38/1) ⇝ 153/4 | note:G2 ]", - "[ (75/2 → 38/1) ⇝ 39/1 | note:G5 ]", + "[ 75/2 → 153/4 | note:G2 ]", + "[ 75/2 → 39/1 | note:G5 ]", "[ 151/4 → 38/1 | note:G3 ]", "[ 151/4 → 38/1 | note:Bb3 ]", "[ 151/4 → 38/1 | note:F4 ]", - "[ 75/2 ⇜ (38/1 → 153/4) | note:G2 ]", "[ 38/1 → 153/4 | note:G3 ]", "[ 38/1 → 153/4 | note:Bb3 ]", "[ 38/1 → 153/4 | note:F4 ]", - "[ 75/2 ⇜ (38/1 → 39/1) | note:G5 ]", "[ 153/4 → 77/2 | note:C2 ]", "[ 77/2 → 155/4 | note:G3 ]", "[ 77/2 → 155/4 | note:Bb3 ]", @@ -9085,24 +8851,20 @@ exports[`renders tunes > tune: swimming 1`] = ` "[ 79/2 → 159/4 | note:Bb3 ]", "[ 79/2 → 159/4 | note:D3 ]", "[ 79/2 → 159/4 | note:F4 ]", - "[ (159/4 → 40/1) ⇝ 161/4 | note:F5 ]", - "[ (159/4 → 40/1) ⇝ 81/2 | note:Bb2 ]", - "[ 159/4 ⇜ (40/1 → 161/4) | note:F5 ]", + "[ 159/4 → 161/4 | note:F5 ]", + "[ 159/4 → 81/2 | note:Bb2 ]", "[ 40/1 → 161/4 | note:Bb3 ]", "[ 40/1 → 161/4 | note:D3 ]", "[ 40/1 → 161/4 | note:F4 ]", - "[ 159/4 ⇜ (40/1 → 81/2) | note:Bb2 ]", "[ 161/4 → 81/2 | note:C5 ]", "[ 161/4 → 81/2 | note:Bb3 ]", "[ 161/4 → 81/2 | note:D3 ]", "[ 161/4 → 81/2 | note:F4 ]", - "[ (81/2 → 41/1) ⇝ 165/4 | note:A5 ]", - "[ (81/2 → 41/1) ⇝ 165/4 | note:A2 ]", + "[ 81/2 → 165/4 | note:A5 ]", + "[ 81/2 → 165/4 | note:A2 ]", "[ 163/4 → 41/1 | note:A3 ]", "[ 163/4 → 41/1 | note:C4 ]", "[ 163/4 → 41/1 | note:F4 ]", - "[ 81/2 ⇜ (41/1 → 165/4) | note:A5 ]", - "[ 81/2 ⇜ (41/1 → 165/4) | note:A2 ]", "[ 41/1 → 165/4 | note:A3 ]", "[ 41/1 → 165/4 | note:C4 ]", "[ 41/1 → 165/4 | note:F4 ]", @@ -9122,27 +8884,23 @@ exports[`renders tunes > tune: swimming 1`] = ` "[ 85/2 → 171/4 | note:Ab3 ]", "[ 85/2 → 171/4 | note:B3 ]", "[ 85/2 → 171/4 | note:F4 ]", - "[ (171/4 → 43/1) ⇝ 173/4 | note:F5 ]", - "[ (171/4 → 43/1) ⇝ 87/2 | note:Ab2 ]", - "[ 171/4 ⇜ (43/1 → 173/4) | note:F5 ]", + "[ 171/4 → 173/4 | note:F5 ]", + "[ 171/4 → 87/2 | note:Ab2 ]", "[ 43/1 → 173/4 | note:Ab3 ]", "[ 43/1 → 173/4 | note:B3 ]", "[ 43/1 → 173/4 | note:F4 ]", - "[ 171/4 ⇜ (43/1 → 87/2) | note:Ab2 ]", "[ 173/4 → 87/2 | note:C5 ]", "[ 173/4 → 87/2 | note:Ab3 ]", "[ 173/4 → 87/2 | note:B3 ]", "[ 173/4 → 87/2 | note:F4 ]", - "[ (87/2 → 44/1) ⇝ 177/4 | note:G2 ]", - "[ (87/2 → 44/1) ⇝ 45/1 | note:C6 ]", + "[ 87/2 → 177/4 | note:G2 ]", + "[ 87/2 → 45/1 | note:C6 ]", "[ 175/4 → 44/1 | note:G3 ]", "[ 175/4 → 44/1 | note:Bb3 ]", "[ 175/4 → 44/1 | note:F4 ]", - "[ 87/2 ⇜ (44/1 → 177/4) | note:G2 ]", "[ 44/1 → 177/4 | note:G3 ]", "[ 44/1 → 177/4 | note:Bb3 ]", "[ 44/1 → 177/4 | note:F4 ]", - "[ 87/2 ⇜ (44/1 → 45/1) | note:C6 ]", "[ 177/4 → 89/2 | note:C2 ]", "[ 89/2 → 179/4 | note:G3 ]", "[ 89/2 → 179/4 | note:Bb3 ]", @@ -9160,23 +8918,20 @@ exports[`renders tunes > tune: swimming 1`] = ` "[ 91/2 → 183/4 | note:F3 ]", "[ 91/2 → 183/4 | note:A3 ]", "[ 91/2 → 183/4 | note:C3 ]", - "[ (183/4 → 46/1) ⇝ 185/4 | note:F5 ]", - "[ (183/4 → 46/1) ⇝ 93/2 | note:A2 ]", - "[ 183/4 ⇜ (46/1 → 185/4) | note:F5 ]", + "[ 183/4 → 185/4 | note:F5 ]", + "[ 183/4 → 93/2 | note:A2 ]", "[ 46/1 → 185/4 | note:F3 ]", "[ 46/1 → 185/4 | note:A3 ]", "[ 46/1 → 185/4 | note:C3 ]", - "[ 183/4 ⇜ (46/1 → 93/2) | note:A2 ]", "[ 185/4 → 93/2 | note:C5 ]", "[ 185/4 → 93/2 | note:F3 ]", "[ 185/4 → 93/2 | note:A3 ]", "[ 185/4 → 93/2 | note:C3 ]", "[ 93/2 → 47/1 | note:D5 ]", - "[ (93/2 → 47/1) ⇝ 189/4 | note:Bb2 ]", + "[ 93/2 → 189/4 | note:Bb2 ]", "[ 187/4 → 47/1 | note:F3 ]", "[ 187/4 → 47/1 | note:Bb3 ]", "[ 187/4 → 47/1 | note:D3 ]", - "[ 93/2 ⇜ (47/1 → 189/4) | note:Bb2 ]", "[ 47/1 → 189/4 | note:F5 ]", "[ 47/1 → 189/4 | note:F3 ]", "[ 47/1 → 189/4 | note:Bb3 ]", @@ -9199,26 +8954,23 @@ exports[`renders tunes > tune: swimming 1`] = ` "[ 97/2 → 195/4 | note:Bb3 ]", "[ 97/2 → 195/4 | note:D4 ]", "[ 195/4 → 49/1 | note:Bb5 ]", - "[ (195/4 → 49/1) ⇝ 99/2 | note:C2 ]", + "[ 195/4 → 99/2 | note:C2 ]", "[ 49/1 → 197/4 | note:A5 ]", "[ 49/1 → 197/4 | note:F3 ]", "[ 49/1 → 197/4 | note:Bb3 ]", "[ 49/1 → 197/4 | note:C4 ]", - "[ 195/4 ⇜ (49/1 → 99/2) | note:C2 ]", "[ 197/4 → 99/2 | note:G5 ]", "[ 197/4 → 99/2 | note:F3 ]", "[ 197/4 → 99/2 | note:Bb3 ]", "[ 197/4 → 99/2 | note:C4 ]", - "[ (99/2 → 50/1) ⇝ 201/4 | note:F2 ]", - "[ (99/2 → 50/1) ⇝ 51/1 | note:F5 ]", + "[ 99/2 → 201/4 | note:F2 ]", + "[ 99/2 → 51/1 | note:F5 ]", "[ 199/4 → 50/1 | note:F3 ]", "[ 199/4 → 50/1 | note:A3 ]", "[ 199/4 → 50/1 | note:C4 ]", - "[ 99/2 ⇜ (50/1 → 201/4) | note:F2 ]", "[ 50/1 → 201/4 | note:F3 ]", "[ 50/1 → 201/4 | note:A3 ]", "[ 50/1 → 201/4 | note:C4 ]", - "[ 99/2 ⇜ (50/1 → 51/1) | note:F5 ]", "[ 201/4 → 51/1 | note:F2 ]", "[ 101/2 → 203/4 | note:F3 ]", "[ 101/2 → 203/4 | note:A3 ]", @@ -9240,35 +8992,24 @@ exports[`renders tunes > tune: undergroundPlumber 1`] = ` "[ (0/1 → 3/8) ⇝ 3/4 | gain:0.16000000000000003 note:Eb5 clip:0.1 ]", "[ -9/16 ⇜ (0/1 → 9/16) ⇝ 15/16 | gain:0.06400000000000002 note:G5 clip:0.1 ]", "[ 0/1 → 3/4 | gain:1 note:C3 clip:0.1 ]", - "[ (0/1 → 1/1) ⇝ 3/2 | gain:1 note:G2 clip:0.1 ]", + "[ 0/1 → 3/2 | gain:1 note:G2 clip:0.1 ]", "[ 3/16 → 3/8 | s:bd gain:0.7 ]", "[ 3/16 → 9/16 | gain:1 note:C2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", "[ (3/16 → 9/16) ⇝ 15/16 | gain:0.06400000000000002 note:Eb6 clip:0.1 ]", "[ 3/16 → 15/16 | gain:0.4 note:C4 clip:0.1 ]", - "[ (3/16 → 1/1) ⇝ 27/16 | gain:0.4 note:G3 clip:0.1 ]", + "[ (3/16 → 3/2) ⇝ 27/16 | gain:0.4 note:G3 clip:0.1 ]", "[ 3/8 → 3/4 | s:hh gain:0.7 ]", "[ 3/8 → 3/4 | gain:1 note:A1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (3/8 → 1/1) ⇝ 9/8 | gain:0.16000000000000003 note:C5 clip:0.1 ]", - "[ (3/8 → 1/1) ⇝ 15/8 | gain:0.16000000000000003 note:G4 clip:0.1 ]", + "[ 3/8 → 9/8 | gain:0.16000000000000003 note:C5 clip:0.1 ]", + "[ (3/8 → 3/2) ⇝ 15/8 | gain:0.16000000000000003 note:G4 clip:0.1 ]", "[ 9/16 → 15/16 | gain:1 note:A1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (9/16 → 1/1) ⇝ 21/16 | gain:0.06400000000000002 note:C6 clip:0.1 ]", - "[ (9/16 → 1/1) ⇝ 33/16 | gain:0.06400000000000002 note:G5 clip:0.1 ]", - "[ (3/4 → 1/1) ⇝ 9/8 | s:sn gain:0.7 ]", - "[ (3/4 → 1/1) ⇝ 9/8 | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (3/4 → 1/1) ⇝ 3/2 | gain:1 note:Eb3 clip:0.1 ]", - "[ (15/16 → 1/1) ⇝ 21/16 | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (15/16 → 1/1) ⇝ 27/16 | gain:0.4 note:Eb4 clip:0.1 ]", - "[ 3/8 ⇜ (1/1 → 9/8) | gain:0.16000000000000003 note:C5 clip:0.1 ]", - "[ 3/4 ⇜ (1/1 → 9/8) | s:sn gain:0.7 ]", - "[ 3/4 ⇜ (1/1 → 9/8) | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 9/16 ⇜ (1/1 → 21/16) | gain:0.06400000000000002 note:C6 clip:0.1 ]", - "[ 15/16 ⇜ (1/1 → 21/16) | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 0/1 ⇜ (1/1 → 3/2) | gain:1 note:G2 clip:0.1 ]", - "[ 3/16 ⇜ (1/1 → 3/2) ⇝ 27/16 | gain:0.4 note:G3 clip:0.1 ]", - "[ 3/8 ⇜ (1/1 → 3/2) ⇝ 15/8 | gain:0.16000000000000003 note:G4 clip:0.1 ]", - "[ 9/16 ⇜ (1/1 → 3/2) ⇝ 33/16 | gain:0.06400000000000002 note:G5 clip:0.1 ]", - "[ 3/4 ⇜ (1/1 → 3/2) | gain:1 note:Eb3 clip:0.1 ]", - "[ 15/16 ⇜ (1/1 → 3/2) ⇝ 27/16 | gain:0.4 note:Eb4 clip:0.1 ]", + "[ 9/16 → 21/16 | gain:0.06400000000000002 note:C6 clip:0.1 ]", + "[ (9/16 → 3/2) ⇝ 33/16 | gain:0.06400000000000002 note:G5 clip:0.1 ]", + "[ 3/4 → 9/8 | s:sn gain:0.7 ]", + "[ 3/4 → 9/8 | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", + "[ 3/4 → 3/2 | gain:1 note:Eb3 clip:0.1 ]", + "[ 15/16 → 21/16 | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", + "[ (15/16 → 3/2) ⇝ 27/16 | gain:0.4 note:Eb4 clip:0.1 ]", "[ 9/8 → 3/2 | s:hh gain:0.7 ]", "[ (9/8 → 3/2) ⇝ 15/8 | gain:0.16000000000000003 note:Eb5 clip:0.1 ]", "[ (21/16 → 3/2) ⇝ 33/16 | gain:0.06400000000000002 note:Eb6 clip:0.1 ]", @@ -9278,24 +9019,15 @@ exports[`renders tunes > tune: undergroundPlumber 1`] = ` "[ 9/8 ⇜ (3/2 → 15/8) | gain:1 note:C3 clip:0.1 ]", "[ 9/8 ⇜ (3/2 → 15/8) | gain:0.16000000000000003 note:Eb5 clip:0.1 ]", "[ 3/2 → 15/8 | s:bd gain:0.7 ]", - "[ 9/16 ⇜ (3/2 → 2/1) ⇝ 33/16 | gain:0.06400000000000002 note:G5 clip:0.1 ]", - "[ 9/8 ⇜ (3/2 → 2/1) ⇝ 21/8 | gain:1 note:G2 clip:0.1 ]", - "[ 21/16 ⇜ (3/2 → 2/1) ⇝ 33/16 | gain:0.06400000000000002 note:Eb6 clip:0.1 ]", - "[ 21/16 ⇜ (27/16 → 2/1) ⇝ 33/16 | gain:0.4 note:C4 clip:0.1 ]", - "[ 21/16 ⇜ (27/16 → 2/1) ⇝ 45/16 | gain:0.4 note:G3 clip:0.1 ]", - "[ 3/2 ⇜ (15/8 → 2/1) ⇝ 9/4 | gain:0.16000000000000003 note:C5 clip:0.1 ]", - "[ 3/2 ⇜ (15/8 → 2/1) ⇝ 3/1 | gain:0.16000000000000003 note:G4 clip:0.1 ]", - "[ (15/8 → 2/1) ⇝ 9/4 | s:hh gain:0.7 ]", - "[ (15/8 → 2/1) ⇝ 21/8 | gain:1 note:Eb3 clip:0.1 ]", - "[ 9/16 ⇜ (2/1 → 33/16) | gain:0.06400000000000002 note:G5 clip:0.1 ]", - "[ 21/16 ⇜ (2/1 → 33/16) | gain:0.4 note:C4 clip:0.1 ]", - "[ 21/16 ⇜ (2/1 → 33/16) | gain:0.06400000000000002 note:Eb6 clip:0.1 ]", - "[ 3/2 ⇜ (2/1 → 9/4) | gain:0.16000000000000003 note:C5 clip:0.1 ]", - "[ 15/8 ⇜ (2/1 → 9/4) | s:hh gain:0.7 ]", - "[ 9/8 ⇜ (2/1 → 21/8) | gain:1 note:G2 clip:0.1 ]", - "[ 15/8 ⇜ (2/1 → 21/8) | gain:1 note:Eb3 clip:0.1 ]", - "[ 21/16 ⇜ (2/1 → 45/16) | gain:0.4 note:G3 clip:0.1 ]", - "[ 3/2 ⇜ (2/1 → 3/1) | gain:0.16000000000000003 note:G4 clip:0.1 ]", + "[ 9/16 ⇜ (3/2 → 33/16) | gain:0.06400000000000002 note:G5 clip:0.1 ]", + "[ 21/16 ⇜ (3/2 → 33/16) | gain:0.06400000000000002 note:Eb6 clip:0.1 ]", + "[ 9/8 ⇜ (3/2 → 21/8) | gain:1 note:G2 clip:0.1 ]", + "[ 21/16 ⇜ (27/16 → 33/16) | gain:0.4 note:C4 clip:0.1 ]", + "[ 21/16 ⇜ (27/16 → 45/16) | gain:0.4 note:G3 clip:0.1 ]", + "[ 3/2 ⇜ (15/8 → 9/4) | gain:0.16000000000000003 note:C5 clip:0.1 ]", + "[ 15/8 → 9/4 | s:hh gain:0.7 ]", + "[ 15/8 → 21/8 | gain:1 note:Eb3 clip:0.1 ]", + "[ 3/2 ⇜ (15/8 → 3/1) | gain:0.16000000000000003 note:G4 clip:0.1 ]", "[ 27/16 ⇜ (33/16 → 39/16) | gain:0.06400000000000002 note:C6 clip:0.1 ]", "[ 33/16 → 45/16 | gain:0.4 note:Eb4 clip:0.1 ]", "[ 27/16 ⇜ (33/16 → 3/1) ⇝ 51/16 | gain:0.06400000000000002 note:G5 clip:0.1 ]", @@ -9325,29 +9057,18 @@ exports[`renders tunes > tune: undergroundPlumber 1`] = ` "[ 51/16 → 63/16 | gain:0.4 note:Eb4 clip:0.1 ]", "[ 27/8 → 15/4 | s:hh gain:0.7 ]", "[ 27/8 → 15/4 | gain:1 note:A1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 21/8 ⇜ (27/8 → 4/1) ⇝ 33/8 | gain:0.16000000000000003 note:G4 clip:0.1 ]", - "[ (27/8 → 4/1) ⇝ 33/8 | gain:0.16000000000000003 note:Eb5 clip:0.1 ]", + "[ 21/8 ⇜ (27/8 → 33/8) | gain:0.16000000000000003 note:G4 clip:0.1 ]", + "[ 27/8 → 33/8 | gain:0.16000000000000003 note:Eb5 clip:0.1 ]", "[ 57/16 → 63/16 | gain:1 note:A1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 45/16 ⇜ (57/16 → 4/1) ⇝ 69/16 | gain:0.06400000000000002 note:G5 clip:0.1 ]", - "[ (57/16 → 4/1) ⇝ 69/16 | gain:0.06400000000000002 note:Eb6 clip:0.1 ]", - "[ (15/4 → 4/1) ⇝ 33/8 | s:sn gain:0.7 ]", - "[ (15/4 → 4/1) ⇝ 33/8 | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (15/4 → 4/1) ⇝ 9/2 | gain:1 note:C3 clip:0.1 ]", - "[ (15/4 → 4/1) ⇝ 21/4 | gain:1 note:G2 clip:0.1 ]", - "[ (63/16 → 4/1) ⇝ 69/16 | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (63/16 → 4/1) ⇝ 75/16 | gain:0.4 note:C4 clip:0.1 ]", - "[ (63/16 → 4/1) ⇝ 87/16 | gain:0.4 note:G3 clip:0.1 ]", - "[ 21/8 ⇜ (4/1 → 33/8) | gain:0.16000000000000003 note:G4 clip:0.1 ]", - "[ 27/8 ⇜ (4/1 → 33/8) | gain:0.16000000000000003 note:Eb5 clip:0.1 ]", - "[ 15/4 ⇜ (4/1 → 33/8) | s:sn gain:0.7 ]", - "[ 15/4 ⇜ (4/1 → 33/8) | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 45/16 ⇜ (4/1 → 69/16) | gain:0.06400000000000002 note:G5 clip:0.1 ]", - "[ 57/16 ⇜ (4/1 → 69/16) | gain:0.06400000000000002 note:Eb6 clip:0.1 ]", - "[ 63/16 ⇜ (4/1 → 69/16) | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 15/4 ⇜ (4/1 → 9/2) | gain:1 note:C3 clip:0.1 ]", - "[ 15/4 ⇜ (4/1 → 9/2) ⇝ 21/4 | gain:1 note:G2 clip:0.1 ]", - "[ 63/16 ⇜ (4/1 → 9/2) ⇝ 75/16 | gain:0.4 note:C4 clip:0.1 ]", - "[ 63/16 ⇜ (4/1 → 9/2) ⇝ 87/16 | gain:0.4 note:G3 clip:0.1 ]", + "[ 45/16 ⇜ (57/16 → 69/16) | gain:0.06400000000000002 note:G5 clip:0.1 ]", + "[ 57/16 → 69/16 | gain:0.06400000000000002 note:Eb6 clip:0.1 ]", + "[ 15/4 → 33/8 | s:sn gain:0.7 ]", + "[ 15/4 → 33/8 | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", + "[ 15/4 → 9/2 | gain:1 note:C3 clip:0.1 ]", + "[ (15/4 → 9/2) ⇝ 21/4 | gain:1 note:G2 clip:0.1 ]", + "[ 63/16 → 69/16 | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", + "[ (63/16 → 9/2) ⇝ 75/16 | gain:0.4 note:C4 clip:0.1 ]", + "[ (63/16 → 9/2) ⇝ 87/16 | gain:0.4 note:G3 clip:0.1 ]", "[ 33/8 → 9/2 | s:hh gain:0.7 ]", "[ (33/8 → 9/2) ⇝ 39/8 | gain:0.16000000000000003 note:C5 clip:0.1 ]", "[ (33/8 → 9/2) ⇝ 45/8 | gain:0.16000000000000003 note:G4 clip:0.1 ]", @@ -9360,24 +9081,15 @@ exports[`renders tunes > tune: undergroundPlumber 1`] = ` "[ 33/8 ⇜ (9/2 → 39/8) | gain:0.16000000000000003 note:C5 clip:0.1 ]", "[ 33/8 ⇜ (9/2 → 39/8) ⇝ 45/8 | gain:0.16000000000000003 note:G4 clip:0.1 ]", "[ 9/2 → 39/8 | s:bd gain:0.7 ]", - "[ 69/16 ⇜ (9/2 → 5/1) ⇝ 81/16 | gain:0.06400000000000002 note:C6 clip:0.1 ]", - "[ 69/16 ⇜ (9/2 → 5/1) ⇝ 93/16 | gain:0.06400000000000002 note:G5 clip:0.1 ]", - "[ 57/16 ⇜ (75/16 → 5/1) ⇝ 81/16 | gain:0.4 note:G3 clip:0.1 ]", - "[ 69/16 ⇜ (75/16 → 5/1) ⇝ 81/16 | gain:0.4 note:Eb4 clip:0.1 ]", - "[ 15/4 ⇜ (39/8 → 5/1) ⇝ 21/4 | gain:0.16000000000000003 note:G4 clip:0.1 ]", - "[ 9/2 ⇜ (39/8 → 5/1) ⇝ 21/4 | gain:0.16000000000000003 note:Eb5 clip:0.1 ]", - "[ (39/8 → 5/1) ⇝ 21/4 | s:hh gain:0.7 ]", - "[ (39/8 → 5/1) ⇝ 45/8 | gain:1 note:C3 clip:0.1 ]", - "[ (39/8 → 5/1) ⇝ 51/8 | gain:1 note:G2 clip:0.1 ]", - "[ 57/16 ⇜ (5/1 → 81/16) | gain:0.4 note:G3 clip:0.1 ]", - "[ 69/16 ⇜ (5/1 → 81/16) | gain:0.4 note:Eb4 clip:0.1 ]", - "[ 69/16 ⇜ (5/1 → 81/16) | gain:0.06400000000000002 note:C6 clip:0.1 ]", - "[ 69/16 ⇜ (5/1 → 81/16) ⇝ 93/16 | gain:0.06400000000000002 note:G5 clip:0.1 ]", - "[ 15/4 ⇜ (5/1 → 21/4) | gain:0.16000000000000003 note:G4 clip:0.1 ]", - "[ 9/2 ⇜ (5/1 → 21/4) | gain:0.16000000000000003 note:Eb5 clip:0.1 ]", - "[ 39/8 ⇜ (5/1 → 21/4) | s:hh gain:0.7 ]", - "[ 39/8 ⇜ (5/1 → 45/8) | gain:1 note:C3 clip:0.1 ]", - "[ 39/8 ⇜ (5/1 → 6/1) ⇝ 51/8 | gain:1 note:G2 clip:0.1 ]", + "[ 69/16 ⇜ (9/2 → 81/16) | gain:0.06400000000000002 note:C6 clip:0.1 ]", + "[ 69/16 ⇜ (9/2 → 81/16) ⇝ 93/16 | gain:0.06400000000000002 note:G5 clip:0.1 ]", + "[ 57/16 ⇜ (75/16 → 81/16) | gain:0.4 note:G3 clip:0.1 ]", + "[ 69/16 ⇜ (75/16 → 81/16) | gain:0.4 note:Eb4 clip:0.1 ]", + "[ 15/4 ⇜ (39/8 → 21/4) | gain:0.16000000000000003 note:G4 clip:0.1 ]", + "[ 9/2 ⇜ (39/8 → 21/4) | gain:0.16000000000000003 note:Eb5 clip:0.1 ]", + "[ 39/8 → 21/4 | s:hh gain:0.7 ]", + "[ 39/8 → 45/8 | gain:1 note:C3 clip:0.1 ]", + "[ (39/8 → 6/1) ⇝ 51/8 | gain:1 note:G2 clip:0.1 ]", "[ 63/16 ⇜ (81/16 → 87/16) | gain:0.06400000000000002 note:G5 clip:0.1 ]", "[ 75/16 ⇜ (81/16 → 87/16) | gain:0.06400000000000002 note:Eb6 clip:0.1 ]", "[ 81/16 → 93/16 | gain:0.4 note:C4 clip:0.1 ]", @@ -9399,35 +9111,24 @@ exports[`renders tunes > tune: undergroundPlumber 1`] = ` "[ (6/1 → 51/8) ⇝ 27/4 | gain:0.16000000000000003 note:Ab5 clip:0.1 ]", "[ 87/16 ⇜ (6/1 → 105/16) ⇝ 111/16 | gain:0.06400000000000002 note:C6 clip:0.1 ]", "[ 6/1 → 27/4 | gain:1 note:F3 clip:0.1 ]", - "[ (6/1 → 7/1) ⇝ 15/2 | gain:1 note:C3 clip:0.1 ]", + "[ 6/1 → 15/2 | gain:1 note:C3 clip:0.1 ]", "[ 99/16 → 51/8 | s:bd gain:0.7 ]", "[ 99/16 → 105/16 | gain:1 note:F2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", "[ (99/16 → 105/16) ⇝ 111/16 | gain:0.06400000000000002 note:Ab6 clip:0.1 ]", "[ 99/16 → 111/16 | gain:0.4 note:F4 clip:0.1 ]", - "[ (99/16 → 7/1) ⇝ 123/16 | gain:0.4 note:C4 clip:0.1 ]", + "[ (99/16 → 15/2) ⇝ 123/16 | gain:0.4 note:C4 clip:0.1 ]", "[ 51/8 → 27/4 | s:hh gain:0.7 ]", "[ 51/8 → 27/4 | gain:1 note:D2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (51/8 → 7/1) ⇝ 57/8 | gain:0.16000000000000003 note:F5 clip:0.1 ]", - "[ (51/8 → 7/1) ⇝ 63/8 | gain:0.16000000000000003 note:C5 clip:0.1 ]", + "[ 51/8 → 57/8 | gain:0.16000000000000003 note:F5 clip:0.1 ]", + "[ (51/8 → 15/2) ⇝ 63/8 | gain:0.16000000000000003 note:C5 clip:0.1 ]", "[ 105/16 → 111/16 | gain:1 note:D2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (105/16 → 7/1) ⇝ 117/16 | gain:0.06400000000000002 note:F6 clip:0.1 ]", - "[ (105/16 → 7/1) ⇝ 129/16 | gain:0.06400000000000002 note:C6 clip:0.1 ]", - "[ (27/4 → 7/1) ⇝ 57/8 | s:sn gain:0.7 ]", - "[ (27/4 → 7/1) ⇝ 57/8 | gain:1 note:Eb2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (27/4 → 7/1) ⇝ 15/2 | gain:1 note:Ab3 clip:0.1 ]", - "[ (111/16 → 7/1) ⇝ 117/16 | gain:1 note:Eb2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (111/16 → 7/1) ⇝ 123/16 | gain:0.4 note:Ab4 clip:0.1 ]", - "[ 51/8 ⇜ (7/1 → 57/8) | gain:0.16000000000000003 note:F5 clip:0.1 ]", - "[ 27/4 ⇜ (7/1 → 57/8) | s:sn gain:0.7 ]", - "[ 27/4 ⇜ (7/1 → 57/8) | gain:1 note:Eb2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 105/16 ⇜ (7/1 → 117/16) | gain:0.06400000000000002 note:F6 clip:0.1 ]", - "[ 111/16 ⇜ (7/1 → 117/16) | gain:1 note:Eb2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 6/1 ⇜ (7/1 → 15/2) | gain:1 note:C3 clip:0.1 ]", - "[ 99/16 ⇜ (7/1 → 15/2) ⇝ 123/16 | gain:0.4 note:C4 clip:0.1 ]", - "[ 51/8 ⇜ (7/1 → 15/2) ⇝ 63/8 | gain:0.16000000000000003 note:C5 clip:0.1 ]", - "[ 105/16 ⇜ (7/1 → 15/2) ⇝ 129/16 | gain:0.06400000000000002 note:C6 clip:0.1 ]", - "[ 27/4 ⇜ (7/1 → 15/2) | gain:1 note:Ab3 clip:0.1 ]", - "[ 111/16 ⇜ (7/1 → 15/2) ⇝ 123/16 | gain:0.4 note:Ab4 clip:0.1 ]", + "[ 105/16 → 117/16 | gain:0.06400000000000002 note:F6 clip:0.1 ]", + "[ (105/16 → 15/2) ⇝ 129/16 | gain:0.06400000000000002 note:C6 clip:0.1 ]", + "[ 27/4 → 57/8 | s:sn gain:0.7 ]", + "[ 27/4 → 57/8 | gain:1 note:Eb2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", + "[ 27/4 → 15/2 | gain:1 note:Ab3 clip:0.1 ]", + "[ 111/16 → 117/16 | gain:1 note:Eb2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", + "[ (111/16 → 15/2) ⇝ 123/16 | gain:0.4 note:Ab4 clip:0.1 ]", "[ 57/8 → 15/2 | s:hh gain:0.7 ]", "[ (57/8 → 15/2) ⇝ 63/8 | gain:0.16000000000000003 note:Ab5 clip:0.1 ]", "[ (117/16 → 15/2) ⇝ 129/16 | gain:0.06400000000000002 note:Ab6 clip:0.1 ]", @@ -9437,24 +9138,15 @@ exports[`renders tunes > tune: undergroundPlumber 1`] = ` "[ 57/8 ⇜ (15/2 → 63/8) | gain:1 note:F3 clip:0.1 ]", "[ 57/8 ⇜ (15/2 → 63/8) | gain:0.16000000000000003 note:Ab5 clip:0.1 ]", "[ 15/2 → 63/8 | s:bd gain:0.7 ]", - "[ 105/16 ⇜ (15/2 → 8/1) ⇝ 129/16 | gain:0.06400000000000002 note:C6 clip:0.1 ]", - "[ 57/8 ⇜ (15/2 → 8/1) ⇝ 69/8 | gain:1 note:C3 clip:0.1 ]", - "[ 117/16 ⇜ (15/2 → 8/1) ⇝ 129/16 | gain:0.06400000000000002 note:Ab6 clip:0.1 ]", - "[ 117/16 ⇜ (123/16 → 8/1) ⇝ 129/16 | gain:0.4 note:F4 clip:0.1 ]", - "[ 117/16 ⇜ (123/16 → 8/1) ⇝ 141/16 | gain:0.4 note:C4 clip:0.1 ]", - "[ 15/2 ⇜ (63/8 → 8/1) ⇝ 33/4 | gain:0.16000000000000003 note:F5 clip:0.1 ]", - "[ 15/2 ⇜ (63/8 → 8/1) ⇝ 9/1 | gain:0.16000000000000003 note:C5 clip:0.1 ]", - "[ (63/8 → 8/1) ⇝ 33/4 | s:hh gain:0.7 ]", - "[ (63/8 → 8/1) ⇝ 69/8 | gain:1 note:Ab3 clip:0.1 ]", - "[ 105/16 ⇜ (8/1 → 129/16) | gain:0.06400000000000002 note:C6 clip:0.1 ]", - "[ 117/16 ⇜ (8/1 → 129/16) | gain:0.4 note:F4 clip:0.1 ]", - "[ 117/16 ⇜ (8/1 → 129/16) | gain:0.06400000000000002 note:Ab6 clip:0.1 ]", - "[ 15/2 ⇜ (8/1 → 33/4) | gain:0.16000000000000003 note:F5 clip:0.1 ]", - "[ 63/8 ⇜ (8/1 → 33/4) | s:hh gain:0.7 ]", - "[ 57/8 ⇜ (8/1 → 69/8) | gain:1 note:C3 clip:0.1 ]", - "[ 63/8 ⇜ (8/1 → 69/8) | gain:1 note:Ab3 clip:0.1 ]", - "[ 117/16 ⇜ (8/1 → 141/16) | gain:0.4 note:C4 clip:0.1 ]", - "[ 15/2 ⇜ (8/1 → 9/1) | gain:0.16000000000000003 note:C5 clip:0.1 ]", + "[ 105/16 ⇜ (15/2 → 129/16) | gain:0.06400000000000002 note:C6 clip:0.1 ]", + "[ 117/16 ⇜ (15/2 → 129/16) | gain:0.06400000000000002 note:Ab6 clip:0.1 ]", + "[ 57/8 ⇜ (15/2 → 69/8) | gain:1 note:C3 clip:0.1 ]", + "[ 117/16 ⇜ (123/16 → 129/16) | gain:0.4 note:F4 clip:0.1 ]", + "[ 117/16 ⇜ (123/16 → 141/16) | gain:0.4 note:C4 clip:0.1 ]", + "[ 15/2 ⇜ (63/8 → 33/4) | gain:0.16000000000000003 note:F5 clip:0.1 ]", + "[ 63/8 → 33/4 | s:hh gain:0.7 ]", + "[ 63/8 → 69/8 | gain:1 note:Ab3 clip:0.1 ]", + "[ 15/2 ⇜ (63/8 → 9/1) | gain:0.16000000000000003 note:C5 clip:0.1 ]", "[ 123/16 ⇜ (129/16 → 135/16) | gain:0.06400000000000002 note:F6 clip:0.1 ]", "[ 129/16 → 141/16 | gain:0.4 note:Ab4 clip:0.1 ]", "[ 123/16 ⇜ (129/16 → 9/1) ⇝ 147/16 | gain:0.06400000000000002 note:C6 clip:0.1 ]", @@ -9484,29 +9176,18 @@ exports[`renders tunes > tune: undergroundPlumber 1`] = ` "[ 147/16 → 159/16 | gain:0.4 note:Eb4 clip:0.1 ]", "[ 75/8 → 39/4 | s:hh gain:0.7 ]", "[ 75/8 → 39/4 | gain:1 note:A1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 69/8 ⇜ (75/8 → 10/1) ⇝ 81/8 | gain:0.16000000000000003 note:G4 clip:0.1 ]", - "[ (75/8 → 10/1) ⇝ 81/8 | gain:0.16000000000000003 note:Eb5 clip:0.1 ]", + "[ 69/8 ⇜ (75/8 → 81/8) | gain:0.16000000000000003 note:G4 clip:0.1 ]", + "[ 75/8 → 81/8 | gain:0.16000000000000003 note:Eb5 clip:0.1 ]", "[ 153/16 → 159/16 | gain:1 note:A1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 141/16 ⇜ (153/16 → 10/1) ⇝ 165/16 | gain:0.06400000000000002 note:G5 clip:0.1 ]", - "[ (153/16 → 10/1) ⇝ 165/16 | gain:0.06400000000000002 note:Eb6 clip:0.1 ]", - "[ (39/4 → 10/1) ⇝ 81/8 | s:sn gain:0.7 ]", - "[ (39/4 → 10/1) ⇝ 81/8 | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (39/4 → 10/1) ⇝ 21/2 | gain:1 note:C3 clip:0.1 ]", - "[ (39/4 → 10/1) ⇝ 45/4 | gain:1 note:G2 clip:0.1 ]", - "[ (159/16 → 10/1) ⇝ 165/16 | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (159/16 → 10/1) ⇝ 171/16 | gain:0.4 note:C4 clip:0.1 ]", - "[ (159/16 → 10/1) ⇝ 183/16 | gain:0.4 note:G3 clip:0.1 ]", - "[ 69/8 ⇜ (10/1 → 81/8) | gain:0.16000000000000003 note:G4 clip:0.1 ]", - "[ 75/8 ⇜ (10/1 → 81/8) | gain:0.16000000000000003 note:Eb5 clip:0.1 ]", - "[ 39/4 ⇜ (10/1 → 81/8) | s:sn gain:0.7 ]", - "[ 39/4 ⇜ (10/1 → 81/8) | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 141/16 ⇜ (10/1 → 165/16) | gain:0.06400000000000002 note:G5 clip:0.1 ]", - "[ 153/16 ⇜ (10/1 → 165/16) | gain:0.06400000000000002 note:Eb6 clip:0.1 ]", - "[ 159/16 ⇜ (10/1 → 165/16) | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 39/4 ⇜ (10/1 → 21/2) | gain:1 note:C3 clip:0.1 ]", - "[ 39/4 ⇜ (10/1 → 21/2) ⇝ 45/4 | gain:1 note:G2 clip:0.1 ]", - "[ 159/16 ⇜ (10/1 → 21/2) ⇝ 171/16 | gain:0.4 note:C4 clip:0.1 ]", - "[ 159/16 ⇜ (10/1 → 21/2) ⇝ 183/16 | gain:0.4 note:G3 clip:0.1 ]", + "[ 141/16 ⇜ (153/16 → 165/16) | gain:0.06400000000000002 note:G5 clip:0.1 ]", + "[ 153/16 → 165/16 | gain:0.06400000000000002 note:Eb6 clip:0.1 ]", + "[ 39/4 → 81/8 | s:sn gain:0.7 ]", + "[ 39/4 → 81/8 | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", + "[ 39/4 → 21/2 | gain:1 note:C3 clip:0.1 ]", + "[ (39/4 → 21/2) ⇝ 45/4 | gain:1 note:G2 clip:0.1 ]", + "[ 159/16 → 165/16 | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", + "[ (159/16 → 21/2) ⇝ 171/16 | gain:0.4 note:C4 clip:0.1 ]", + "[ (159/16 → 21/2) ⇝ 183/16 | gain:0.4 note:G3 clip:0.1 ]", "[ 81/8 → 21/2 | s:hh gain:0.7 ]", "[ (81/8 → 21/2) ⇝ 87/8 | gain:0.16000000000000003 note:C5 clip:0.1 ]", "[ (81/8 → 21/2) ⇝ 93/8 | gain:0.16000000000000003 note:G4 clip:0.1 ]", @@ -9519,24 +9200,15 @@ exports[`renders tunes > tune: undergroundPlumber 1`] = ` "[ 81/8 ⇜ (21/2 → 87/8) | gain:0.16000000000000003 note:C5 clip:0.1 ]", "[ 81/8 ⇜ (21/2 → 87/8) ⇝ 93/8 | gain:0.16000000000000003 note:G4 clip:0.1 ]", "[ 21/2 → 87/8 | s:bd gain:0.7 ]", - "[ 165/16 ⇜ (21/2 → 11/1) ⇝ 177/16 | gain:0.06400000000000002 note:C6 clip:0.1 ]", - "[ 165/16 ⇜ (21/2 → 11/1) ⇝ 189/16 | gain:0.06400000000000002 note:G5 clip:0.1 ]", - "[ 153/16 ⇜ (171/16 → 11/1) ⇝ 177/16 | gain:0.4 note:G3 clip:0.1 ]", - "[ 165/16 ⇜ (171/16 → 11/1) ⇝ 177/16 | gain:0.4 note:Eb4 clip:0.1 ]", - "[ 39/4 ⇜ (87/8 → 11/1) ⇝ 45/4 | gain:0.16000000000000003 note:G4 clip:0.1 ]", - "[ 21/2 ⇜ (87/8 → 11/1) ⇝ 45/4 | gain:0.16000000000000003 note:Eb5 clip:0.1 ]", - "[ (87/8 → 11/1) ⇝ 45/4 | s:hh gain:0.7 ]", - "[ (87/8 → 11/1) ⇝ 93/8 | gain:1 note:C3 clip:0.1 ]", - "[ (87/8 → 11/1) ⇝ 99/8 | gain:1 note:G2 clip:0.1 ]", - "[ 153/16 ⇜ (11/1 → 177/16) | gain:0.4 note:G3 clip:0.1 ]", - "[ 165/16 ⇜ (11/1 → 177/16) | gain:0.4 note:Eb4 clip:0.1 ]", - "[ 165/16 ⇜ (11/1 → 177/16) | gain:0.06400000000000002 note:C6 clip:0.1 ]", - "[ 165/16 ⇜ (11/1 → 177/16) ⇝ 189/16 | gain:0.06400000000000002 note:G5 clip:0.1 ]", - "[ 39/4 ⇜ (11/1 → 45/4) | gain:0.16000000000000003 note:G4 clip:0.1 ]", - "[ 21/2 ⇜ (11/1 → 45/4) | gain:0.16000000000000003 note:Eb5 clip:0.1 ]", - "[ 87/8 ⇜ (11/1 → 45/4) | s:hh gain:0.7 ]", - "[ 87/8 ⇜ (11/1 → 93/8) | gain:1 note:C3 clip:0.1 ]", - "[ 87/8 ⇜ (11/1 → 12/1) ⇝ 99/8 | gain:1 note:G2 clip:0.1 ]", + "[ 165/16 ⇜ (21/2 → 177/16) | gain:0.06400000000000002 note:C6 clip:0.1 ]", + "[ 165/16 ⇜ (21/2 → 177/16) ⇝ 189/16 | gain:0.06400000000000002 note:G5 clip:0.1 ]", + "[ 153/16 ⇜ (171/16 → 177/16) | gain:0.4 note:G3 clip:0.1 ]", + "[ 165/16 ⇜ (171/16 → 177/16) | gain:0.4 note:Eb4 clip:0.1 ]", + "[ 39/4 ⇜ (87/8 → 45/4) | gain:0.16000000000000003 note:G4 clip:0.1 ]", + "[ 21/2 ⇜ (87/8 → 45/4) | gain:0.16000000000000003 note:Eb5 clip:0.1 ]", + "[ 87/8 → 45/4 | s:hh gain:0.7 ]", + "[ 87/8 → 93/8 | gain:1 note:C3 clip:0.1 ]", + "[ (87/8 → 12/1) ⇝ 99/8 | gain:1 note:G2 clip:0.1 ]", "[ 159/16 ⇜ (177/16 → 183/16) | gain:0.06400000000000002 note:G5 clip:0.1 ]", "[ 171/16 ⇜ (177/16 → 183/16) | gain:0.06400000000000002 note:Eb6 clip:0.1 ]", "[ 177/16 → 189/16 | gain:0.4 note:C4 clip:0.1 ]", @@ -9558,35 +9230,24 @@ exports[`renders tunes > tune: undergroundPlumber 1`] = ` "[ (12/1 → 99/8) ⇝ 51/4 | gain:0.16000000000000003 note:Bb5 clip:0.1 ]", "[ 183/16 ⇜ (12/1 → 201/16) ⇝ 207/16 | gain:0.06400000000000002 note:D6 clip:0.1 ]", "[ 12/1 → 51/4 | gain:1 note:G3 clip:0.1 ]", - "[ (12/1 → 13/1) ⇝ 27/2 | gain:1 note:D3 clip:0.1 ]", + "[ 12/1 → 27/2 | gain:1 note:D3 clip:0.1 ]", "[ 195/16 → 99/8 | s:bd gain:0.7 ]", "[ 195/16 → 201/16 | gain:1 note:G2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", "[ (195/16 → 201/16) ⇝ 207/16 | gain:0.06400000000000002 note:Bb6 clip:0.1 ]", "[ 195/16 → 207/16 | gain:0.4 note:G4 clip:0.1 ]", - "[ (195/16 → 13/1) ⇝ 219/16 | gain:0.4 note:D4 clip:0.1 ]", + "[ (195/16 → 27/2) ⇝ 219/16 | gain:0.4 note:D4 clip:0.1 ]", "[ 99/8 → 51/4 | s:hh gain:0.7 ]", "[ 99/8 → 51/4 | gain:1 note:E2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (99/8 → 13/1) ⇝ 105/8 | gain:0.16000000000000003 note:G5 clip:0.1 ]", - "[ (99/8 → 13/1) ⇝ 111/8 | gain:0.16000000000000003 note:D5 clip:0.1 ]", + "[ 99/8 → 105/8 | gain:0.16000000000000003 note:G5 clip:0.1 ]", + "[ (99/8 → 27/2) ⇝ 111/8 | gain:0.16000000000000003 note:D5 clip:0.1 ]", "[ 201/16 → 207/16 | gain:1 note:E2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (201/16 → 13/1) ⇝ 213/16 | gain:0.06400000000000002 note:G6 clip:0.1 ]", - "[ (201/16 → 13/1) ⇝ 225/16 | gain:0.06400000000000002 note:D6 clip:0.1 ]", - "[ (51/4 → 13/1) ⇝ 105/8 | s:sn gain:0.7 ]", - "[ (51/4 → 13/1) ⇝ 105/8 | gain:1 note:F2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (51/4 → 13/1) ⇝ 27/2 | gain:1 note:Bb3 clip:0.1 ]", - "[ (207/16 → 13/1) ⇝ 213/16 | gain:1 note:F2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (207/16 → 13/1) ⇝ 219/16 | gain:0.4 note:Bb4 clip:0.1 ]", - "[ 99/8 ⇜ (13/1 → 105/8) | gain:0.16000000000000003 note:G5 clip:0.1 ]", - "[ 51/4 ⇜ (13/1 → 105/8) | s:sn gain:0.7 ]", - "[ 51/4 ⇜ (13/1 → 105/8) | gain:1 note:F2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 201/16 ⇜ (13/1 → 213/16) | gain:0.06400000000000002 note:G6 clip:0.1 ]", - "[ 207/16 ⇜ (13/1 → 213/16) | gain:1 note:F2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 12/1 ⇜ (13/1 → 27/2) | gain:1 note:D3 clip:0.1 ]", - "[ 195/16 ⇜ (13/1 → 27/2) ⇝ 219/16 | gain:0.4 note:D4 clip:0.1 ]", - "[ 99/8 ⇜ (13/1 → 27/2) ⇝ 111/8 | gain:0.16000000000000003 note:D5 clip:0.1 ]", - "[ 201/16 ⇜ (13/1 → 27/2) ⇝ 225/16 | gain:0.06400000000000002 note:D6 clip:0.1 ]", - "[ 51/4 ⇜ (13/1 → 27/2) | gain:1 note:Bb3 clip:0.1 ]", - "[ 207/16 ⇜ (13/1 → 27/2) ⇝ 219/16 | gain:0.4 note:Bb4 clip:0.1 ]", + "[ 201/16 → 213/16 | gain:0.06400000000000002 note:G6 clip:0.1 ]", + "[ (201/16 → 27/2) ⇝ 225/16 | gain:0.06400000000000002 note:D6 clip:0.1 ]", + "[ 51/4 → 105/8 | s:sn gain:0.7 ]", + "[ 51/4 → 105/8 | gain:1 note:F2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", + "[ 51/4 → 27/2 | gain:1 note:Bb3 clip:0.1 ]", + "[ 207/16 → 213/16 | gain:1 note:F2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", + "[ (207/16 → 27/2) ⇝ 219/16 | gain:0.4 note:Bb4 clip:0.1 ]", "[ 105/8 → 27/2 | s:hh gain:0.7 ]", "[ (105/8 → 27/2) ⇝ 111/8 | gain:0.16000000000000003 note:Bb5 clip:0.1 ]", "[ (213/16 → 27/2) ⇝ 225/16 | gain:0.06400000000000002 note:Bb6 clip:0.1 ]", @@ -9596,24 +9257,15 @@ exports[`renders tunes > tune: undergroundPlumber 1`] = ` "[ 105/8 ⇜ (27/2 → 111/8) | gain:1 note:G3 clip:0.1 ]", "[ 105/8 ⇜ (27/2 → 111/8) | gain:0.16000000000000003 note:Bb5 clip:0.1 ]", "[ 27/2 → 111/8 | s:bd gain:0.7 ]", - "[ 201/16 ⇜ (27/2 → 14/1) ⇝ 225/16 | gain:0.06400000000000002 note:D6 clip:0.1 ]", - "[ 105/8 ⇜ (27/2 → 14/1) ⇝ 117/8 | gain:1 note:D3 clip:0.1 ]", - "[ 213/16 ⇜ (27/2 → 14/1) ⇝ 225/16 | gain:0.06400000000000002 note:Bb6 clip:0.1 ]", - "[ 213/16 ⇜ (219/16 → 14/1) ⇝ 225/16 | gain:0.4 note:G4 clip:0.1 ]", - "[ 213/16 ⇜ (219/16 → 14/1) ⇝ 237/16 | gain:0.4 note:D4 clip:0.1 ]", - "[ 27/2 ⇜ (111/8 → 14/1) ⇝ 57/4 | gain:0.16000000000000003 note:G5 clip:0.1 ]", - "[ 27/2 ⇜ (111/8 → 14/1) ⇝ 15/1 | gain:0.16000000000000003 note:D5 clip:0.1 ]", - "[ (111/8 → 14/1) ⇝ 57/4 | s:hh gain:0.7 ]", - "[ (111/8 → 14/1) ⇝ 117/8 | gain:1 note:Bb3 clip:0.1 ]", - "[ 201/16 ⇜ (14/1 → 225/16) | gain:0.06400000000000002 note:D6 clip:0.1 ]", - "[ 213/16 ⇜ (14/1 → 225/16) | gain:0.4 note:G4 clip:0.1 ]", - "[ 213/16 ⇜ (14/1 → 225/16) | gain:0.06400000000000002 note:Bb6 clip:0.1 ]", - "[ 27/2 ⇜ (14/1 → 57/4) | gain:0.16000000000000003 note:G5 clip:0.1 ]", - "[ 111/8 ⇜ (14/1 → 57/4) | s:hh gain:0.7 ]", - "[ 105/8 ⇜ (14/1 → 117/8) | gain:1 note:D3 clip:0.1 ]", - "[ 111/8 ⇜ (14/1 → 117/8) | gain:1 note:Bb3 clip:0.1 ]", - "[ 213/16 ⇜ (14/1 → 237/16) | gain:0.4 note:D4 clip:0.1 ]", - "[ 27/2 ⇜ (14/1 → 15/1) | gain:0.16000000000000003 note:D5 clip:0.1 ]", + "[ 201/16 ⇜ (27/2 → 225/16) | gain:0.06400000000000002 note:D6 clip:0.1 ]", + "[ 213/16 ⇜ (27/2 → 225/16) | gain:0.06400000000000002 note:Bb6 clip:0.1 ]", + "[ 105/8 ⇜ (27/2 → 117/8) | gain:1 note:D3 clip:0.1 ]", + "[ 213/16 ⇜ (219/16 → 225/16) | gain:0.4 note:G4 clip:0.1 ]", + "[ 213/16 ⇜ (219/16 → 237/16) | gain:0.4 note:D4 clip:0.1 ]", + "[ 27/2 ⇜ (111/8 → 57/4) | gain:0.16000000000000003 note:G5 clip:0.1 ]", + "[ 111/8 → 57/4 | s:hh gain:0.7 ]", + "[ 111/8 → 117/8 | gain:1 note:Bb3 clip:0.1 ]", + "[ 27/2 ⇜ (111/8 → 15/1) | gain:0.16000000000000003 note:D5 clip:0.1 ]", "[ 219/16 ⇜ (225/16 → 231/16) | gain:0.06400000000000002 note:G6 clip:0.1 ]", "[ 225/16 → 237/16 | gain:0.4 note:Bb4 clip:0.1 ]", "[ 219/16 ⇜ (225/16 → 15/1) ⇝ 243/16 | gain:0.06400000000000002 note:D6 clip:0.1 ]", @@ -9643,29 +9295,18 @@ exports[`renders tunes > tune: undergroundPlumber 1`] = ` "[ 243/16 → 255/16 | gain:0.4 note:Ab4 clip:0.1 ]", "[ 123/8 → 63/4 | s:hh gain:0.7 ]", "[ 123/8 → 63/4 | gain:1 note:D2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 117/8 ⇜ (123/8 → 16/1) ⇝ 129/8 | gain:0.16000000000000003 note:C5 clip:0.1 ]", - "[ (123/8 → 16/1) ⇝ 129/8 | gain:0.16000000000000003 note:Ab5 clip:0.1 ]", + "[ 117/8 ⇜ (123/8 → 129/8) | gain:0.16000000000000003 note:C5 clip:0.1 ]", + "[ 123/8 → 129/8 | gain:0.16000000000000003 note:Ab5 clip:0.1 ]", "[ 249/16 → 255/16 | gain:1 note:D2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 237/16 ⇜ (249/16 → 16/1) ⇝ 261/16 | gain:0.06400000000000002 note:C6 clip:0.1 ]", - "[ (249/16 → 16/1) ⇝ 261/16 | gain:0.06400000000000002 note:Ab6 clip:0.1 ]", - "[ (63/4 → 16/1) ⇝ 129/8 | s:sn gain:0.7 ]", - "[ (63/4 → 16/1) ⇝ 129/8 | gain:1 note:Eb2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (63/4 → 16/1) ⇝ 33/2 | gain:1 note:F3 clip:0.1 ]", - "[ (63/4 → 16/1) ⇝ 69/4 | gain:1 note:C3 clip:0.1 ]", - "[ (255/16 → 16/1) ⇝ 261/16 | gain:1 note:Eb2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (255/16 → 16/1) ⇝ 267/16 | gain:0.4 note:F4 clip:0.1 ]", - "[ (255/16 → 16/1) ⇝ 279/16 | gain:0.4 note:C4 clip:0.1 ]", - "[ 117/8 ⇜ (16/1 → 129/8) | gain:0.16000000000000003 note:C5 clip:0.1 ]", - "[ 123/8 ⇜ (16/1 → 129/8) | gain:0.16000000000000003 note:Ab5 clip:0.1 ]", - "[ 63/4 ⇜ (16/1 → 129/8) | s:sn gain:0.7 ]", - "[ 63/4 ⇜ (16/1 → 129/8) | gain:1 note:Eb2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 237/16 ⇜ (16/1 → 261/16) | gain:0.06400000000000002 note:C6 clip:0.1 ]", - "[ 249/16 ⇜ (16/1 → 261/16) | gain:0.06400000000000002 note:Ab6 clip:0.1 ]", - "[ 255/16 ⇜ (16/1 → 261/16) | gain:1 note:Eb2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 63/4 ⇜ (16/1 → 33/2) | gain:1 note:F3 clip:0.1 ]", - "[ 63/4 ⇜ (16/1 → 33/2) ⇝ 69/4 | gain:1 note:C3 clip:0.1 ]", - "[ 255/16 ⇜ (16/1 → 33/2) ⇝ 267/16 | gain:0.4 note:F4 clip:0.1 ]", - "[ 255/16 ⇜ (16/1 → 33/2) ⇝ 279/16 | gain:0.4 note:C4 clip:0.1 ]", + "[ 237/16 ⇜ (249/16 → 261/16) | gain:0.06400000000000002 note:C6 clip:0.1 ]", + "[ 249/16 → 261/16 | gain:0.06400000000000002 note:Ab6 clip:0.1 ]", + "[ 63/4 → 129/8 | s:sn gain:0.7 ]", + "[ 63/4 → 129/8 | gain:1 note:Eb2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", + "[ 63/4 → 33/2 | gain:1 note:F3 clip:0.1 ]", + "[ (63/4 → 33/2) ⇝ 69/4 | gain:1 note:C3 clip:0.1 ]", + "[ 255/16 → 261/16 | gain:1 note:Eb2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", + "[ (255/16 → 33/2) ⇝ 267/16 | gain:0.4 note:F4 clip:0.1 ]", + "[ (255/16 → 33/2) ⇝ 279/16 | gain:0.4 note:C4 clip:0.1 ]", "[ 129/8 → 33/2 | s:hh gain:0.7 ]", "[ (129/8 → 33/2) ⇝ 135/8 | gain:0.16000000000000003 note:F5 clip:0.1 ]", "[ (129/8 → 33/2) ⇝ 141/8 | gain:0.16000000000000003 note:C5 clip:0.1 ]", @@ -9678,24 +9319,15 @@ exports[`renders tunes > tune: undergroundPlumber 1`] = ` "[ 129/8 ⇜ (33/2 → 135/8) | gain:0.16000000000000003 note:F5 clip:0.1 ]", "[ 129/8 ⇜ (33/2 → 135/8) ⇝ 141/8 | gain:0.16000000000000003 note:C5 clip:0.1 ]", "[ 33/2 → 135/8 | s:bd gain:0.7 ]", - "[ 261/16 ⇜ (33/2 → 17/1) ⇝ 273/16 | gain:0.06400000000000002 note:F6 clip:0.1 ]", - "[ 261/16 ⇜ (33/2 → 17/1) ⇝ 285/16 | gain:0.06400000000000002 note:C6 clip:0.1 ]", - "[ 249/16 ⇜ (267/16 → 17/1) ⇝ 273/16 | gain:0.4 note:C4 clip:0.1 ]", - "[ 261/16 ⇜ (267/16 → 17/1) ⇝ 273/16 | gain:0.4 note:Ab4 clip:0.1 ]", - "[ 63/4 ⇜ (135/8 → 17/1) ⇝ 69/4 | gain:0.16000000000000003 note:C5 clip:0.1 ]", - "[ 33/2 ⇜ (135/8 → 17/1) ⇝ 69/4 | gain:0.16000000000000003 note:Ab5 clip:0.1 ]", - "[ (135/8 → 17/1) ⇝ 69/4 | s:hh gain:0.7 ]", - "[ (135/8 → 17/1) ⇝ 141/8 | gain:1 note:F3 clip:0.1 ]", - "[ (135/8 → 17/1) ⇝ 147/8 | gain:1 note:C3 clip:0.1 ]", - "[ 249/16 ⇜ (17/1 → 273/16) | gain:0.4 note:C4 clip:0.1 ]", - "[ 261/16 ⇜ (17/1 → 273/16) | gain:0.4 note:Ab4 clip:0.1 ]", - "[ 261/16 ⇜ (17/1 → 273/16) | gain:0.06400000000000002 note:F6 clip:0.1 ]", - "[ 261/16 ⇜ (17/1 → 273/16) ⇝ 285/16 | gain:0.06400000000000002 note:C6 clip:0.1 ]", - "[ 63/4 ⇜ (17/1 → 69/4) | gain:0.16000000000000003 note:C5 clip:0.1 ]", - "[ 33/2 ⇜ (17/1 → 69/4) | gain:0.16000000000000003 note:Ab5 clip:0.1 ]", - "[ 135/8 ⇜ (17/1 → 69/4) | s:hh gain:0.7 ]", - "[ 135/8 ⇜ (17/1 → 141/8) | gain:1 note:F3 clip:0.1 ]", - "[ 135/8 ⇜ (17/1 → 18/1) ⇝ 147/8 | gain:1 note:C3 clip:0.1 ]", + "[ 261/16 ⇜ (33/2 → 273/16) | gain:0.06400000000000002 note:F6 clip:0.1 ]", + "[ 261/16 ⇜ (33/2 → 273/16) ⇝ 285/16 | gain:0.06400000000000002 note:C6 clip:0.1 ]", + "[ 249/16 ⇜ (267/16 → 273/16) | gain:0.4 note:C4 clip:0.1 ]", + "[ 261/16 ⇜ (267/16 → 273/16) | gain:0.4 note:Ab4 clip:0.1 ]", + "[ 63/4 ⇜ (135/8 → 69/4) | gain:0.16000000000000003 note:C5 clip:0.1 ]", + "[ 33/2 ⇜ (135/8 → 69/4) | gain:0.16000000000000003 note:Ab5 clip:0.1 ]", + "[ 135/8 → 69/4 | s:hh gain:0.7 ]", + "[ 135/8 → 141/8 | gain:1 note:F3 clip:0.1 ]", + "[ (135/8 → 18/1) ⇝ 147/8 | gain:1 note:C3 clip:0.1 ]", "[ 255/16 ⇜ (273/16 → 279/16) | gain:0.06400000000000002 note:C6 clip:0.1 ]", "[ 267/16 ⇜ (273/16 → 279/16) | gain:0.06400000000000002 note:Ab6 clip:0.1 ]", "[ 273/16 → 285/16 | gain:0.4 note:F4 clip:0.1 ]", @@ -9717,35 +9349,24 @@ exports[`renders tunes > tune: undergroundPlumber 1`] = ` "[ (18/1 → 147/8) ⇝ 75/4 | gain:0.16000000000000003 note:Eb5 clip:0.1 ]", "[ 279/16 ⇜ (18/1 → 297/16) ⇝ 303/16 | gain:0.06400000000000002 note:G5 clip:0.1 ]", "[ 18/1 → 75/4 | gain:1 note:C3 clip:0.1 ]", - "[ (18/1 → 19/1) ⇝ 39/2 | gain:1 note:G2 clip:0.1 ]", + "[ 18/1 → 39/2 | gain:1 note:G2 clip:0.1 ]", "[ 291/16 → 147/8 | s:bd gain:0.7 ]", "[ 291/16 → 297/16 | gain:1 note:C2 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", "[ (291/16 → 297/16) ⇝ 303/16 | gain:0.06400000000000002 note:Eb6 clip:0.1 ]", "[ 291/16 → 303/16 | gain:0.4 note:C4 clip:0.1 ]", - "[ (291/16 → 19/1) ⇝ 315/16 | gain:0.4 note:G3 clip:0.1 ]", + "[ (291/16 → 39/2) ⇝ 315/16 | gain:0.4 note:G3 clip:0.1 ]", "[ 147/8 → 75/4 | s:hh gain:0.7 ]", "[ 147/8 → 75/4 | gain:1 note:A1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (147/8 → 19/1) ⇝ 153/8 | gain:0.16000000000000003 note:C5 clip:0.1 ]", - "[ (147/8 → 19/1) ⇝ 159/8 | gain:0.16000000000000003 note:G4 clip:0.1 ]", + "[ 147/8 → 153/8 | gain:0.16000000000000003 note:C5 clip:0.1 ]", + "[ (147/8 → 39/2) ⇝ 159/8 | gain:0.16000000000000003 note:G4 clip:0.1 ]", "[ 297/16 → 303/16 | gain:1 note:A1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (297/16 → 19/1) ⇝ 309/16 | gain:0.06400000000000002 note:C6 clip:0.1 ]", - "[ (297/16 → 19/1) ⇝ 321/16 | gain:0.06400000000000002 note:G5 clip:0.1 ]", - "[ (75/4 → 19/1) ⇝ 153/8 | s:sn gain:0.7 ]", - "[ (75/4 → 19/1) ⇝ 153/8 | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (75/4 → 19/1) ⇝ 39/2 | gain:1 note:Eb3 clip:0.1 ]", - "[ (303/16 → 19/1) ⇝ 309/16 | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ (303/16 → 19/1) ⇝ 315/16 | gain:0.4 note:Eb4 clip:0.1 ]", - "[ 147/8 ⇜ (19/1 → 153/8) | gain:0.16000000000000003 note:C5 clip:0.1 ]", - "[ 75/4 ⇜ (19/1 → 153/8) | s:sn gain:0.7 ]", - "[ 75/4 ⇜ (19/1 → 153/8) | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 297/16 ⇜ (19/1 → 309/16) | gain:0.06400000000000002 note:C6 clip:0.1 ]", - "[ 303/16 ⇜ (19/1 → 309/16) | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", - "[ 18/1 ⇜ (19/1 → 39/2) | gain:1 note:G2 clip:0.1 ]", - "[ 291/16 ⇜ (19/1 → 39/2) ⇝ 315/16 | gain:0.4 note:G3 clip:0.1 ]", - "[ 147/8 ⇜ (19/1 → 39/2) ⇝ 159/8 | gain:0.16000000000000003 note:G4 clip:0.1 ]", - "[ 297/16 ⇜ (19/1 → 39/2) ⇝ 321/16 | gain:0.06400000000000002 note:G5 clip:0.1 ]", - "[ 75/4 ⇜ (19/1 → 39/2) | gain:1 note:Eb3 clip:0.1 ]", - "[ 303/16 ⇜ (19/1 → 39/2) ⇝ 315/16 | gain:0.4 note:Eb4 clip:0.1 ]", + "[ 297/16 → 309/16 | gain:0.06400000000000002 note:C6 clip:0.1 ]", + "[ (297/16 → 39/2) ⇝ 321/16 | gain:0.06400000000000002 note:G5 clip:0.1 ]", + "[ 75/4 → 153/8 | s:sn gain:0.7 ]", + "[ 75/4 → 153/8 | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", + "[ 75/4 → 39/2 | gain:1 note:Eb3 clip:0.1 ]", + "[ 303/16 → 309/16 | gain:1 note:Bb1 s:square clip:0.4 cutoff:400 decay:0.12 sustain:0 ]", + "[ (303/16 → 39/2) ⇝ 315/16 | gain:0.4 note:Eb4 clip:0.1 ]", "[ 153/8 → 39/2 | s:hh gain:0.7 ]", "[ (153/8 → 39/2) ⇝ 159/8 | gain:0.16000000000000003 note:Eb5 clip:0.1 ]", "[ (309/16 → 39/2) ⇝ 321/16 | gain:0.06400000000000002 note:Eb6 clip:0.1 ]", @@ -9769,8 +9390,8 @@ exports[`renders tunes > tune: undergroundPlumber 1`] = ` exports[`renders tunes > tune: waa2 1`] = ` [ - "[ -1/4 ⇜ (0/1 → 1/4) | note:48 clip:1.1738393178344886 s:sawtooth cutoff:3997.892048359052 gain:0.5 room:0.5 lpattack:0.125 lpenv:-2 vib:8 vibmod:0.125 fanchor:0.25 ]", - "[ -1/4 ⇜ (0/1 → 1/4) | note:64 clip:1.1738393178344886 s:sawtooth cutoff:3997.892048359052 gain:0.5 room:0.5 lpattack:0.125 lpenv:-2 vib:8 vibmod:0.125 fanchor:0.25 ]", + "[ -1/4 ⇜ (0/1 → 1/4) | note:48 clip:1.15 s:sawtooth cutoff:4000 gain:0.5 room:0.5 lpattack:0.125 lpenv:-2 vib:8 vibmod:0.125 fanchor:0.25 ]", + "[ -1/4 ⇜ (0/1 → 1/4) | note:64 clip:1.15 s:sawtooth cutoff:4000 gain:0.5 room:0.5 lpattack:0.125 lpenv:-2 vib:8 vibmod:0.125 fanchor:0.25 ]", "[ (0/1 → 1/4) ⇝ 1/2 | note:62 clip:1.197659880151613 s:sawtooth cutoff:3991.5732716763446 gain:0.5 room:0.5 lpattack:0.125 lpenv:-2 vib:8 vibmod:0.125 fanchor:0.25 ]", "[ (0/1 → 1/4) ⇝ 1/2 | note:43 clip:1.197659880151613 s:sawtooth cutoff:3991.5732716763446 gain:0.5 room:0.5 lpattack:0.125 lpenv:-2 vib:8 vibmod:0.125 fanchor:0.25 ]", "[ 0/1 ⇜ (1/4 → 1/2) | note:62 clip:1.197659880151613 s:square cutoff:3991.5732716763446 gain:0.5 room:0.5 lpattack:0.125 lpenv:-2 vib:8 vibmod:0.125 fanchor:0.25 ]", @@ -9784,7 +9405,7 @@ exports[`renders tunes > tune: waa2 1`] = ` "[ 1/2 ⇜ (3/4 → 1/1) | note:69 clip:1.292380289809026 s:square cutoff:3924.645587531366 gain:0.5 room:0.5 lpattack:0.125 lpenv:-2 vib:8 vibmod:0.125 fanchor:0.25 ]", "[ 3/4 → 1/1 | note:41 clip:1.315826773713709 s:square cutoff:3897.7021140702864 gain:0.5 room:0.5 lpattack:0.125 lpenv:-2 vib:8 vibmod:0.125 fanchor:0.25 ]", "[ 3/4 → 1/1 | note:62 clip:1.315826773713709 s:square cutoff:3897.7021140702864 gain:0.5 room:0.5 lpattack:0.125 lpenv:-2 vib:8 vibmod:0.125 fanchor:0.25 ]", - "[ (3/4 → 1/1) ⇝ 5/4 | note:81 clip:1.315826773713709 s:square cutoff:3897.7021140702864 gain:0.5 room:0.5 lpattack:0.125 lpenv:-2 vib:8 vibmod:0.125 fanchor:0.25 ]", + "[ (3/4 → 1/1) ⇝ 5/4 | note:81 clip:1.3391427938628673 s:square cutoff:3866.789181894752 gain:0.5 room:0.5 lpattack:0.125 lpenv:-2 vib:8 vibmod:0.125 fanchor:0.25 ]", ] `; From b1b91fcae7210a9cae210def3be0b9767c8de851 Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Thu, 14 Mar 2024 16:11:20 +0000 Subject: [PATCH 14/22] Don't use patternified params if they're all 'pure' --- packages/core/pattern.mjs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 16d091c7f..59c2fe566 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -1480,14 +1480,17 @@ export function register(name, func, patternify = true) { if (arity === 1) { return func(pat); } - const [left, ...right] = args.slice(0, -1); + + const firstArgs = args.slice(0, -1); + + if (firstArgs.every((arg) => arg.__pure != undefined)) { + const pureArgs = firstArgs.map((arg) => arg.__pure); + return func(...pureArgs, pat); + } + + const [left, ...right] = firstArgs; + let mapFn = (...args) => { - // make sure to call func with the correct argument count - // args.length is expected to be <= arity-1 - // so we set undefined args explicitly undefined - Array(arity - 1) - .fill() - .map((_, i) => args[i] ?? undefined); return func(...args, pat); }; mapFn = curry(mapFn, null, arity - 1); @@ -1751,7 +1754,9 @@ export const { fast, density } = register(['fast', 'density'], function (factor, } factor = Fraction(factor); const fastQuery = pat.withQueryTime((t) => t.mul(factor)); - return fastQuery.withHapTime((t) => t.div(factor)); + const result = fastQuery.withHapTime((t) => t.div(factor)); + result.__weight = pat.__weight == undefined ? undefined : factor.mul(pat.__weight); + return result; }); /** From ab4419d0def4b22bdeaa26beff29e84e4cfe1f40 Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Fri, 15 Mar 2024 12:43:18 +0000 Subject: [PATCH 15/22] move to use weight for polymeter --- packages/core/pattern.mjs | 93 ++++++++++++++------ packages/mini/mini.mjs | 19 ++-- test/__snapshots__/examples.test.mjs.snap | 100 ++++++++++++---------- 3 files changed, 133 insertions(+), 79 deletions(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 59c2fe566..ce5bb0762 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -46,6 +46,14 @@ export class Pattern { this.__weight = weight; // in terms of number of beats per cycle } + get weight() { + return this.__weight ?? Fraction(1); + } + + set weight(weight) { + this.__weight = Fraction(weight); + } + ////////////////////////////////////////////////////////////////////// // Haskell-style functor, applicative and monadic operations @@ -1283,14 +1291,13 @@ export function cat(...pats) { * // the same as "bd sd cp hh hh".sound() */ export function timeCat(...timepats) { - // Weights are either provided in [weight, pattern] pairs, or as '__weight' - // elements added to pattern objects or provided from unadulterated mininotation - // patterns. - const findWeight = (x) => (Array.isArray(x) ? x : [x.__weight ?? 1, x]); + // Weights may either be provided explicitly in [weight, pattern] pairs, or + // where possible, inferred from the pattern. + const findWeight = (x) => (Array.isArray(x) ? x : [x.weight, x]); timepats = timepats.map(findWeight); if (timepats.length == 1) { const result = reify(timepats[0][1]); - result.__weight = timepats[0][0]; + result.weight = timepats[0][0]; return result; } @@ -1303,7 +1310,7 @@ export function timeCat(...timepats) { begin = end; } const result = stack(...pats); - result.__weight = total; + result.weight = total; return result; } @@ -1328,7 +1335,7 @@ export function fastcat(...pats) { let result = slowcat(...pats); if (pats.length > 1) { result = result._fast(pats.length); - result.__weight = pats.length; + result.weight = pats.length; } return result; } @@ -1336,17 +1343,17 @@ export function fastcat(...pats) { export function beatCat(...groups) { groups = groups.map((a) => (Array.isArray(a) ? a.map(reify) : [reify(a)])); - const weights = groups.map((a) => a.map((elem) => elem.__weight ?? 1)); + const weights = groups.map((a) => a.map((elem) => elem.weight)); const cycles = lcm(...groups.map((x) => x.length)); let result = []; for (let cycle = 0; cycle < cycles; ++cycle) { result.push(...groups.map((x) => (x.length == 0 ? silence : x[cycle % x.length]))); } - result = result.filter((x) => x.__weight > 0); - const weight = result.reduce((a, b) => a.add(b.__weight), Fraction(0)); + result = result.filter((x) => x.weight > 0); + const weight = result.reduce((a, b) => a.add(b.weight), Fraction(0)); result = timeCat(...result); - result.__weight = weight; + result.weight = weight; return result; } @@ -1378,18 +1385,12 @@ function _sequenceCount(x) { } return [reify(x), 1]; } -/** - * Aligns one or more given sequences to the given number of steps per cycle. - * - * @name polymeterSteps - * @param {number} steps how many items are placed in one cycle - * @param {any[]} sequences one or more arrays of Patterns / values - * @example - * polymeterSteps(4, ["c", "d", "e"]) - * .note().stack(s("bd")) - * // note("{c d e}%4").stack(s("bd")) - */ -export function polymeterSteps(steps, ...args) { + +export const reweight = register('reweight', function (targetWeight, pat) { + return pat.fast(Fraction(targetWeight).div(pat.weight)); +}); + +export function _polymeterListSteps(steps, ...args) { const seqs = args.map((a) => _sequenceCount(a)); if (seqs.length == 0) { return silence; @@ -1412,15 +1413,51 @@ export function polymeterSteps(steps, ...args) { } /** - * Combines the given lists of patterns with the same pulse. This will create so called polymeters when different sized sequences are used. + * Aligns one or more given patterns to the given number of steps per cycle. + * This relies on patterns having coherent number of steps per cycle, + * + * @name polymeterSteps + * @param {number} steps how many items are placed in one cycle + * @param {any[]} patterns one or more patterns + * @example + * // the same as "{c d, e f g}%4" + * polymeterSteps(4, "c d", "e f g") + */ +export function polymeterSteps(steps, ...args) { + if (args.length == 0) { + return silence; + } + if (Array.isArray(args[0])) { + // Support old behaviour + return _polymeterListSteps(steps, ...args); + } + + return polymeter(...args).reweight(steps); +} + +/** + * Combines the given lists of patterns with the same pulse, creating polymeters when different sized sequences are used. * @synonyms pm * @example - * polymeter(["c", "eb", "g"], ["c2", "g2"]).note() - * // "{c eb g, c2 g2}".note() + * // The same as "{c eb g, c2 g2}" + * polymeter("c eb g", "c2 g2") * */ export function polymeter(...args) { - return polymeterSteps(0, ...args); + if (Array.isArray(args[0])) { + // Support old behaviour + return _polymeterListSteps(0, ...args); + } + + if (args.length == 0) { + return silence; + } + const weight = args[0].weight; + const [head, ...tail] = args; + + const result = stack(head, ...tail.map((pat) => pat._slow(pat.weight.div(weight)))); + result.weight = weight; + return result; } export const mask = curry((a, b) => reify(b).mask(a)); @@ -1755,7 +1792,7 @@ export const { fast, density } = register(['fast', 'density'], function (factor, factor = Fraction(factor); const fastQuery = pat.withQueryTime((t) => t.mul(factor)); const result = fastQuery.withHapTime((t) => t.div(factor)); - result.__weight = pat.__weight == undefined ? undefined : factor.mul(pat.__weight); + result.weight = factor.mul(pat.weight); return result; }); diff --git a/packages/mini/mini.mjs b/packages/mini/mini.mjs index fdd3d3b14..c032cf121 100644 --- a/packages/mini/mini.mjs +++ b/packages/mini/mini.mjs @@ -92,16 +92,16 @@ export function patternifyAST(ast, code, onEnter, offset = 0) { return strudel.stack(...children); } if (alignment === 'polymeter_slowcat') { - const aligned = children.map((child) => child._slow(strudel.Fraction(child.__weight ?? 1))); + const aligned = children.map((child) => child._slow(child.weight)); return strudel.stack(...aligned); } if (alignment === 'polymeter') { // polymeter const stepsPerCycle = ast.arguments_.stepsPerCycle ? enter(ast.arguments_.stepsPerCycle).fmap((x) => strudel.Fraction(x)) - : strudel.pure(strudel.Fraction(children.length > 0 ? children[0].__weight : 1)); + : strudel.pure(strudel.Fraction(children.length > 0 ? children[0].weight : 1)); - const aligned = children.map((child) => child.fast(stepsPerCycle.fmap((x) => x.div(child.__weight || 1)))); + const aligned = children.map((child) => child.fast(stepsPerCycle.fmap((x) => x.div(child.weight)))); return strudel.stack(...aligned); } if (alignment === 'rand') { @@ -112,13 +112,18 @@ export function patternifyAST(ast, code, onEnter, offset = 0) { } const weightedChildren = ast.source_.some((child) => !!child.options_?.weight); if (weightedChildren) { - const weightSum = ast.source_.reduce((sum, child) => sum + (child.options_?.weight || 1), 0); - const pat = strudel.timeCat(...ast.source_.map((child, i) => [child.options_?.weight || 1, children[i]])); - pat.__weight = weightSum; + const weightSum = ast.source_.reduce( + (sum, child) => sum.add(child.options_?.weight || strudel.Fraction(1)), + strudel.Fraction(0), + ); + const pat = strudel.timeCat( + ...ast.source_.map((child, i) => [child.options_?.weight || strudel.Fraction(1), children[i]]), + ); + pat.weight = weightSum; return pat; } const pat = strudel.sequence(...children); - pat.__weight = children.length; + pat.weight = children.length; return pat; } case 'element': { diff --git a/test/__snapshots__/examples.test.mjs.snap b/test/__snapshots__/examples.test.mjs.snap index a45e4279a..9a470d07d 100644 --- a/test/__snapshots__/examples.test.mjs.snap +++ b/test/__snapshots__/examples.test.mjs.snap @@ -4888,55 +4888,67 @@ exports[`runs examples > example "ply" example index 0 1`] = ` exports[`runs examples > example "polymeter" example index 0 1`] = ` [ - "[ 0/1 → 1/3 | note:c ]", - "[ 0/1 → 1/3 | note:c2 ]", - "[ 1/3 → 2/3 | note:eb ]", - "[ 1/3 → 2/3 | note:g2 ]", - "[ 2/3 → 1/1 | note:g ]", - "[ 2/3 → 1/1 | note:c2 ]", - "[ 1/1 → 4/3 | note:c ]", - "[ 1/1 → 4/3 | note:g2 ]", - "[ 4/3 → 5/3 | note:eb ]", - "[ 4/3 → 5/3 | note:c2 ]", - "[ 5/3 → 2/1 | note:g ]", - "[ 5/3 → 2/1 | note:g2 ]", - "[ 2/1 → 7/3 | note:c ]", - "[ 2/1 → 7/3 | note:c2 ]", - "[ 7/3 → 8/3 | note:eb ]", - "[ 7/3 → 8/3 | note:g2 ]", - "[ 8/3 → 3/1 | note:g ]", - "[ 8/3 → 3/1 | note:c2 ]", - "[ 3/1 → 10/3 | note:c ]", - "[ 3/1 → 10/3 | note:g2 ]", - "[ 10/3 → 11/3 | note:eb ]", - "[ 10/3 → 11/3 | note:c2 ]", - "[ 11/3 → 4/1 | note:g ]", - "[ 11/3 → 4/1 | note:g2 ]", + "[ 0/1 → 1/3 | c ]", + "[ 0/1 → 1/3 | c2 ]", + "[ 1/3 → 2/3 | eb ]", + "[ 1/3 → 2/3 | g2 ]", + "[ 2/3 → 1/1 | g ]", + "[ 2/3 → 1/1 | c2 ]", + "[ 1/1 → 4/3 | c ]", + "[ 1/1 → 4/3 | g2 ]", + "[ 4/3 → 5/3 | eb ]", + "[ 4/3 → 5/3 | c2 ]", + "[ 5/3 → 2/1 | g ]", + "[ 5/3 → 2/1 | g2 ]", + "[ 2/1 → 7/3 | c ]", + "[ 2/1 → 7/3 | c2 ]", + "[ 7/3 → 8/3 | eb ]", + "[ 7/3 → 8/3 | g2 ]", + "[ 8/3 → 3/1 | g ]", + "[ 8/3 → 3/1 | c2 ]", + "[ 3/1 → 10/3 | c ]", + "[ 3/1 → 10/3 | g2 ]", + "[ 10/3 → 11/3 | eb ]", + "[ 10/3 → 11/3 | c2 ]", + "[ 11/3 → 4/1 | g ]", + "[ 11/3 → 4/1 | g2 ]", ] `; exports[`runs examples > example "polymeterSteps" example index 0 1`] = ` [ - "[ 0/1 → 1/4 | note:c ]", - "[ 0/1 → 1/1 | s:bd ]", - "[ 1/4 → 1/2 | note:d ]", - "[ 1/2 → 3/4 | note:e ]", - "[ 3/4 → 1/1 | note:c ]", - "[ 1/1 → 5/4 | note:d ]", - "[ 1/1 → 2/1 | s:bd ]", - "[ 5/4 → 3/2 | note:e ]", - "[ 3/2 → 7/4 | note:c ]", - "[ 7/4 → 2/1 | note:d ]", - "[ 2/1 → 9/4 | note:e ]", - "[ 2/1 → 3/1 | s:bd ]", - "[ 9/4 → 5/2 | note:c ]", - "[ 5/2 → 11/4 | note:d ]", - "[ 11/4 → 3/1 | note:e ]", - "[ 3/1 → 13/4 | note:c ]", - "[ 3/1 → 4/1 | s:bd ]", - "[ 13/4 → 7/2 | note:d ]", - "[ 7/2 → 15/4 | note:e ]", - "[ 15/4 → 4/1 | note:c ]", + "[ 0/1 → 1/4 | c ]", + "[ 0/1 → 1/4 | e ]", + "[ 1/4 → 1/2 | d ]", + "[ 1/4 → 1/2 | f ]", + "[ 1/2 → 3/4 | c ]", + "[ 1/2 → 3/4 | g ]", + "[ 3/4 → 1/1 | d ]", + "[ 3/4 → 1/1 | e ]", + "[ 1/1 → 5/4 | c ]", + "[ 1/1 → 5/4 | f ]", + "[ 5/4 → 3/2 | d ]", + "[ 5/4 → 3/2 | g ]", + "[ 3/2 → 7/4 | c ]", + "[ 3/2 → 7/4 | e ]", + "[ 7/4 → 2/1 | d ]", + "[ 7/4 → 2/1 | f ]", + "[ 2/1 → 9/4 | c ]", + "[ 2/1 → 9/4 | g ]", + "[ 9/4 → 5/2 | d ]", + "[ 9/4 → 5/2 | e ]", + "[ 5/2 → 11/4 | c ]", + "[ 5/2 → 11/4 | f ]", + "[ 11/4 → 3/1 | d ]", + "[ 11/4 → 3/1 | g ]", + "[ 3/1 → 13/4 | c ]", + "[ 3/1 → 13/4 | e ]", + "[ 13/4 → 7/2 | d ]", + "[ 13/4 → 7/2 | f ]", + "[ 7/2 → 15/4 | c ]", + "[ 7/2 → 15/4 | g ]", + "[ 15/4 → 4/1 | d ]", + "[ 15/4 → 4/1 | e ]", ] `; From a807b83b1cebbe95874b05a77925562e5f10ec10 Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Fri, 15 Mar 2024 12:52:18 +0000 Subject: [PATCH 16/22] quick test --- packages/core/test/pattern.test.mjs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/core/test/pattern.test.mjs b/packages/core/test/pattern.test.mjs index 566038fd6..e810ab0c1 100644 --- a/packages/core/test/pattern.test.mjs +++ b/packages/core/test/pattern.test.mjs @@ -604,7 +604,7 @@ describe('Pattern', () => { }); }); describe('polymeter()', () => { - it('Can layer up cycles, stepwise', () => { + it('Can layer up cycles, stepwise, with lists', () => { expect(polymeterSteps(3, ['d', 'e']).firstCycle()).toStrictEqual( fastcat(pure('d'), pure('e'), pure('d')).firstCycle(), ); @@ -613,6 +613,9 @@ describe('Pattern', () => { stack(sequence('a', 'b', 'c', 'a', 'b', 'c'), sequence('d', 'e', 'd', 'e', 'd', 'e')).firstCycle(), ); }); + it('Can layer up cycles, stepwise, with weighted patterns', () => { + sameFirst(polymeterSteps(3, sequence('a', 'b')).fast(2), sequence('a', 'b', 'a', 'b', 'a', 'b')); + }); }); describe('firstOf()', () => { From f0751309f8cd93fb8202854ad3a65e1a1d853b0c Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Fri, 15 Mar 2024 14:55:28 +0000 Subject: [PATCH 17/22] preserve weight across applicative operations (weight comes with the structure) --- packages/core/pattern.mjs | 31 ++++++++++++++++++++--- packages/core/test/controls.test.mjs | 12 ++++++++- test/__snapshots__/examples.test.mjs.snap | 25 ++++++++++++++++++ 3 files changed, 63 insertions(+), 5 deletions(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index ce5bb0762..d10d56390 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -67,7 +67,9 @@ export class Pattern { * "0 1 2".withValue(v => v + 10).log() */ withValue(func) { - return new Pattern((state) => this.query(state).map((hap) => hap.withValue(func))); + const result = new Pattern((state) => this.query(state).map((hap) => hap.withValue(func))); + result.weight = this.weight; + return result; } /** @@ -124,6 +126,8 @@ export class Pattern { * @returns Pattern */ appBoth(pat_val) { + const pat_func = this; + // Tidal's <*> const whole_func = function (span_a, span_b) { if (span_a == undefined || span_b == undefined) { @@ -131,7 +135,9 @@ export class Pattern { } return span_a.intersection_e(span_b); }; - return this.appWhole(whole_func, pat_val); + const result = pat_func.appWhole(whole_func, pat_val); + result.weight = lcm(pat_val.weight, pat_func.weight); + return result; } /** @@ -164,7 +170,9 @@ export class Pattern { } return haps; }; - return new Pattern(query); + const result = new Pattern(query); + result.weight = this.weight; + return result; } /** @@ -195,7 +203,9 @@ export class Pattern { } return haps; }; - return new Pattern(query); + const result = new Pattern(query); + result.weight = pat_val.weight; + return result; } bindWhole(choose_whole, func) { @@ -1340,6 +1350,13 @@ export function fastcat(...pats) { return result; } +/** + * Concatenates patterns beatwise, similar to `timeCat`, but if an argument is a list, the whole pattern will be repeated for each element in the list. + * + * @return {Pattern} + * @example + * beatCat(["bd cp", "mt"], "bd").sound() + */ export function beatCat(...groups) { groups = groups.map((a) => (Array.isArray(a) ? a.map(reify) : [reify(a)])); @@ -1386,6 +1403,12 @@ function _sequenceCount(x) { return [reify(x), 1]; } +/** + * Speeds a pattern up or down, to fit to the given metrical 'weight'. + * @example + * s("bd sd cp").reweight(4) + * // The same as s("{bd sd cp}%4") + */ export const reweight = register('reweight', function (targetWeight, pat) { return pat.fast(Fraction(targetWeight).div(pat.weight)); }); diff --git a/packages/core/test/controls.test.mjs b/packages/core/test/controls.test.mjs index 69d63645a..387e506f7 100644 --- a/packages/core/test/controls.test.mjs +++ b/packages/core/test/controls.test.mjs @@ -4,9 +4,10 @@ Copyright (C) 2023 Strudel contributors - see . */ -import { s } from '../controls.mjs'; +import { s, pan } from '../controls.mjs'; import { mini } from '../../mini/mini.mjs'; import { describe, it, expect } from 'vitest'; +import Fraction from '../fraction.mjs'; describe('controls', () => { it('should support controls', () => { @@ -29,4 +30,13 @@ describe('controls', () => { expect(s(mini('bd').pan(1)).firstCycleValues).toEqual([{ s: 'bd', pan: 1 }]); expect(s(mini('bd:1').pan(1)).firstCycleValues).toEqual([{ s: 'bd', n: 1, pan: 1 }]); }); + it('preserves weight of the left pattern', () => { + expect(s(mini('bd cp mt').pan(mini('1 2 3 4'))).weight).toEqual(Fraction(3)); + }); + it('preserves weight of the right pattern for .out', () => { + expect(s(mini('bd cp mt').set.out(pan(mini('1 2 3 4')))).weight).toEqual(Fraction(4)); + }); + it('combines weight of the pattern for .mix as lcm', () => { + expect(s(mini('bd cp mt').set.mix(pan(mini('1 2 3 4')))).weight).toEqual(Fraction(12)); + }); }); diff --git a/test/__snapshots__/examples.test.mjs.snap b/test/__snapshots__/examples.test.mjs.snap index 9a470d07d..5bcdd3650 100644 --- a/test/__snapshots__/examples.test.mjs.snap +++ b/test/__snapshots__/examples.test.mjs.snap @@ -954,6 +954,31 @@ exports[`runs examples > example "bank" example index 0 1`] = ` ] `; +exports[`runs examples > example "beatCat" example index 0 1`] = ` +[ + "[ 0/1 → 1/5 | s:bd ]", + "[ 1/5 → 2/5 | s:cp ]", + "[ 2/5 → 3/5 | s:bd ]", + "[ 3/5 → 4/5 | s:mt ]", + "[ 4/5 → 1/1 | s:bd ]", + "[ 1/1 → 6/5 | s:bd ]", + "[ 6/5 → 7/5 | s:cp ]", + "[ 7/5 → 8/5 | s:bd ]", + "[ 8/5 → 9/5 | s:mt ]", + "[ 9/5 → 2/1 | s:bd ]", + "[ 2/1 → 11/5 | s:bd ]", + "[ 11/5 → 12/5 | s:cp ]", + "[ 12/5 → 13/5 | s:bd ]", + "[ 13/5 → 14/5 | s:mt ]", + "[ 14/5 → 3/1 | s:bd ]", + "[ 3/1 → 16/5 | s:bd ]", + "[ 16/5 → 17/5 | s:cp ]", + "[ 17/5 → 18/5 | s:bd ]", + "[ 18/5 → 19/5 | s:mt ]", + "[ 19/5 → 4/1 | s:bd ]", +] +`; + exports[`runs examples > example "begin" example index 0 1`] = ` [ "[ 0/1 → 1/2 | s:rave begin:0 ]", From f951640748108abec84a14a22a1db50a555db4e9 Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Fri, 15 Mar 2024 16:11:40 +0000 Subject: [PATCH 18/22] calculate lcm of weights as rationals --- packages/core/fraction.mjs | 4 +++ packages/core/pattern.mjs | 19 +++--------- packages/core/util.mjs | 37 ++++++++++++----------- test/__snapshots__/examples.test.mjs.snap | 21 +++++++++++++ 4 files changed, 48 insertions(+), 33 deletions(-) diff --git a/packages/core/fraction.mjs b/packages/core/fraction.mjs index 3af73e0ee..b8843cf42 100644 --- a/packages/core/fraction.mjs +++ b/packages/core/fraction.mjs @@ -83,6 +83,10 @@ export const gcd = (...fractions) => { return fractions.reduce((gcd, fraction) => gcd.gcd(fraction), fraction(1)); }; +export const lcm = (...fractions) => { + return fractions.reduce((lcm, fraction) => lcm.lcm(fraction), fraction(1)); +}; + fraction._original = Fraction; export default fraction; diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index d10d56390..1f9cdc049 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -5,23 +5,12 @@ This program is free software: you can redistribute it and/or modify it under th */ import TimeSpan from './timespan.mjs'; -import Fraction from './fraction.mjs'; +import Fraction, { lcm } from './fraction.mjs'; import Hap from './hap.mjs'; import State from './state.mjs'; import { unionWithObj } from './value.mjs'; -import { - compose, - removeUndefineds, - flatten, - id, - listRange, - curry, - _mod, - numeralArgs, - parseNumeral, - lcm, -} from './util.mjs'; +import { compose, removeUndefineds, flatten, id, listRange, curry, _mod, numeralArgs, parseNumeral } from './util.mjs'; import drawLine from './drawLine.mjs'; import { logger } from './logger.mjs'; @@ -136,6 +125,7 @@ export class Pattern { return span_a.intersection_e(span_b); }; const result = pat_func.appWhole(whole_func, pat_val); + console.log('ah'); result.weight = lcm(pat_val.weight, pat_func.weight); return result; } @@ -1360,9 +1350,8 @@ export function fastcat(...pats) { export function beatCat(...groups) { groups = groups.map((a) => (Array.isArray(a) ? a.map(reify) : [reify(a)])); - const weights = groups.map((a) => a.map((elem) => elem.weight)); + const cycles = lcm(...groups.map((x) => Fraction(x.length))); - const cycles = lcm(...groups.map((x) => x.length)); let result = []; for (let cycle = 0; cycle < cycles; ++cycle) { result.push(...groups.map((x) => (x.length == 0 ? silence : x[cycle % x.length]))); diff --git a/packages/core/util.mjs b/packages/core/util.mjs index a9fd1ae92..2c7b3d712 100644 --- a/packages/core/util.mjs +++ b/packages/core/util.mjs @@ -324,21 +324,22 @@ export function objectMap(obj, fn) { return Object.fromEntries(Object.entries(obj).map(([k, v], i) => [k, fn(v, k, i)])); } -// greatest common divisor -export const gcd = function (x, y, ...z) { - if (!y && z.length > 0) { - return gcd(x, ...z); - } - if (!y) { - return x; - } - return gcd(y, x % y, ...z); -}; - -// lowest common multiple -export const lcm = function (x, y, ...z) { - if (z.length == 0) { - return (x * y) / gcd(x, y); - } - return lcm((x * y) / gcd(x, y), ...z); -}; +// Floating point versions, see Fraction for rational versions +// // greatest common divisor +// export const gcd = function (x, y, ...z) { +// if (!y && z.length > 0) { +// return gcd(x, ...z); +// } +// if (!y) { +// return x; +// } +// return gcd(y, x % y, ...z); +// }; + +// // lowest common multiple +// export const lcm = function (x, y, ...z) { +// if (z.length == 0) { +// return (x * y) / gcd(x, y); +// } +// return lcm((x * y) / gcd(x, y), ...z); +// }; diff --git a/test/__snapshots__/examples.test.mjs.snap b/test/__snapshots__/examples.test.mjs.snap index 5bcdd3650..7e971aebe 100644 --- a/test/__snapshots__/examples.test.mjs.snap +++ b/test/__snapshots__/examples.test.mjs.snap @@ -5523,6 +5523,27 @@ exports[`runs examples > example "rev" example index 0 1`] = ` ] `; +exports[`runs examples > example "reweight" example index 0 1`] = ` +[ + "[ 0/1 → 1/4 | s:bd ]", + "[ 1/4 → 1/2 | s:sd ]", + "[ 1/2 → 3/4 | s:cp ]", + "[ 3/4 → 1/1 | s:bd ]", + "[ 1/1 → 5/4 | s:sd ]", + "[ 5/4 → 3/2 | s:cp ]", + "[ 3/2 → 7/4 | s:bd ]", + "[ 7/4 → 2/1 | s:sd ]", + "[ 2/1 → 9/4 | s:cp ]", + "[ 9/4 → 5/2 | s:bd ]", + "[ 5/2 → 11/4 | s:sd ]", + "[ 11/4 → 3/1 | s:cp ]", + "[ 3/1 → 13/4 | s:bd ]", + "[ 13/4 → 7/2 | s:sd ]", + "[ 7/2 → 15/4 | s:cp ]", + "[ 15/4 → 4/1 | s:bd ]", +] +`; + exports[`runs examples > example "ribbon" example index 0 1`] = ` [ "[ 0/1 → 1/2 | note:d ]", From 94479a99e308d61a11e8fb3c6567ce0cacbcf2be Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Fri, 15 Mar 2024 17:07:29 +0000 Subject: [PATCH 19/22] some weight preservation, and use lcm for weight of a stack --- packages/core/pattern.mjs | 133 ++++++++++++++++++++++++-------------- 1 file changed, 86 insertions(+), 47 deletions(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 1f9cdc049..81a197185 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -43,6 +43,11 @@ export class Pattern { this.__weight = Fraction(weight); } + setWeight(weight) { + this.weight = weight; + return this; + } + ////////////////////////////////////////////////////////////////////// // Haskell-style functor, applicative and monadic operations @@ -1213,7 +1218,9 @@ export function stack(...pats) { // Array test here is to avoid infinite recursions.. pats = pats.map((pat) => (Array.isArray(pat) ? sequence(...pat) : reify(pat))); const query = (state) => flatten(pats.map((pat) => pat.query(state))); - return new Pattern(query); + const result = new Pattern(query); + result.weight = lcm(...pats.map((pat) => pat.weight)); + return result; } /** Concatenation: combines a list of patterns, switching between them successively, one per cycle: @@ -1511,7 +1518,7 @@ export const func = curry((a, b) => reify(b).func(a)); * @noAutocomplete * */ -export function register(name, func, patternify = true) { +export function register(name, func, patternify = true, preserveWeight = false) { if (Array.isArray(name)) { const result = {}; for (const name_item of name) { @@ -1526,29 +1533,39 @@ export function register(name, func, patternify = true) { pfunc = function (...args) { args = args.map(reify); const pat = args[args.length - 1]; + let result; + if (arity === 1) { - return func(pat); + result = func(pat); + } else { + const firstArgs = args.slice(0, -1); + + if (firstArgs.every((arg) => arg.__pure != undefined)) { + const pureArgs = firstArgs.map((arg) => arg.__pure); + result = func(...pureArgs, pat); + } else { + const [left, ...right] = firstArgs; + + let mapFn = (...args) => { + return func(...args, pat); + }; + mapFn = curry(mapFn, null, arity - 1); + result = right.reduce((acc, p) => acc.appLeft(p), left.fmap(mapFn)).innerJoin(); + } } - - const firstArgs = args.slice(0, -1); - - if (firstArgs.every((arg) => arg.__pure != undefined)) { - const pureArgs = firstArgs.map((arg) => arg.__pure); - return func(...pureArgs, pat); + if (preserveWeight) { + result.weight = pat.weight; } - - const [left, ...right] = firstArgs; - - let mapFn = (...args) => { - return func(...args, pat); - }; - mapFn = curry(mapFn, null, arity - 1); - return right.reduce((acc, p) => acc.appLeft(p), left.fmap(mapFn)).innerJoin(); + return result; }; } else { pfunc = function (...args) { args = args.map(reify); - return func(...args); + const result = func(...args); + if (preserveWeight) { + result.weight = args[args.length - 1].weight; + } + return result; }; } @@ -1783,7 +1800,9 @@ export const { focusSpan, focusspan } = register(['focusSpan', 'focusspan'], fun * s("bd ~ sd cp").ply("<1 2 3>") */ export const ply = register('ply', function (factor, pat) { - return pat.fmap((x) => pure(x)._fast(factor)).squeezeJoin(); + const result = pat.fmap((x) => pure(x)._fast(factor)).squeezeJoin(); + result.weight = pat.weight.mul(factor); + return result; }); /** @@ -1930,10 +1949,15 @@ export const cpm = register('cpm', function (cpm, pat) { * @example * "bd ~".stack("hh ~".early(.1)).s() */ -export const early = register('early', function (offset, pat) { - offset = Fraction(offset); - return pat.withQueryTime((t) => t.add(offset)).withHapTime((t) => t.sub(offset)); -}); +export const early = register( + 'early', + function (offset, pat) { + offset = Fraction(offset); + return pat.withQueryTime((t) => t.add(offset)).withHapTime((t) => t.sub(offset)); + }, + true, + true, +); /** * Nudge a pattern to start later in time. Equivalent of Tidal's ~> operator @@ -1945,10 +1969,15 @@ export const early = register('early', function (offset, pat) { * @example * "bd ~".stack("hh ~".late(.1)).s() */ -export const late = register('late', function (offset, pat) { - offset = Fraction(offset); - return pat._early(Fraction(0).sub(offset)); -}); +export const late = register( + 'late', + function (offset, pat) { + offset = Fraction(offset); + return pat._early(Fraction(0).sub(offset)); + }, + true, + true, +); /** * Plays a portion of a pattern, specified by the beginning and end of a time span. The new resulting pattern is played over the time period of the original pattern: @@ -2055,24 +2084,29 @@ export const brak = register('brak', function (pat) { * @example * note("c d e g").rev() */ -export const rev = register('rev', function (pat) { - const query = function (state) { - const span = state.span; - const cycle = span.begin.sam(); - const next_cycle = span.begin.nextSam(); - const reflect = function (to_reflect) { - const reflected = to_reflect.withTime((time) => cycle.add(next_cycle.sub(time))); - // [reflected.begin, reflected.end] = [reflected.end, reflected.begin] -- didn't work - const tmp = reflected.begin; - reflected.begin = reflected.end; - reflected.end = tmp; - return reflected; +export const rev = register( + 'rev', + function (pat) { + const query = function (state) { + const span = state.span; + const cycle = span.begin.sam(); + const next_cycle = span.begin.nextSam(); + const reflect = function (to_reflect) { + const reflected = to_reflect.withTime((time) => cycle.add(next_cycle.sub(time))); + // [reflected.begin, reflected.end] = [reflected.end, reflected.begin] -- didn't work + const tmp = reflected.begin; + reflected.begin = reflected.end; + reflected.end = tmp; + return reflected; + }; + const haps = pat.query(state.setSpan(reflect(span))); + return haps.map((hap) => hap.withSpan(reflect)); }; - const haps = pat.query(state.setSpan(reflect(span))); - return haps.map((hap) => hap.withSpan(reflect)); - }; - return new Pattern(query).splitQueries(); -}); + return new Pattern(query).splitQueries(); + }, + false, + true, +); /** Like press, but allows you to specify the amount by which each * event is shifted. pressBy(0.5) is the same as press, while @@ -2217,9 +2251,14 @@ const _iter = function (times, pat, back = false) { ); }; -export const iter = register('iter', function (times, pat) { - return _iter(times, pat, false); -}); +export const iter = register( + 'iter', + function (times, pat) { + return _iter(times, pat, false); + }, + true, + true, +); /** * Like `iter`, but plays the subdivisions in reverse order. Known as iter' in tidalcycles From 86f9dcd08fb0f4f4895376930fe0b39b07eca94d Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 15 Mar 2024 21:59:32 +0000 Subject: [PATCH 20/22] more weight preservation --- packages/core/pattern.mjs | 114 ++++++++++++++++++---------- packages/core/test/pattern.test.mjs | 19 +++++ 2 files changed, 91 insertions(+), 42 deletions(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 81a197185..e425894de 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -2006,14 +2006,19 @@ export const { zoomArc, zoomarc } = register(['zoomArc', 'zoomarc'], function (a * @example * s("lt ht mt cp, [hh oh]*2").linger("<1 .5 .25 .125>") */ -export const linger = register('linger', function (t, pat) { - if (t == 0) { - return silence; - } else if (t < 0) { - return pat._zoom(t.add(1), 1)._slow(t); - } - return pat._zoom(0, t)._slow(t); -}); +export const linger = register( + 'linger', + function (t, pat) { + if (t == 0) { + return silence; + } else if (t < 0) { + return pat._zoom(t.add(1), 1)._slow(t); + } + return pat._zoom(0, t)._slow(t); + }, + true, + true, +); /** * Samples the pattern at a rate of n events per cycle. Useful for turning a continuous pattern into a discrete one. @@ -2022,7 +2027,7 @@ export const linger = register('linger', function (t, pat) { * note(saw.range(40,52).segment(24)) */ export const segment = register('segment', function (rate, pat) { - return pat.struct(pure(true)._fast(rate)); + return pat.struct(pure(true)._fast(rate)).setWeight(rate); }); /** @@ -2032,10 +2037,15 @@ export const segment = register('segment', function (rate, pat) { * @example * s("bd").struct("1 0 0 1 0 0 1 0".lastOf(4, invert)) */ -export const { invert, inv } = register(['invert', 'inv'], function (pat) { - // Swap true/false in a binary pattern - return pat.fmap((x) => !x); -}); +export const { invert, inv } = register( + ['invert', 'inv'], + function (pat) { + // Swap true/false in a binary pattern + return pat.fmap((x) => !x); + }, + true, + true, +); /** * Applies the given function whenever the given pattern is in a true state. @@ -2148,9 +2158,14 @@ Pattern.prototype.hush = function () { * @example * note("c d e g").palindrome() */ -export const palindrome = register('palindrome', function (pat) { - return pat.lastOf(2, rev); -}); +export const palindrome = register( + 'palindrome', + function (pat) { + return pat.lastOf(2, rev); + }, + true, + true, +); /** * Jux with adjustable stereo width. 0 = mono, 1 = full stereo. @@ -2269,9 +2284,14 @@ export const iter = register( * @example * note("0 1 2 3".scale('A minor')).iterBack(4) */ -export const { iterBack, iterback } = register(['iterBack', 'iterback'], function (times, pat) { - return _iter(times, pat, true); -}); +export const { iterBack, iterback } = register( + ['iterBack', 'iterback'], + function (times, pat) { + return _iter(times, pat, true); + }, + true, + true, +); /** * Repeats each cycle the given number of times. @@ -2281,11 +2301,14 @@ export const { iterBack, iterback } = register(['iterBack', 'iterback'], functio * @example * note(irand(12).add(34)).segment(4).repeatCycles(2).s("gm_acoustic_guitar_nylon") */ -const _repeatCycles = function (n, pat) { - return slowcat(...Array(n).fill(pat)); -}; - -const { repeatCycles } = register('repeatCycles', _repeatCycles); +export const { repeatCycles } = register( + 'repeatCycles', + function (n, pat) { + return slowcat(...Array(n).fill(pat)); + }, + true, + true, +); /** * Divides a pattern into a given number of parts, then cycles through those parts in turn, applying the given function to each part in turn (one part per cycle). @@ -2309,7 +2332,7 @@ const _chunk = function (n, func, pat, back = false, fast = false) { return pat.when(binary_pat, func); }; -const { chunk, slowchunk, slowChunk } = register(['chunk', 'slowchunk', 'slowChunk'], function (n, func, pat) { +export const { chunk, slowchunk, slowChunk } = register(['chunk', 'slowchunk', 'slowChunk'], function (n, func, pat) { return _chunk(n, func, pat, false, false); }); @@ -2344,10 +2367,15 @@ export const { fastchunk, fastChunk } = register(['fastchunk', 'fastChunk'], fun }); // TODO - redefine elsewhere in terms of mask -export const bypass = register('bypass', function (on, pat) { - on = Boolean(parseInt(on)); - return on ? silence : pat; -}); +export const bypass = register( + 'bypass', + function (on, pat) { + on = Boolean(parseInt(on)); + return on ? silence : pat; + }, + true, + true, +); /** * Loops the pattern inside at `offset` for `cycles`. @@ -2404,7 +2432,7 @@ export const chop = register('chop', function (n, pat) { const func = function (o) { return sequence(slice_objects.map((slice_o) => Object.assign({}, o, slice_o))); }; - return pat.squeezeBind(func); + return pat.squeezeBind(func).setWeight(pat.weight.mul(n)); }); /** @@ -2456,17 +2484,19 @@ const _loopAt = function (factor, pat, cps = 0.5) { export const slice = register( 'slice', function (npat, ipat, opat) { - return npat.innerBind((n) => - ipat.outerBind((i) => - opat.outerBind((o) => { - // If it's not an object, assume it's a string and make it a 's' control parameter - o = o instanceof Object ? o : { s: o }; - const begin = Array.isArray(n) ? n[i] : i / n; - const end = Array.isArray(n) ? n[i + 1] : (i + 1) / n; - return pure({ begin, end, _slices: n, ...o }); - }), - ), - ); + return npat + .innerBind((n) => + ipat.outerBind((i) => + opat.outerBind((o) => { + // If it's not an object, assume it's a string and make it a 's' control parameter + o = o instanceof Object ? o : { s: o }; + const begin = Array.isArray(n) ? n[i] : i / n; + const end = Array.isArray(n) ? n[i + 1] : (i + 1) / n; + return pure({ begin, end, _slices: n, ...o }); + }), + ), + ) + .setWeight(ipat.weight); }, false, // turns off auto-patternification ); @@ -2497,7 +2527,7 @@ export const splice = register( ...v, })), ); - }); + }).setWeight(ipat.weight); }, false, // turns off auto-patternification ); diff --git a/packages/core/test/pattern.test.mjs b/packages/core/test/pattern.test.mjs index e810ab0c1..c81f1a8ac 100644 --- a/packages/core/test/pattern.test.mjs +++ b/packages/core/test/pattern.test.mjs @@ -1119,4 +1119,23 @@ describe('Pattern', () => { ); }); }); + describe('weight', () => { + it('Is correctly preserved/calculated through transformations', () => { + expect(sequence(0, 1, 2, 3).linger(4).weight).toStrictEqual(Fraction(4)); + expect(sequence(0, 1, 2, 3).iter(4).weight).toStrictEqual(Fraction(4)); + expect(sequence(0, 1, 2, 3).fast(4).weight).toStrictEqual(Fraction(16)); + expect(sequence(0, 1, 2, 3).hurry(4).weight).toStrictEqual(Fraction(16)); + expect(sequence(0, 1, 2, 3).rev().weight).toStrictEqual(Fraction(4)); + expect(sequence(1).segment(10).weight).toStrictEqual(Fraction(10)); + expect(sequence(1, 0, 1).invert().weight).toStrictEqual(Fraction(3)); + expect(sequence({ s: 'bev' }, { s: 'amenbreak' }).chop(4).weight).toStrictEqual(Fraction(8)); + expect(sequence({ s: 'bev' }, { s: 'amenbreak' }).striate(4).weight).toStrictEqual(Fraction(8)); + expect(sequence({ s: 'bev' }, { s: 'amenbreak' }).slice(4, sequence(0, 1, 2, 3)).weight).toStrictEqual( + Fraction(4), + ); + expect(sequence({ s: 'bev' }, { s: 'amenbreak' }).splice(4, sequence(0, 1, 2, 3)).weight).toStrictEqual( + Fraction(4), + ); + }); + }); }); From 747b108186e744f0ce2511b987f68ecd704e6f44 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 16 Mar 2024 12:35:19 +0000 Subject: [PATCH 21/22] weight for jux, and add some simple stack alignments --- packages/core/fraction.mjs | 5 ++++ packages/core/pattern.mjs | 59 ++++++++++++++++++++++++++++++++++---- 2 files changed, 59 insertions(+), 5 deletions(-) diff --git a/packages/core/fraction.mjs b/packages/core/fraction.mjs index b8843cf42..43dc84ef7 100644 --- a/packages/core/fraction.mjs +++ b/packages/core/fraction.mjs @@ -51,6 +51,11 @@ Fraction.prototype.max = function (other) { return this.gt(other) ? this : other; }; +Fraction.prototype.maximum = function (...others) { + others = others.map((x) => new Fraction(x)); + return others.reduce((max, other) => other.max(max), this); +}; + Fraction.prototype.min = function (other) { return this.lt(other) ? this : other; }; diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index e425894de..3ea847af0 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -130,7 +130,6 @@ export class Pattern { return span_a.intersection_e(span_b); }; const result = pat_func.appWhole(whole_func, pat_val); - console.log('ah'); result.weight = lcm(pat_val.weight, pat_func.weight); return result; } @@ -1152,16 +1151,25 @@ Pattern.prototype.factories = { // Elemental patterns +/** + * Does absolutely nothing, with a given metrical 'weight' + * @name gap + * @param {number} weight + * @example + * gap(3) // "~@3" + */ +export const gap = (weight) => new Pattern(() => [], Fraction(weight)); + /** * Does absolutely nothing.. * @name silence * @example * silence // "~" */ -export const silence = new Pattern(() => [], 1); +export const silence = gap(1); /* Like silence, but with a 'weight' (relative duration) of 0 */ -export const nothing = new Pattern(() => [], 0); +export const nothing = gap(0); /** A discrete value that repeats once per cycle. * @@ -1223,6 +1231,47 @@ export function stack(...pats) { return result; } +function _stackWith(func, pats) { + pats = pats.map((pat) => (Array.isArray(pat) ? sequence(...pat) : reify(pat))); + if (pats.length === 0) { + return silence; + } + if (pats.length === 1) { + return pats[0]; + } + const [left, ...right] = pats.map((pat) => pat.weight); + const weight = left.maximum(...right); + return stack(...func(weight, pats)); +} + +export function stackLeft(...pats) { + return _stackWith( + (weight, pats) => pats.map((pat) => (pat.weight.eq(weight) ? pat : timeCat(pat, gap(weight.sub(pat.weight))))), + pats, + ); +} + +export function stackRight(...pats) { + return _stackWith( + (weight, pats) => pats.map((pat) => (pat.weight.eq(weight) ? pat : timeCat(gap(weight.sub(pat.weight)), pat))), + pats, + ); +} + +export function stackCentre(...pats) { + return _stackWith( + (weight, pats) => + pats.map((pat) => { + if (pat.weight.eq(weight)) { + return pat; + } + const g = gap(weight.sub(pat.weight).div(2)); + return timeCat(g, pat, g); + }), + pats, + ); +} + /** Concatenation: combines a list of patterns, switching between them successively, one per cycle: * * synonyms: `cat` @@ -2183,9 +2232,9 @@ export const { juxBy, juxby } = register(['juxBy', 'juxby'], function (by, func, return dflt; }; const left = pat.withValue((val) => Object.assign({}, val, { pan: elem_or(val, 'pan', 0.5) - by })); - const right = pat.withValue((val) => Object.assign({}, val, { pan: elem_or(val, 'pan', 0.5) + by })); + const right = func(pat.withValue((val) => Object.assign({}, val, { pan: elem_or(val, 'pan', 0.5) + by }))); - return stack(left, func(right)); + return stack(left, right).setWeight(lcm(left.weight, right.weight)); }); /** From 34306a9403fe7384f488c858811240f6387b6f87 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 16 Mar 2024 16:44:46 +0000 Subject: [PATCH 22/22] stackBy for patterning stack alignments --- packages/core/pattern.mjs | 17 +++++++++++++++++ test/__snapshots__/examples.test.mjs.snap | 2 ++ 2 files changed, 19 insertions(+) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 3ea847af0..a86290fda 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -1272,6 +1272,23 @@ export function stackCentre(...pats) { ); } +export function stackBy(by, ...pats) { + const [left, ...right] = pats.map((pat) => pat.weight); + const weight = left.maximum(...right); + const lookup = { + centre: stackCentre, + left: stackLeft, + right: stackRight, + expand: stack, + beat: (...args) => polymeterSteps(weight, ...args), + }; + return by + .inhabit(lookup) + .fmap((func) => func(...pats)) + .innerJoin() + .setWeight(weight); +} + /** Concatenation: combines a list of patterns, switching between them successively, one per cycle: * * synonyms: `cat` diff --git a/test/__snapshots__/examples.test.mjs.snap b/test/__snapshots__/examples.test.mjs.snap index 7e971aebe..3c96b6bd9 100644 --- a/test/__snapshots__/examples.test.mjs.snap +++ b/test/__snapshots__/examples.test.mjs.snap @@ -2843,6 +2843,8 @@ exports[`runs examples > example "gain" example index 0 1`] = ` ] `; +exports[`runs examples > example "gap" example index 0 1`] = `[]`; + exports[`runs examples > example "hpattack" example index 0 1`] = ` [ "[ 0/1 → 1/4 | note:c2 s:sawtooth hcutoff:500 hpattack:0.5 hpenv:4 ]",