Merge branch 'main' into glossing/wavetable-fm

This commit is contained in:
Switch Angel AKA Jade Rose 2025-10-13 07:05:24 +02:00
commit d5833dd475
8 changed files with 20 additions and 17 deletions

View file

@ -57,7 +57,7 @@ export class Cyclist {
} }
// query the pattern for events // query the pattern for events
const haps = this.pattern.queryArc(begin, end, { _cps: this.cps }); const haps = this.pattern.queryArc(begin, end, { _cps: this.cps, cyclist: 'cyclist' });
haps.forEach((hap) => { haps.forEach((hap) => {
if (hap.hasOnset()) { if (hap.hasOnset()) {

View file

@ -38,8 +38,7 @@ export class NeoCyclist {
if (this.started === false) { if (this.started === false) {
return; return;
} }
const haps = this.pattern.queryArc(begin, end, { _cps: this.cps, cyclist: 'neocyclist' });
const haps = this.pattern.queryArc(begin, end, { _cps: this.cps });
haps.forEach((hap) => { haps.forEach((hap) => {
if (hap.hasOnset()) { if (hap.hasOnset()) {
const timeUntilTrigger = cycleToSeconds(hap.whole.begin - this.cycle, this.cps); const timeUntilTrigger = cycleToSeconds(hap.whole.begin - this.cycle, this.cps);

View file

@ -98,10 +98,7 @@ export class Pattern {
// runs func on query state // runs func on query state
withState(func) { withState(func) {
return this.withHaps((haps, state) => { return new Pattern((state) => this.query(func(state)));
func(state);
return haps;
});
} }
/** /**

View file

@ -214,7 +214,10 @@ export function repl({
} }
let { pattern, meta } = await _evaluate(code, transpiler, transpilerOptions); let { pattern, meta } = await _evaluate(code, transpiler, transpilerOptions);
if (Object.keys(pPatterns).length) { if (Object.keys(pPatterns).length) {
let patterns = Object.values(pPatterns); let patterns = [];
for (const [key, value] of Object.entries(pPatterns)) {
patterns.push(value.withState((state) => state.setControls({ id: key })));
}
if (eachTransform) { if (eachTransform) {
// Explicit lambda so only element (not index and array) are passed // Explicit lambda so only element (not index and array) are passed
patterns = patterns.map((x) => eachTransform(x)); patterns = patterns.map((x) => eachTransform(x));
@ -228,6 +231,7 @@ export function repl({
pattern = allTransforms[i](pattern); pattern = allTransforms[i](pattern);
} }
} }
if (!isPattern(pattern)) { if (!isPattern(pattern)) {
const message = `got "${typeof evaluated}" instead of pattern`; const message = `got "${typeof evaluated}" instead of pattern`;
throw new Error(message + (typeof evaluated === 'function' ? ', did you forget to call a function?' : '.')); throw new Error(message + (typeof evaluated === 'function' ? ', did you forget to call a function?' : '.'));

View file

@ -19,9 +19,9 @@ export class State {
return this.setSpan(func(this.span)); return this.setSpan(func(this.span));
} }
// Returns new State with different controls // Returns new State with added controls.
setControls(controls) { setControls(controls) {
return new State(this.span, controls); return new State(this.span, { ...this.controls, ...controls });
} }
} }

View file

@ -82,7 +82,7 @@ Pattern.prototype.mqtt = function (
cx.connect(props); cx.connect(props);
} }
return this.withHap((hap) => { return this.withHap((hap) => {
const onTrigger = (t_deprecate, hap, currentTime, cps, targetTime) => { const onTrigger = (hap, currentTime, cps, targetTime) => {
let msg_topic = topic; let msg_topic = topic;
if (!cx || !cx.isConnected()) { if (!cx || !cx.isConnected()) {
return; return;

View file

@ -20,10 +20,13 @@ export async function prebake() {
// import('@strudel/osc'), // import('@strudel/osc'),
); );
// load samples // load samples
const ds = 'https://raw.githubusercontent.com/felixroos/dough-samples/main/'; const ds = 'https://raw.githubusercontent.com/felixroos/dough-samples/main';
// TODO: move this onto the strudel repo // TODO: move this onto the strudel repo
const ts = 'https://raw.githubusercontent.com/todepond/samples/main/'; const ts = 'https://raw.githubusercontent.com/todepond/samples/main';
const tc = 'https://raw.githubusercontent.com/tidalcycles/uzu-drumkit/main';
await Promise.all([ await Promise.all([
modulesLoading, modulesLoading,
registerSynthSounds(), registerSynthSounds(),
@ -36,9 +39,9 @@ export async function prebake() {
samples(`${ds}/tidal-drum-machines.json`), samples(`${ds}/tidal-drum-machines.json`),
samples(`${ds}/piano.json`), samples(`${ds}/piano.json`),
samples(`${ds}/Dirt-Samples.json`), samples(`${ds}/Dirt-Samples.json`),
samples(`${ds}/uzu-drumkit.json`),
samples(`${ds}/vcsl.json`), samples(`${ds}/vcsl.json`),
samples(`${ds}/mridangam.json`), samples(`${ds}/mridangam.json`),
samples(`${tc}/strudel.json`),
]); ]);
aliasBank(`${ts}/tidal-drum-machines-alias.json`); aliasBank(`${ts}/tidal-drum-machines-alias.json`);

View file

@ -44,10 +44,10 @@ export function Reference() {
return true; return true;
} }
const lowCaseSearch = search.toLowerCase(); const lowerCaseSearch = search.toLowerCase();
return ( return (
entry.name.toLowerCase().includes(lowCaseSearch) || entry.name.toLowerCase().includes(lowerCaseSearch) ||
(entry.synonyms?.some((s) => s.includes(lowCaseSearch)) ?? false) (entry.synonyms?.some((s) => s.toLowerCase().includes(lowerCaseSearch)) ?? false)
); );
}); });
}, [search]); }, [search]);