tidy tidal package

- move tidal repl to examples
- make hs2js synchronous
This commit is contained in:
Felix Roos 2024-05-17 20:36:41 +02:00
parent d108de40d0
commit fd950d4476
12 changed files with 171 additions and 154 deletions

View file

@ -1,20 +1,4 @@
import { run, parse } from 'hs2js';
import { initStrudel, reify, late, samples, stack } from '@strudel/web';
initStrudel({
prebake: () => samples('github:tidalcycles/dirt-samples'),
});
const textarea = document.getElementById('code');
if (window.location.hash) {
textarea.value = atob(window.location.hash.slice(1));
} else {
textarea.value = 'd1 $ s "jvbass(3,8)"';
}
textarea.addEventListener('input', (e) => {
window.location.hash = btoa(e.target.value);
update();
});
update();
import { evaluate, loadParser } from 'hs2js';
function getInfixOperators() {
let operators = {
@ -47,33 +31,10 @@ function getInfixOperators() {
}
const ops = getInfixOperators();
async function update() {
let result, tree;
try {
tree = await parse(textarea.value);
} catch (err) {
console.warn('parse error');
console.error(err);
}
console.log('parsed tree');
console.log(tree.rootNode.toString());
try {
let patterns = {};
window.p = (name, pattern) => {
patterns[name] = pattern;
};
window.d1 = (pat) => window.p(1, pat);
window.d2 = (pat) => window.p(2, pat);
window.d3 = (pat) => window.p(3, pat);
window.rot = late;
result = run(tree.rootNode, window, ops);
if (Object.values(patterns).length) {
stack(...Object.values(patterns)).play();
}
} catch (err) {
console.warn('eval error');
console.error(err);
result = 'ERROR: ' + err.message;
}
document.getElementById('result').innerHTML = 'Result: ' + result;
export async function initTidal() {
return loadParser();
}
export function tidal(code) {
return evaluate(code, window, ops);
}