diff --git a/docs/dist/App.js b/docs/dist/App.js index 4f71eb33..4284e687 100644 --- a/docs/dist/App.js +++ b/docs/dist/App.js @@ -4,6 +4,7 @@ import * as strudel from "../_snowpack/link/strudel.js"; import cx from "./cx.js"; import * as Tone from "../_snowpack/pkg/tone.js"; import useCycle from "./useCycle.js"; +import {tetris} from "./tunes.js"; const {Fraction, TimeSpan} = strudel; const fr = (v) => new Fraction(v); const ts = (start, end) => new TimeSpan(fr(start), fr(end)); @@ -19,12 +20,7 @@ synth.set({ } }); function App() { - const [code, setCode] = useState(`slowcat( - stack('c4','eb4','g4'), - stack('bb3','d4','f4'), - stack('ab3','c4','eb4'), - stack('g3','b3','d4') - )`); + const [code, setCode] = useState(tetris); const [log, setLog] = useState(""); const logBox = useRef(); const [error, setError] = useState(); @@ -39,7 +35,14 @@ function App() { onEvent: useCallback((time, event) => { synth.triggerAttackRelease(event.value, event.duration, time); }, []), - onQuery: useCallback((span) => pattern?.query(span) || [], [pattern]), + onQuery: useCallback((span) => { + try { + return pattern?.query(span) || []; + } catch (err) { + setError(err); + return []; + } + }, [pattern]), onSchedule: useCallback((_events, cycle2) => { logCycle(_events, cycle2); }, [pattern]), diff --git a/docs/dist/tunes.js b/docs/dist/tunes.js new file mode 100644 index 00000000..e8b14702 --- /dev/null +++ b/docs/dist/tunes.js @@ -0,0 +1,26 @@ +export const tetris = `stack(sequence( + 'e5', sequence('b4', 'c5'), 'd5', sequence('c5', 'b4'), + 'a4', sequence('a4', 'c5'), 'e5', sequence('d5', 'c5'), + 'b4', sequence(silence(), 'c5'), 'd5', 'e5', + 'c5', 'a4', 'a4', silence(), + sequence(silence(), 'd5'), sequence(silence(), 'f5'), 'a5', sequence('g5', 'f5'), + 'e5', sequence(silence(), 'c5'), 'e5', sequence('d5', 'c5'), + 'b4', sequence('b4', 'c5'), 'd5', 'e5', + 'c5', 'a4', 'a4', silence()), + sequence( + 'e2', 'e3', 'e2', 'e3', 'e2', 'e3', 'e2', 'e3', + 'a2', 'a3', 'a2', 'a3', 'a2', 'a3', 'a2', 'a3', + 'g#2', 'g#3', 'g#2', 'g#3', 'e2', 'e3', 'e2', 'e3', + 'a2', 'a3', 'a2', 'a3', 'a2', 'a3', 'b1', 'c2', + 'd2', 'd3', 'd2', 'd3', 'd2', 'd3', 'd2', 'd3', + 'c2', 'c3', 'c2', 'c3', 'c2', 'c3', 'c2', 'c3', + 'b1', 'b2', 'b1', 'b2', 'e2', 'e3', 'e2', 'e3', + 'a1', 'a2', 'a1', 'a2', 'a1', 'a2', 'a1', 'a2', + ) +)._slow(16)`; +export const spanish = `slowcat( + stack('c4','eb4','g4'), + stack('bb3','d4','f4'), + stack('ab3','c4','eb4'), + stack('g3','b3','d4') + )`;