Merge pull request 'Update modulator docstrings and allow ids to be patterns' (#1874) from glossing/pattern-ids-for-modulators into main
Reviewed-on: https://codeberg.org/uzu/strudel/pulls/1874
This commit is contained in:
commit
16524ca805
1 changed files with 17 additions and 14 deletions
|
|
@ -2844,7 +2844,7 @@ registerSubControls('lfo', [
|
||||||
['dcoffset', 'dc'],
|
['dcoffset', 'dc'],
|
||||||
['shape', 'sh'],
|
['shape', 'sh'],
|
||||||
['skew', 'sk'],
|
['skew', 'sk'],
|
||||||
['curve'],
|
['curve', 'cu'],
|
||||||
['sync', 's'],
|
['sync', 's'],
|
||||||
['fxi'],
|
['fxi'],
|
||||||
]);
|
]);
|
||||||
|
|
@ -2872,7 +2872,7 @@ registerSubControls('bmod', [
|
||||||
['fxi'],
|
['fxi'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
Pattern.prototype.modulate = function (type, config, id) {
|
Pattern.prototype.modulate = function (type, config, idPat) {
|
||||||
config = { control: undefined, ...config };
|
config = { control: undefined, ...config };
|
||||||
const modulatorKeys = ['lfo', 'env', 'bmod'];
|
const modulatorKeys = ['lfo', 'env', 'bmod'];
|
||||||
if (!modulatorKeys.includes(type)) {
|
if (!modulatorKeys.includes(type)) {
|
||||||
|
|
@ -2881,11 +2881,14 @@ Pattern.prototype.modulate = function (type, config, id) {
|
||||||
}
|
}
|
||||||
let output = this;
|
let output = this;
|
||||||
let defaultValue = undefined;
|
let defaultValue = undefined;
|
||||||
|
// Copy value into a temporary `v` container and attach a single `id` (to be shared across
|
||||||
|
// each config entry). At the output we destructure and throw away the id
|
||||||
|
output = output.fmap((v) => (id) => ({ v, id })).appLeft(reify(idPat));
|
||||||
for (const [rawKey, value] of Object.entries(config)) {
|
for (const [rawKey, value] of Object.entries(config)) {
|
||||||
const key = getMainSubcontrolName(type, rawKey);
|
const key = getMainSubcontrolName(type, rawKey);
|
||||||
const valuePat = reify(value);
|
const valuePat = reify(value);
|
||||||
output = output
|
output = output
|
||||||
.fmap((v) => (c) => {
|
.fmap(({ v, id }) => (c) => {
|
||||||
if (defaultValue === undefined) {
|
if (defaultValue === undefined) {
|
||||||
// default control to the control set just before this in the chain
|
// default control to the control set just before this in the chain
|
||||||
// e.g. pat.gain(0.5).lfo({..}) will be a gain-LFO
|
// e.g. pat.gain(0.5).lfo({..}) will be a gain-LFO
|
||||||
|
|
@ -2900,17 +2903,17 @@ Pattern.prototype.modulate = function (type, config, id) {
|
||||||
id ??= t.__ids.size;
|
id ??= t.__ids.size;
|
||||||
t[id] ??= { control: defaultValue };
|
t[id] ??= { control: defaultValue };
|
||||||
t.__ids.add(id); // keeps track of insertion order
|
t.__ids.add(id); // keeps track of insertion order
|
||||||
if (c === undefined) return v;
|
if (c === undefined) return { v, id };
|
||||||
if (key === 'control' || key === 'subControl') {
|
if (key === 'control' || key === 'subControl') {
|
||||||
t[id][key] = getControlName(c);
|
t[id][key] = getControlName(c);
|
||||||
} else {
|
} else {
|
||||||
t[id][key] = c;
|
t[id][key] = c;
|
||||||
}
|
}
|
||||||
return v;
|
return { v, id };
|
||||||
})
|
})
|
||||||
.appLeft(valuePat);
|
.appLeft(valuePat);
|
||||||
}
|
}
|
||||||
return output;
|
return output.fmap(({ v }) => v);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -2925,15 +2928,15 @@ Pattern.prototype.modulate = function (type, config, id) {
|
||||||
*
|
*
|
||||||
* @name lfo
|
* @name lfo
|
||||||
* @param {Object} config LFO configuration.
|
* @param {Object} config LFO configuration.
|
||||||
* @param {string | Pattern} [config.control] Node to modulate. Aliases: t
|
* @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, p
|
* @param {string | Pattern} [config.subControl] Sub-control name to append to the control key. Aliases: sc
|
||||||
* @param {number | Pattern} [config.rate] Modulation rate. Aliases: rate, r
|
* @param {number | Pattern} [config.rate] Modulation rate. Aliases: r
|
||||||
* @param {number | Pattern} [config.depth] Relative modulation depth. Aliases: dep, dr
|
* @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.depthabs] Absolute modulation depth. Aliases: da
|
||||||
* @param {number | Pattern} [config.dcoffset] DC offset / bias for the waveform. Aliases: dc
|
* @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.shape] Shape index. Aliases: sh
|
||||||
* @param {number | Pattern} [config.skew] Skew amount. Aliases: sk
|
* @param {number | Pattern} [config.skew] Skew amount. Aliases: sk
|
||||||
* @param {number | Pattern} [config.curve] Exponential curve amount. Aliases: c
|
* @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.sync] Tempo-synced modulation rate. Aliases: s
|
||||||
* @param {number | Pattern} [config.fxi] FX index to target
|
* @param {number | Pattern} [config.fxi] FX index to target
|
||||||
* @param {string | Pattern} id ID to use for this modulator
|
* @param {string | Pattern} id ID to use for this modulator
|
||||||
|
|
@ -2978,8 +2981,8 @@ export const lfo = (config) => pure({}).lfo(config);
|
||||||
*
|
*
|
||||||
* @name env
|
* @name env
|
||||||
* @param {Object} config Envelope configuration.
|
* @param {Object} config Envelope configuration.
|
||||||
* @param {string | Pattern} [config.control] Node to modulate. Aliases: t
|
* @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, p
|
* @param {string | Pattern} [config.subControl] Sub-control name to append to the control key. Aliases: sc
|
||||||
* @param {number | Pattern} [config.depth] Relative modulation depth. Aliases: dep, dr
|
* @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.depthabs] Absolute modulation depth. Aliases: da
|
||||||
* @param {number | Pattern} [config.attack] Time to reach depth. Aliases: att, a
|
* @param {number | Pattern} [config.attack] Time to reach depth. Aliases: att, a
|
||||||
|
|
@ -3039,8 +3042,8 @@ export const env = (config) => pure({}).env(config);
|
||||||
* @name bmod
|
* @name bmod
|
||||||
* @param {Object} config Bus modulation configuration.
|
* @param {Object} config Bus modulation configuration.
|
||||||
* @param {string | Pattern} [config.bus] Bus to get modulation signal from
|
* @param {string | Pattern} [config.bus] Bus to get modulation signal from
|
||||||
* @param {string | Pattern} [config.control] Node to modulate. Aliases: t
|
* @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, p
|
* @param {string | Pattern} [config.subControl] Sub-control name to append to the control key. Aliases: sc
|
||||||
* @param {number | Pattern} [config.depth] Relative modulation depth. Aliases: dep, dr
|
* @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.depthabs] Absolute modulation depth. Aliases: da
|
||||||
* @param {number | Pattern} [config.dc] DC offset prior to application
|
* @param {number | Pattern} [config.dc] DC offset prior to application
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue