From c1649b9dc050b40da8280a8b40ce2aaec4fcab5a Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Wed, 28 Jun 2023 22:13:05 +0200 Subject: [PATCH 1/3] - fix: loopAt for non default cps value - add fay to repitch samples to fit hap duration - add setcpm function --- packages/core/pattern.mjs | 10 +++------- packages/core/repl.mjs | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 66e75083..1d737df4 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -2276,7 +2276,7 @@ const _loopAt = function (factor, pat, cps = 1) { * s("breaks165").slice(8, "0 1 <2 2*2> 3 [4 0] 5 6 7".every(3, rev)).slow(1.5) */ -const slice = register( +export const slice = register( 'slice', function (npat, ipat, opat) { return npat.innerBind((n) => @@ -2304,7 +2304,7 @@ const slice = register( * s("breaks165").splice(8, "0 1 [2 3 0]@2 3 0@2 7").hurry(0.65) */ -const splice = register( +export const splice = register( 'splice', function (npat, ipat, opat) { const sliced = slice(npat, ipat, opat); @@ -2321,10 +2321,6 @@ const splice = register( false, // turns off auto-patternification ); -const { loopAt, loopat } = register(['loopAt', 'loopat'], function (factor, pat) { - return _loopAt(factor, pat, 1); -}); - /** * Makes the sample fit the given number of cycles and cps value, by * changing the speed. Please note that at some point cps will be @@ -2338,6 +2334,6 @@ const { loopAt, loopat } = register(['loopAt', 'loopat'], function (factor, pat) * s("rhodes").loopAtCps(4,1.5).cps(1.5) */ // TODO - global cps clock -const { loopAtCps, loopatcps } = register(['loopAtCps', 'loopatcps'], function (factor, cps, pat) { +export const { loopAtCps, loopatcps } = register(['loopAtCps', 'loopatcps'], function (factor, cps, pat) { return _loopAt(factor, pat, cps); }); diff --git a/packages/core/repl.mjs b/packages/core/repl.mjs index c88145d1..3d542a9c 100644 --- a/packages/core/repl.mjs +++ b/packages/core/repl.mjs @@ -3,6 +3,7 @@ import { evaluate as _evaluate } from './evaluate.mjs'; import { logger } from './logger.mjs'; import { setTime } from './time.mjs'; import { evalScope } from './evaluate.mjs'; +import { register } from './pattern.mjs'; export function repl({ interval, @@ -50,10 +51,32 @@ export function repl({ const start = () => scheduler.start(); const pause = () => scheduler.pause(); const setCps = (cps) => scheduler.setCps(cps); + const setCpm = (cpm) => scheduler.setCps(cpm / 60); + + // the following functions use the cps value, which is why they are defined here.. + const loopAt = register('loopAt', (cycles, pat) => { + return pat.loopAtCps(cycles, scheduler.cps); + }); + + const fay = register('fay', (pat) => + pat.withHap((hap) => + hap.withValue((v) => ({ + ...v, + speed: scheduler.cps / hap.whole.duration, // overwrite speed completely? + unit: 'c', + })), + ), + ); + evalScope({ + loopAt, + fay, setCps, setcps: setCps, + setCpm, + setcpm: setCpm, }); + return { scheduler, evaluate, start, stop, pause, setCps, setPattern }; } From d126c28b852dc94dc66114d80ef6586e3fe54ed9 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Wed, 28 Jun 2023 22:25:49 +0200 Subject: [PATCH 2/3] fix: loopAt with cps 1 for fallback --- packages/core/pattern.mjs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 1d737df4..6396d97b 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -2321,6 +2321,13 @@ export const splice = register( false, // turns off auto-patternification ); +// this function will be redefined in repl.mjs to use the correct cps value. +// It is still here to work in cases where repl.mjs is not used + +export const { loopAt, loopat } = register(['loopAt', 'loopat'], function (factor, pat) { + return _loopAt(factor, pat, 1); +}); + /** * Makes the sample fit the given number of cycles and cps value, by * changing the speed. Please note that at some point cps will be From 0fee279e3dd5dfb7058d9bcc90aa4640ac7fd311 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 29 Jun 2023 12:05:31 +0200 Subject: [PATCH 3/3] rename fay to fit --- packages/core/repl.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/repl.mjs b/packages/core/repl.mjs index 3d542a9c..93e86622 100644 --- a/packages/core/repl.mjs +++ b/packages/core/repl.mjs @@ -58,7 +58,7 @@ export function repl({ return pat.loopAtCps(cycles, scheduler.cps); }); - const fay = register('fay', (pat) => + const fit = register('fit', (pat) => pat.withHap((hap) => hap.withValue((v) => ({ ...v, @@ -70,7 +70,7 @@ export function repl({ evalScope({ loopAt, - fay, + fit, setCps, setcps: setCps, setCpm,