From 7fc10552f6a8af47a650299d24e4d3e0177b18f1 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Sat, 5 Feb 2022 20:38:24 +0100 Subject: [PATCH] build --- docs/_snowpack/link/strudel.js | 44 ++++++++++++++++------------------ docs/dist/App.js | 19 +++++++++++---- docs/dist/useCycle.js | 9 +++++-- docs/global.css | 3 --- 4 files changed, 43 insertions(+), 32 deletions(-) diff --git a/docs/_snowpack/link/strudel.js b/docs/_snowpack/link/strudel.js index 81b73822..636f8060 100644 --- a/docs/_snowpack/link/strudel.js +++ b/docs/_snowpack/link/strudel.js @@ -297,12 +297,12 @@ class Pattern { return stack(this, func(this.early(time_pat))); } every(n, func) { - pats = Array(n - 1).fill(this); + const pats = Array(n - 1).fill(this); pats.unshift(this); - return slowcat(pats); + return slowcat(...pats); } append(other) { - return fastcat([this, other]); + return fastcat(...[this, other]); } rev() { var pat = this; @@ -349,29 +349,26 @@ function pure(value) { function steady(value) { return new Pattern((span) => Hap(void 0, span, value)); } -function stack(pats2) { - var pats2 = pats2.map(reify); +function stack(...pats) { + pats = pats.map(reify); var query2 = function(span) { - return flatten(pats2.map((pat) => pat.query(span))); + return flatten(pats.map((pat) => pat.query(span))); }; return new Pattern(query2); } -function slowcat(pats2) { +function slowcat(...pats) { + pats = pats.map(reify); var query2 = function(span) { - var pat = pats2[Math.floor(span.begin) % pats2.length]; + var pat = pats[Math.floor(span.begin) % pats.length]; return pat.query(span); }; return new Pattern(query2)._splitQueries(); } -function slow(...pats2) { - pats2 = pats2.map((pat) => reify(pat)); - return slowcat(pats2); +function fastcat(...pats) { + return slowcat(...pats)._fast(pats.length); } -function fastcat(pats2) { - return slowcat(pats2)._fast(pats2.length); -} -function cat(pats2) { - return fastcat(pats2); +function cat(...pats) { + return fastcat(...pats); } function _sequenceCount(x) { if (Array.isArray(x)) { @@ -381,7 +378,7 @@ function _sequenceCount(x) { if (x.length == 1) { return _sequenceCount(x[0]); } - return [fastcat(x.map((a) => _sequenceCount(a)[0])), x.length]; + return [fastcat(...x.map((a) => _sequenceCount(a)[0])), x.length]; } return [reify(x), 1]; } @@ -396,18 +393,18 @@ function polymeter(steps = 0, ...args) { if (steps == 0) { steps = seqs[0][1]; } - var pats2 = []; + var pats = []; for (var seq of seqs) { if (seq[1] == 0) { next; } if (steps == seq[1]) { - pats2.push(seq[0]); + pats.push(seq[0]); } else { - pats2.push(seq[0]._fast(Fraction(steps).div(Fraction(seq[1])))); + pats.push(seq[0]._fast(Fraction(steps).div(Fraction(seq[1])))); } } - return stack(pats2); + return stack(pats); } function silence() { return new Pattern((_) => []); @@ -418,11 +415,12 @@ export { Hap, Pattern, pure, + reify, stack, slowcat, - slow, fastcat, cat, sequence, - polymeter + polymeter, + silence }; diff --git a/docs/dist/App.js b/docs/dist/App.js index 57b010da..4f71eb33 100644 --- a/docs/dist/App.js +++ b/docs/dist/App.js @@ -8,12 +8,23 @@ const {Fraction, TimeSpan} = strudel; const fr = (v) => new Fraction(v); const ts = (start, end) => new TimeSpan(fr(start), fr(end)); const parse = (code) => { - const {sequence, stack, pure, slowcat, slow} = strudel; + const {sequence, pure, reify, slowcat, fastcat, cat, stack, silence} = strudel; return eval(code); }; -const synth = new Tone.Synth().toDestination(); +const synth = new Tone.PolySynth().toDestination(); +synth.set({ + oscillator: {type: "triangle"}, + envelope: { + release: 0.01 + } +}); function App() { - const [code, setCode] = useState("slow(sequence('c3', 'eb3', sequence('g3', 'f3')), 'g3')"); + const [code, setCode] = useState(`slowcat( + stack('c4','eb4','g4'), + stack('bb3','d4','f4'), + stack('ab3','c4','eb4'), + stack('g3','b3','d4') + )`); const [log, setLog] = useState(""); const logBox = useRef(); const [error, setError] = useState(); @@ -63,7 +74,7 @@ function App() { }, /* @__PURE__ */ React.createElement("div", { className: "absolute right-2 bottom-2 text-red-500" }, error?.message), /* @__PURE__ */ React.createElement("textarea", { - className: cx("w-full h-32 bg-slate-600", error ? "focus:ring-red-500" : "focus:ring-slate-800"), + className: cx("w-full h-64 bg-slate-600", error ? "focus:ring-red-500" : "focus:ring-slate-800"), value: code, onChange: (e) => { setLog((log2) => log2 + `${log2 ? "\n\n" : ""}✏️ edit diff --git a/docs/dist/useCycle.js b/docs/dist/useCycle.js index e0f04819..68eeb90d 100644 --- a/docs/dist/useCycle.js +++ b/docs/dist/useCycle.js @@ -17,9 +17,14 @@ function useCycle(props) { const cancelFrom = timespan.begin.valueOf(); Tone.Transport.cancel(cancelFrom); const queryNextTime = (cycle + 1) * cycleDuration - 0.1; - Tone.Transport.schedule(() => { + const delta = queryNextTime - Tone.Transport.seconds; + if (delta < 0.2) { query(cycle + 1); - }, queryNextTime); + } else { + Tone.Transport.schedule(() => { + query(cycle + 1); + }, queryNextTime); + } events?.forEach((event) => { Tone.Transport.schedule((time) => { const toneEvent = { diff --git a/docs/global.css b/docs/global.css index 7c49de98..f11c005c 100644 --- a/docs/global.css +++ b/docs/global.css @@ -611,9 +611,6 @@ select { .h-16 { height: 4rem; } -.h-32 { - height: 8rem; -} .h-64 { height: 16rem; }