From 62bf9abed336c4638bc5a2f760e74ec1b2f942e1 Mon Sep 17 00:00:00 2001 From: Aria Date: Mon, 19 Jan 2026 09:52:49 -0800 Subject: [PATCH 01/35] Add retrig option for LFOs --- packages/core/controls.mjs | 4 +++- packages/superdough/modulators.mjs | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/core/controls.mjs b/packages/core/controls.mjs index 834d963c3..a5a1c0a12 100644 --- a/packages/core/controls.mjs +++ b/packages/core/controls.mjs @@ -3046,6 +3046,7 @@ registerSubControls('lfo', [ ['skew', 'sk'], ['curve', 'cu'], ['sync', 's'], + ['retrig', 'rt'], ['fxi'], ]); registerSubControls('env', [ @@ -3132,13 +3133,14 @@ Pattern.prototype.modulate = function (type, config, idPat) { * @param {string | Pattern} [config.control] Node to modulate. Aliases: c * @param {string | Pattern} [config.subControl] Sub-control name to append to the control key. Aliases: sc * @param {number | Pattern} [config.rate] Modulation rate. Aliases: r + * @param {number | Pattern} [config.sync] Tempo-synced modulation rate. Aliases: s * @param {number | Pattern} [config.depth] Relative modulation depth. Aliases: dep, dr * @param {number | Pattern} [config.depthabs] Absolute modulation depth. Aliases: da * @param {number | Pattern} [config.dcoffset] DC offset / bias for the waveform. Aliases: dc * @param {number | Pattern} [config.shape] Shape index. Aliases: sh * @param {number | Pattern} [config.skew] Skew amount. Aliases: sk * @param {number | Pattern} [config.curve] Exponential curve amount. Aliases: cu - * @param {number | Pattern} [config.sync] Tempo-synced modulation rate. Aliases: s + * @param {number | Pattern} [config.retrig] If > 0.5, the LFO will retrigger on each event. Aliases: rt * @param {number | Pattern} [config.fxi] FX index to target * @param {string | Pattern} id ID to use for this modulator * @returns Pattern diff --git a/packages/superdough/modulators.mjs b/packages/superdough/modulators.mjs index 05674baa0..76fc4c7fd 100644 --- a/packages/superdough/modulators.mjs +++ b/packages/superdough/modulators.mjs @@ -98,6 +98,7 @@ export const connectLFO = (id, params, nodeTracker) => { fxi = 'main', depth = 1, depthabs, + retrig = 0, ...filteredParams } = params; const { targetParams, paramName } = getTargetParamsForControl(control, nodeTracker[fxi], subControl); @@ -109,7 +110,7 @@ export const connectLFO = (id, params, nodeTracker) => { const modParams = { ...filteredParams, frequency: sync !== undefined ? sync * cps : rate, - time: cycle / cps, + time: retrig > 0.5 ? 0 : cycle / cps, depth: depthValue, min, max, From 38b7bcb3d288562424e797f0ccc41111fb5a3773 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Mon, 19 Jan 2026 23:00:14 +0100 Subject: [PATCH 02/35] style tweaks --- .../repl/components/button/action-button.jsx | 9 +-- .../components/incrementor/Incrementor.jsx | 2 +- .../components/panel/AudioDeviceSelector.jsx | 4 +- .../panel/AudioEngineTargetSelector.jsx | 6 +- .../src/repl/components/panel/ExportTab.jsx | 7 +-- website/src/repl/components/panel/Forms.jsx | 2 +- .../src/repl/components/panel/PatternsTab.jsx | 2 +- .../src/repl/components/panel/Reference.jsx | 2 +- .../src/repl/components/panel/SelectInput.jsx | 20 ------- .../src/repl/components/panel/SettingsTab.jsx | 57 +++++++++++++++---- .../src/repl/components/panel/SoundsTab.jsx | 2 +- .../src/repl/components/textbox/Textbox.jsx | 14 ----- 12 files changed, 62 insertions(+), 65 deletions(-) delete mode 100644 website/src/repl/components/panel/SelectInput.jsx delete mode 100644 website/src/repl/components/textbox/Textbox.jsx diff --git a/website/src/repl/components/button/action-button.jsx b/website/src/repl/components/button/action-button.jsx index de674b696..846d36c7e 100644 --- a/website/src/repl/components/button/action-button.jsx +++ b/website/src/repl/components/button/action-button.jsx @@ -13,16 +13,13 @@ export function SpecialActionButton(props) { const { className, ...buttonProps } = props; return ( - + ); } export function ActionInput({ label, className, ...props }) { return ( -