jevstrudel.git / packages / superdough / superdoughdata.mjs

superdoughdata.mjs - Data needed for running superdough (defaults, mappings, etc.) Copyright (C) 2025 Strudel contributors - see https://codeberg.org/uzu/strudel/src/branch/main/packages/superdough/superdoughdata.mjs This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.

Mapping from control name to webaudio node and parameter

8const CONTROL_TARGETS = {
9  stretch: { node: 'stretch', param: 'pitchFactor' },
10  gain: { node: 'gain', param: 'gain' },
11  postgain: { node: 'post', param: 'gain' },
12  pan: { node: 'pan', param: 'pan' },
13  tremolo: { node: 'tremolo', param: 'frequency' },
14  tremolosync: { node: 'tremolo', param: 'frequency' },
15  tremolodepth: { node: 'tremolo_gain', param: 'gain' },
16  tremoloskew: { node: 'tremolo', param: 'skew' },
17  tremolophase: { node: 'tremolo', param: 'phase' },
18  tremoloshape: { node: 'tremolo', param: 'shape' },

MODULATORS

21  lfo: { node: 'lfo', param: 'frequency' },
22  lfo_rate: { node: 'lfo', param: 'frequency' },
23  lfo_sync: { node: 'lfo', param: 'frequency' },
24  lfo_depth: { node: 'lfo', param: 'depth' },
25  lfo_depthabs: { node: 'lfo', param: 'depth' },
26  lfo_skew: { node: 'lfo', param: 'skew' },
27  lfo_curve: { node: 'lfo', param: 'curve' },
28  lfo_dcoffset: { node: 'lfo', param: 'dcoffset' },
29  env: { node: 'env', param: 'depth' },
30  env_attack: { node: 'env', param: 'attack' },
31  env_decay: { node: 'env', param: 'decay' },
32  env_sustain: { node: 'env', param: 'sustain' },
33  env_release: { node: 'env', param: 'release' },
34  bmod: { node: 'bmod', param: 'depth' },
35  bmod_depth: { node: 'bmod', param: 'depth' },
36  bmod_depthabs: { node: 'bmod', param: 'depth' },

LPF

39  cutoff: { node: 'lpf', param: 'frequency' },
40  resonance: { node: 'lpf', param: 'Q' },
41  lprate: { node: 'lpf_lfo', param: 'rate' },
42  lpsync: { node: 'lpf_lfo', param: 'sync' },
43  lpdepth: { node: 'lpf_lfo', param: 'depth' },
44  lpdepthfrequency: { node: 'lpf_lfo', param: 'depth' },
45  lpshape: { node: 'lpf_lfo', param: 'shape' },
46  lpdc: { node: 'lpf_lfo', param: 'dcoffset' },
47  lpskew: { node: 'lpf_lfo', param: 'skew' },

HPF

50  hcutoff: { node: 'hpf', param: 'frequency' },
51  hresonance: { node: 'hpf', param: 'Q' },
52  hprate: { node: 'hpf_lfo', param: 'rate' },
53  hpsync: { node: 'hpf_lfo', param: 'sync' },
54  hpdepth: { node: 'hpf_lfo', param: 'depth' },
55  hpdepthfrequency: { node: 'hpf_lfo', param: 'depth' },
56  hpshape: { node: 'hpf_lfo', param: 'shape' },
57  hpdc: { node: 'hpf_lfo', param: 'dcoffset' },
58  hpskew: { node: 'hpf_lfo', param: 'skew' },

BPF

61  bandf: { node: 'bpf', param: 'frequency' },
62  bandq: { node: 'bpf', param: 'Q' },
63  bprate: { node: 'bpf_lfo', param: 'rate' },
64  bpsync: { node: 'bpf_lfo', param: 'sync' },
65  bpdepth: { node: 'bpf_lfo', param: 'depth' },
66  bpdepthfrequency: { node: 'bpf_lfo', param: 'depth' },
67  bpshape: { node: 'bpf_lfo', param: 'shape' },
68  bpdc: { node: 'bpf_lfo', param: 'dcoffset' },
69  bpskew: { node: 'bpf_lfo', param: 'skew' },
71  vowel: { node: 'vowel', param: 'frequency' },

DISTORTION

74  coarse: { node: 'coarse', param: 'coarse' },
75  crush: { node: 'crush', param: 'crush' },
76  shape: { node: 'shape', param: 'shape' },
77  shapevol: { node: 'shape', param: 'postgain' },
78  distort: { node: 'distort', param: 'distort' },
79  distortvol: { node: 'distort', param: 'postgain' },
80  distorttype: { node: 'distort', param: 'distort' },

COMPRESSOR

83  compressor: { node: 'compressor', param: 'threshold' },
84  compressorRatio: { node: 'compressor', param: 'ratio' },
85  compressorKnee: { node: 'compressor', param: 'knee' },
86  compressorAttack: { node: 'compressor', param: 'attack' },
87  compressorRelease: { node: 'compressor', param: 'release' },

PHASER

90  phaserrate: { node: 'phaser_lfo', param: 'frequency' },
91  phasersweep: { node: 'phaser_lfo', param: 'depth' },
92  phasercenter: { node: 'phaser', param: 'frequency' },
93  phaserdepth: { node: 'phaser', param: 'Q' },

ORBIT EFFECTS

96  delay: { node: 'delay_mix', param: 'gain' },
97  delaytime: { node: 'delay', param: 'delayTime' },
98  delayfeedback: { node: 'delay', param: 'feedback' },
99  delaysync: { node: 'delay', param: 'delayTime' },
100  dry: { node: 'dry', param: 'gain' },
101  room: { node: 'room_mix', param: 'gain' },
102  djf: { node: 'djf', param: 'value' },
103  busgain: { node: 'bus', param: 'gain' },

SYNTHS

106  s: { node: 'source', param: 'frequency' },
107  detune: { node: 'source', param: 'freqspread' },
108  wt: { node: 'source', param: 'position' },
109  warp: { node: 'source', param: 'warp' },
110  freq: { node: 'source', param: 'frequency' },
111  note: { node: 'source', param: 'frequency' },
112  wtdc: { node: 'wt_lfo', param: 'dc' },
113  wtskew: { node: 'wt_lfo', param: 'skew' },
114  wtrate: { node: 'wt_lfo', param: 'frequency' },
115  wtsync: { node: 'wt_lfo', param: 'frequency' },
116  wtdepth: { node: 'wt_lfo', param: 'depth' },
117  warpdc: { node: 'warp_lfo', param: 'dc' },
118  warpskew: { node: 'warp_lfo', param: 'skew' },
119  warprate: { node: 'warp_lfo', param: 'frequency' },
120  warpsync: { node: 'warp_lfo', param: 'frequency' },
121  warpdepth: { node: 'warp_lfo', param: 'depth' },
122  fmi: { node: 'fm_1_gain', param: 'gain' },
123  fmi2: { node: 'fm_2_gain', param: 'gain' },
124  fmi3: { node: 'fm_3_gain', param: 'gain' },
125  fmi4: { node: 'fm_4_gain', param: 'gain' },
126  fmi5: { node: 'fm_5_gain', param: 'gain' },
127  fmi6: { node: 'fm_6_gain', param: 'gain' },
128  fmi7: { node: 'fm_7_gain', param: 'gain' },
129  fmi8: { node: 'fm_8_gain', param: 'gain' },
130  fmh: { node: 'fm_1', param: 'frequency' },
131  fmh2: { node: 'fm_2', param: 'frequency' },
132  fmh3: { node: 'fm_3', param: 'frequency' },
133  fmh4: { node: 'fm_4', param: 'frequency' },
134  fmh5: { node: 'fm_5', param: 'frequency' },
135  fmh6: { node: 'fm_6', param: 'frequency' },
136  fmh7: { node: 'fm_7', param: 'frequency' },
137  fmh8: { node: 'fm_8', param: 'frequency' },
138  pw: { node: 'source', param: 'pulsewidth' },
139  pwrate: { node: 'pw_lfo', param: 'frequency' },
140  pwsweep: { node: 'pw_lfo', param: 'depth' },
141  vib: { node: 'vib', param: 'frequency' },
142  vibmod: { node: 'vib_gain', param: 'gain' },
143  byteBeatStartTime: { node: 'source', param: 'byteBeatStartTime' },
144  spread: { node: 'source', param: 'panspread' },
145  transient: { node: 'transient', param: 'attack' },
146};
148export function getSuperdoughControlTargets() {
149  return CONTROL_TARGETS;
150}