mirror of
https://github.com/eliasstepanik/strudel-docker.git
synced 2026-01-19 09:38:38 +00:00
p and q methods + all function
This commit is contained in:
parent
ee7cd8cd4c
commit
a7b799f154
@ -47,10 +47,5 @@ export const evaluate = async (code, transpiler) => {
|
|||||||
// if no transpiler is given, we expect a single instruction (!wrapExpression)
|
// if no transpiler is given, we expect a single instruction (!wrapExpression)
|
||||||
const options = { wrapExpression: !!transpiler };
|
const options = { wrapExpression: !!transpiler };
|
||||||
let evaluated = await safeEval(code, options);
|
let evaluated = await safeEval(code, options);
|
||||||
if (!isPattern(evaluated)) {
|
|
||||||
console.log('evaluated', evaluated);
|
|
||||||
const message = `got "${typeof evaluated}" instead of pattern`;
|
|
||||||
throw new Error(message + (typeof evaluated === 'function' ? ', did you forget to call a function?' : '.'));
|
|
||||||
}
|
|
||||||
return { mode: 'javascript', pattern: evaluated, meta };
|
return { mode: 'javascript', pattern: evaluated, meta };
|
||||||
};
|
};
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { evaluate as _evaluate } from './evaluate.mjs';
|
|||||||
import { logger } from './logger.mjs';
|
import { logger } from './logger.mjs';
|
||||||
import { setTime } from './time.mjs';
|
import { setTime } from './time.mjs';
|
||||||
import { evalScope } from './evaluate.mjs';
|
import { evalScope } from './evaluate.mjs';
|
||||||
import { register } from './pattern.mjs';
|
import { register, Pattern, isPattern } from './pattern.mjs';
|
||||||
|
|
||||||
export function repl({
|
export function repl({
|
||||||
interval,
|
interval,
|
||||||
@ -24,7 +24,8 @@ export function repl({
|
|||||||
getTime,
|
getTime,
|
||||||
onToggle,
|
onToggle,
|
||||||
});
|
});
|
||||||
let playPatterns = [];
|
let pPatterns = {};
|
||||||
|
let allTransform;
|
||||||
const setPattern = (pattern, autostart = true) => {
|
const setPattern = (pattern, autostart = true) => {
|
||||||
pattern = editPattern?.(pattern) || pattern;
|
pattern = editPattern?.(pattern) || pattern;
|
||||||
scheduler.setPattern(pattern, autostart);
|
scheduler.setPattern(pattern, autostart);
|
||||||
@ -36,10 +37,18 @@ export function repl({
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
await beforeEval?.({ code });
|
await beforeEval?.({ code });
|
||||||
playPatterns = [];
|
pPatterns = {};
|
||||||
|
allTransform = undefined;
|
||||||
let { pattern, meta } = await _evaluate(code, transpiler);
|
let { pattern, meta } = await _evaluate(code, transpiler);
|
||||||
if (playPatterns.length) {
|
if (Object.keys(pPatterns).length) {
|
||||||
pattern = pattern.stack(...playPatterns);
|
pattern = stack(...Object.values(pPatterns));
|
||||||
|
if (allTransform) {
|
||||||
|
pattern = allTransform(pattern);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!isPattern(pattern)) {
|
||||||
|
const message = `got "${typeof evaluated}" instead of pattern`;
|
||||||
|
throw new Error(message + (typeof evaluated === 'function' ? ', did you forget to call a function?' : '.'));
|
||||||
}
|
}
|
||||||
logger(`[eval] code updated`);
|
logger(`[eval] code updated`);
|
||||||
setPattern(pattern, autostart);
|
setPattern(pattern, autostart);
|
||||||
@ -62,10 +71,25 @@ export function repl({
|
|||||||
return pat.loopAtCps(cycles, scheduler.cps);
|
return pat.loopAtCps(cycles, scheduler.cps);
|
||||||
});
|
});
|
||||||
|
|
||||||
const play = register('play', (pat) => {
|
Pattern.prototype.p = function (id) {
|
||||||
playPatterns.push(pat);
|
pPatterns[id] = this;
|
||||||
return pat;
|
return this;
|
||||||
});
|
};
|
||||||
|
Pattern.prototype.q = function (id) {
|
||||||
|
return silence;
|
||||||
|
};
|
||||||
|
|
||||||
|
const all = function (transform) {
|
||||||
|
allTransform = transform;
|
||||||
|
};
|
||||||
|
|
||||||
|
for (let i = 1; i < 10; ++i) {
|
||||||
|
Object.defineProperty(Pattern.prototype, `d${i}`, {
|
||||||
|
get() {
|
||||||
|
return this.p(i);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const fit = register('fit', (pat) =>
|
const fit = register('fit', (pat) =>
|
||||||
pat.withHap((hap) =>
|
pat.withHap((hap) =>
|
||||||
@ -80,7 +104,7 @@ export function repl({
|
|||||||
evalScope({
|
evalScope({
|
||||||
loopAt,
|
loopAt,
|
||||||
fit,
|
fit,
|
||||||
play,
|
all,
|
||||||
setCps,
|
setCps,
|
||||||
setcps: setCps,
|
setcps: setCps,
|
||||||
setCpm,
|
setCpm,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user