Skip to content

Commit f99557c

Browse files
committed
fix: fanchor + default fanchor to 0 (breaking change)
1 parent f785823 commit f99557c

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

packages/superdough/helpers.mjs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,20 +97,24 @@ export const getADSRValues = (params, curve = 'linear', defaultValues) => {
9797
return [Math.max(a ?? 0, envmin), Math.max(d ?? 0, envmin), Math.min(sustain, envmax), Math.max(r ?? 0, releaseMin)];
9898
};
9999

100-
export function createFilter(context, type, frequency, Q, att, dec, sus, rel, fenv, start, end, fanchor = 0.5) {
100+
export function createFilter(context, type, frequency, Q, att, dec, sus, rel, fenv, start, end, fanchor) {
101101
const curve = 'exponential';
102102
const [attack, decay, sustain, release] = getADSRValues([att, dec, sus, rel], curve, [0.005, 0.14, 0, 0.1]);
103103
const filter = context.createBiquadFilter();
104104

105105
filter.type = type;
106106
filter.Q.value = Q;
107107
filter.frequency.value = frequency;
108-
108+
// envelope is active when any of these values is set
109+
const hasEnvelope = att ?? dec ?? sus ?? rel ?? fenv;
109110
// Apply ADSR to filter frequency
110-
if (!isNaN(fenv) && fenv !== 0) {
111+
if (hasEnvelope !== undefined) {
112+
fenv = nanFallback(fenv, 1, true);
113+
fanchor = nanFallback(fanchor, 0, true);
111114
const offset = fenv * fanchor;
115+
const min = clamp(2 ** -offset * frequency, 0, 20000);
112116
const max = clamp(2 ** (fenv - offset) * frequency, 0, 20000);
113-
getParamADSR(filter.frequency, attack, decay, sustain, release, frequency, max, start, end, curve);
117+
getParamADSR(filter.frequency, attack, decay, sustain, release, min, max, start, end, curve);
114118
return filter;
115119
}
116120
return filter;

packages/superdough/superdough.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ export const superdough = async (value, deadline, hapDuration) => {
276276
density = 0.03,
277277
// filters
278278
ftype = '12db',
279-
fanchor = 0.5,
279+
fanchor = 0,
280280
// low pass
281281
cutoff,
282282
lpenv,

0 commit comments

Comments
 (0)