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
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};