add fanchor

This commit is contained in:
Felix Roos 2023-09-16 01:14:14 +02:00
parent 7dbcc90450
commit e959c275fd
3 changed files with 33 additions and 4 deletions

View File

@ -586,6 +586,7 @@ const generic_params = [
*/
['bprelease', 'bpr'],
['ftype'],
['fanchor'],
/**
* Applies the cutoff frequency of the **h**igh-**p**ass **f**ilter.
*

View File

@ -78,7 +78,20 @@ export const getParamADSR = (param, attack, decay, sustain, release, min, max, b
param.linearRampToValueAtTime(min, end + Math.max(release, 0.1));
};
export function createFilter(context, type, frequency, Q, attack, decay, sustain, release, fenv, start, end) {
export function createFilter(
context,
type,
frequency,
Q,
attack,
decay,
sustain,
release,
fenv,
start,
end,
fanchor = 0.5,
) {
const filter = context.createBiquadFilter();
filter.type = type;
filter.Q.value = Q;
@ -86,8 +99,7 @@ export function createFilter(context, type, frequency, Q, attack, decay, sustain
// Apply ADSR to filter frequency
if (fenv !== 0) {
const anchor = 0.5;
const offset = fenv * anchor;
const offset = fenv * fanchor;
const min = clamp(2 ** -offset * frequency, 0, 20000);
const max = clamp(2 ** (fenv - offset) * frequency, 0, 20000);

View File

@ -179,6 +179,7 @@ export const superdough = async (value, deadline, hapDuration) => {
gain = 0.8,
// filters
ftype = '12db',
fanchor = 0.5,
// low pass
cutoff,
lpenv,
@ -270,6 +271,7 @@ export const superdough = async (value, deadline, hapDuration) => {
lpenv,
t,
t + hapDuration,
fanchor,
);
chain.push(lp());
if (ftype === '24db') {
@ -291,6 +293,7 @@ export const superdough = async (value, deadline, hapDuration) => {
hpenv,
t,
t + hapDuration,
fanchor,
);
chain.push(hp());
if (ftype === '24db') {
@ -300,7 +303,20 @@ export const superdough = async (value, deadline, hapDuration) => {
if (bandf !== undefined) {
let bp = () =>
createFilter(ac, 'bandpass', bandf, bandq, bpattack, bpdecay, bpsustain, bprelease, bpenv, t, t + hapDuration);
createFilter(
ac,
'bandpass',
bandf,
bandq,
bpattack,
bpdecay,
bpsustain,
bprelease,
bpenv,
t,
t + hapDuration,
fanchor,
);
chain.push(bp());
if (ftype === '24db') {
chain.push(bp());