diff options
Diffstat (limited to 'site/app/twirl/appdata.js')
-rw-r--r-- | site/app/twirl/appdata.js | 1427 |
1 files changed, 1427 insertions, 0 deletions
diff --git a/site/app/twirl/appdata.js b/site/app/twirl/appdata.js new file mode 100644 index 0000000..b417c3f --- /dev/null +++ b/site/app/twirl/appdata.js @@ -0,0 +1,1427 @@ +twirl.appdata = {
+ version: 1.0,
+ modulations: [
+ {
+ name: "LFO",
+ instr: "twst_mod_lfo",
+ parameters: [
+ {name: "Rate", description: "Rate in Hz", dfault: 1, min: 0.1, max: 20},
+ {name: "Base value", description: "Base value", hostrange: true},
+ {name: "Gain", description: "Gain", dfault: 0.2},
+ {preset: "wave"},
+ {name: "Min", preset: "hostrangemin", hidden: true},
+ {name: "Max", preset: "hostrangemax", hidden: true}
+ ]
+ },
+ {
+ name: "Line",
+ instr: "twst_mod_line",
+ parameters: [
+ {name: "First point", channel: "first", description: "First point value", hostrange: true, automatable: false},
+ {name: "Last point", channel: "last", description: "Last point value", hostrange: true, automatable: false},
+ ]
+ },
+ {
+ name: "Random",
+ instr: "twst_mod_random",
+ parameters: [
+ {name: "Rate", description: "Rate in Hz", min: 0.1, max: 20, dfault: 1},
+ {name: "Min", hostrange: true, dfault: "hostrangemin"},
+ {name: "Max", hostrange: true, dfault: "hostrangemax"},
+ {name: "Portamento time", channel: "porttime", description: "Value glide time in seconds", dfault: 0.1, min: 0, max: 0.5},
+
+ ]
+ },
+ {
+ name: "Jitter",
+ instr: "twst_mod_jitter",
+ parameters: [
+ {name: "Base value", description: "Base value", hostrange: true},
+ {name: "Amplitude", channel: "amp", dfault: 1},
+ {name: "Rate minimum", description: "Rate in Hz", channel: "freqmin", dfault: 1, min: 0.1, max: 20},
+ {name: "Rate maximum", description: "Rate in Hz", channel: "freqmax", dfault: 1, min: 0.1, max: 20},
+ {name: "Min", hostrange: true, dfault: "hostrangemin"},
+ {name: "Max", hostrange: true, dfault: "hostrangemax"}
+
+ ]
+ },
+ {
+ name: "Parametric jitter",
+ instr: "twst_mod_jitter2",
+ parameters: [
+ {name: "Base value", description: "Base value", hostrange: true},
+ {name: "Total amplitude", channel: "totalamp", dfault: 1},
+ {name: "Amp 1", channel: "amp1", dfault: 0.5},
+ {name: "Rate 1", description: "Rate in Hz", channel: "freq1", dfault: 1, min: 0.1, max: 20},
+ {name: "Amp 2", channel: "amp2", dfault: 0.5},
+ {name: "Rate 2", description: "Rate in Hz", channel: "freq2", dfault: 1, min: 0.1, max: 20},
+ {name: "Amp 3", channel: "amp3", dfault: 0.5},
+ {name: "Rate 3", description: "Rate in Hz", channel: "freq3", dfault: 1, min: 0.1, max: 20},
+ {name: "Min", preset: "hostrangemin", hidden: true},
+ {name: "Max", preset: "hostrangemax", hidden: true}
+ ]
+ },
+ {
+ name: "Crossadaptive RMS",
+ instr: "twst_xa_rms",
+ inputs: 2,
+ parameters: [
+ {preset: "instance", channel: "xrmsinstance"},
+ {preset: "instanceloop", channel: "xrmslooptype"},
+ {name: "Scaling", channel: "xrmsscale", description: "Scaling", hostrange: true},
+ {name: "Portamento time", channel: "porttime", description: "Value glide time in seconds", dfault: 0, min: 0, max: 0.2}
+ ]
+ },
+ {
+ name: "Crossadaptive AMDF pitch",
+ instr: "twst_xa_pitchamdf",
+ inputs: 2,
+ parameters: [
+ {preset: "instance", channel: "xpitchinstance"},
+ {preset: "instanceloop", channel: "xpitchlooptype"},
+ {name: "Scaling", channel: "xpitchscale", description: "Scaling", hostrange: true},
+ {name: "Minimum frequency", channel: "xpitchmin", description: "Minimum frequency in analysis", min: 20, max: 1000, step: 1, dfault: 20, automatable: false},
+ {name: "Maximum frequency", channel: "xpitchmax", description: "Maximum frequency in analysis", min: 1000, max: 10000, step: 1, dfault: 10000, automatable: false},
+ {name: "Portamento time", channel: "porttime", description: "Value glide time in seconds", dfault: 0, min: 0, max: 0.2},
+ ]
+ },
+ {
+ name: "Crossadaptive pitch 1",
+ instr: "twst_xa_pitch1",
+ inputs: 2,
+ parameters: [
+ {preset: "instance", channel: "xpitchinstance"},
+ {preset: "instanceloop", channel: "xpitchlooptype"},
+ {name: "Scaling", channel: "xpitchscale", description: "Scaling", hostrange: true},
+ {name: "Hop size root", channel: "xpitchhopsize", description: "Square root of hop size", min: 6, max: 12, dfault: 8, step: 1, automatable: false},
+ {name: "Portamento time", channel: "porttime", description: "Value glide time in seconds", dfault: 0, min: 0, max: 0.2},
+ ]
+ },
+ {
+ name: "Crossadaptive pitch 2",
+ instr: "twst_xa_pitch2",
+ inputs: 2,
+ parameters: [
+ {preset: "instance", channel: "xpitchinstance"},
+ {preset: "instanceloop", channel: "xpitchlooptype"},
+ {name: "Scaling", channel: "xpitchscale", description: "Scaling", hostrange: true},
+ {name: "Minimum frequency", channel: "xpitchmin", description: "Minimum frequency in analysis", min: 20, max: 1000, step: 1, dfault: 20, automatable: false},
+ {name: "Maximum frequency", channel: "xpitchmax", description: "Maximum frequency in analysis", min: 1000, max: 10000, step: 1, dfault: 10000, automatable: false},
+ {name: "Analysis period", channel: "xpitchperiod", description: "Analysis period in seconds", min: 0.001, max: 0.1, dfault: 0.05, automatable: false},
+ {name: "Amplitude threshold", channel: "xpitchampthresh", description: "Analysis amplitude threshold in decibels", min: 1, max: 30, dfault: 10, automatable: false},
+ {name: "Portamento time", channel: "porttime", description: "Value glide time in seconds", dfault: 0, min: 0, max: 0.2},
+ ]
+ },
+ {
+ name: "Crossadaptive spectral centroid",
+ instr: "twst_xa_centroid",
+ inputs: 2,
+ parameters: [
+ {preset: "instance", channel: "xcentroidinstance"},
+ {preset: "instanceloop", channel: "xcentroidlooptype"},
+ {name: "Scaling", channel: "xcentroidscale", description: "Scaling", hostrange: true},
+ {name: "Analysis period", channel: "xcentroidperiod", description: "Analysis period in seconds", min: 0.001, max: 0.3, dfault: 0.05},
+ {preset: "fftsize", channel: "xcentroidfftsize"},
+ {name: "Portamento time", channel: "porttime", description: "Value glide time in seconds", dfault: 0, min: 0, max: 0.2}
+ ]
+ },
+ ],
+ transforms: [
+ {
+ name: "General",
+ contents: [
+ {
+ name: "Reverse",
+ description: "Reverse sample region",
+ instr: "twst_tfi_reverse",
+ parameters: []
+ }
+ ]
+ },
+ {
+ name: "Generate",
+ contents: [
+ {
+ name: "Silence",
+ instr: "twst_tf_gensilence",
+ description: "Replace region with silence",
+ parameters: []
+ },
+ {
+ name: "Oscillator",
+ instr: "twst_tf_gentone",
+ description: "Simple interpolating oscillator",
+ parameters: [
+ {presetgroup: "notefreq"},
+ {preset: "amp"},
+ {preset: "wave", automatable: true},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "FM",
+ instr: "twst_tf_genfm",
+ description: "Frequency modulation synthesis",
+ parameters: [
+ {presetgroup: "notefreq"},
+ {preset: "amp"},
+ {name: "Carrier factor", channel: "carrier", min: 0.1, max: 8, dfault: 1},
+ {name: "Modulator factor", channel: "modulator", min: 0.1, max: 8, dfault: 1},
+ {name: "Modulation index", channel: "index", min: 0.1, max: 10, dfault: 2},
+ {preset: "wave"},
+ {name: "Stereo variance", channel: "stereovar", min: 0.5, max: 1.5, dfault: 1},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "FM model",
+ instr: "twst_tf_genfmmodel",
+ description: "Frequency modulation physical models",
+ parameters: [
+ {name: "Type", channel: "fmtype", options: ["Organ", "Bell", "Flute", "Rhodes", "Wurlitzer", "Random"]},
+ {presetgroup: "notefreq"},
+ {preset: "amp"},
+ {name: "Modulation index", channel: "control1", min: 0.1, max: 10, dfault: 2},
+ {name: "Oscillator crossfade", channel: "control2", min: 0.1, max: 10, dfault: 2},
+ {name: "Vibrato depth", channel: "vibdepth", min: 0, max: 1, dfault: 0.05},
+ {name: "Vibrato rate", channel: "vibrate", min: 0, max: 20, dfault: 2},
+ {preset: "wave", channel: "wave1", name: "Wave 1"},
+ {preset: "wave", channel: "wave2", name: "Wave 2"},
+ {preset: "wave", channel: "wave3", name: "Wave 3"},
+ {preset: "wave", channel: "wave4", name: "Wave 4"},
+ {preset: "wave", channel: "vibwave", name: "Vibrato wave"},
+ {name: "Stereo variance", channel: "stereovar", min: 0.5, max: 1.5, dfault: 1},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "String pluck",
+ instr: "twst_tf_genrepluck",
+ description: "String pluck physical model",
+ parameters: [
+ {presetgroup: "notefreq"},
+ {preset: "amp"},
+ {name: "Pluck point", channel: "pluckpoint", description: "String pluck point ratio", dfault: 0.3, automatable: false},
+ {name: "Pickup point", channel: "pickpoint", description: "Pickup point ratio", dfault: 0.6, automatable: false},
+ {name: "Reflection", channel: "reflection", description: "Reflection coefficient", min: 0.0001, max: 0.9999, dfault: 0.4},
+ {name: "Exciter mode", channel: "excitemode", options: ["Noise", "Oscillator"], dfault: 1},
+ {preset: "wave", channel: "excitewave", name: "Exciter waveform", conditions:[{channel: "excitemode", operator: "eq", value: 1}]},
+ {presetgroup: "notefreq", channelprepend: "excite", nameprepend: "Exciter", conditions: [{channel: "excitemode", operator: "eq", value: 1}]},
+ {name: "Exciter amplitude", channel: "exciteamp", description: "Exciter amplitude", dfault: 1, min: 0, max: 1},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Stochastic additive",
+ instr: "twst_tf_genadditive",
+ description: "Aleatoric additive synthesis",
+ parameters: [
+ {preset: "amp", automatable: false},
+ {presetgroup: "notefreq", nameprepend: "Minimum", dfault: 440, channelprepend: "min", automatable: false, lagHint: 1},
+ {presetgroup: "notefreq", nameprepend: "Maximum", dfault: 8000, channelprepend: "max", automatable: false, lagHint: -1},
+ {name: "Frequency increment", channel: "step", automatable: false, min: 1.001, max: 1.5, dfault: 1.1, lagHint: -1},
+ {name: "Frequency randomness", channel: "steprand", automatable: false, min: 1, max: 1.5, dfault: 1},
+ {name: "Amplitude increment", channel: "ampmult", automatable: false, min: 0.2, max: 1, dfault: 0.6},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Noise",
+ instr: "twst_tf_gennoise",
+ description: "Noise generation",
+ parameters: [
+ {preset: "amp"},
+ {name: "Type", options: ["White", "Pink"], description: "Type of noise"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Bamboo",
+ instr: "twst_tf_genbamboo",
+ description: "Bamboo shaker physical model",
+ parameters: [
+ {preset: "amp"},
+ {name: "Number of resonators", channel: "number", min: 0, max: 10, step: 1, dfault: 0, automatable: false},
+ {presetgroup: "notefreq", nameprepend: "Resonator 1", dfault: 440, channelprepend: "r1", automatable: false},
+ {presetgroup: "notefreq", nameprepend: "Resonator 2", dfault: 440, channelprepend: "r2", automatable: false},
+ {presetgroup: "notefreq", nameprepend: "Resonator 3", dfault: 440, channelprepend: "r3", automatable: false},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "WG bow",
+ instr: "twst_tf_genwgbow",
+ description: "Physical modelling waveguide bowed string",
+ parameters: [
+ {preset: "amp"},
+ {presetgroup: "notefreq"},
+ {name: "Bow pressure", channel: "pressure", min: 0, max: 5, dfault: 3},
+ {name: "Bow position", channel: "position", min: 0.025, max: 0.23, dfault: 0.127236},
+ {name: "Vibrato rate", channel: "vibfreq", min: 0, max: 12, dfault: 0},
+ {name: "Vibrato rate", channel: "vibamp", min: 0, max: 1, dfault: 0},
+ {name: "Vibrato waveform", preset: "wave"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Feedback",
+ instr: "twst_tf_genfeedback",
+ description: "Feedback modelling",
+ added: "2025-04-17",
+ parameters: [
+ {preset: "amp"},
+ {presetgroup: "notefreq"},
+ {name: "Feedback", min: 0.1, max: 10, dfault: 1.1},
+ {name: "Filter bandwidth", channel: "bandwidth", min: 10, max: 500, dfault: 125},
+ {name: "Post gain", channel: "postgain", min: 0.1, max: 2, dfault: 1},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Additive",
+ instr: "twst_tf_gensimpleadditive",
+ description: "Simple additive synthesis",
+ added: "2025-04-17",
+ parameters: [
+ {preset: "amp"},
+ {presetgroup: "notefreq"},
+ {name: "Frequency step multiplier", channel: "multiplier", min: 1.0001, max: 2, dfault: 1.1},
+ {name: "Frequency multiplier", channel: "stepmultiplier", min: 0.5, max: 2, dfault: 1},
+ {name: "Amplitude smoothing", channel: "ampprofile", min: 0, max: 1, step: 1, dfault: 1},
+ {name: "Harmonics", min: 2, max: 256, dfault: 64, automatable: false},
+ {presetgroup: "applymode"}
+ ]
+ }
+ /* not quite right, don't create sound as expected
+ {
+ name: "WG bowed bar",
+ instr: "twst_tf_genwgbowedbar",
+ description: "Physical modelling waveguide bowed bar",
+ parameters: [
+ {preset: "amp"},
+ {presetgroup: "notefreq"},
+ {name: "Bow pressure", channel: "pressure", min: 0, max: 5, dfault: 3},
+ {name: "Bow position", channel: "position", min: 0.025, max: 0.23, dfault: 0.127236},
+ {name: "Filter gain", channel: "filtergain", min: 0, max: 1, dfault: 0.809},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "WG brass",
+ instr: "twst_tf_genwgbrass",
+ description: "Physical modelling waveguide brass",
+ parameters: [
+ {preset: "amp"},
+ {presetgroup: "notefreq"},
+ {name: "Lip tension", channel: "tension", min: 0, max: 1, dfault: 0.4},
+ {name: "Attack", channel: "position", min: 0, max: 1, dfault: 0.1, automatable: false},
+ {name: "Vibrato rate", channel: "vibfreq", min: 0, max: 12, dfault: 0},
+ {name: "Vibrato rate", channel: "vibamp", min: 0, max: 1, dfault: 0},
+ {name: "Vibrato waveform", preset: "wave"},
+ {presetgroup: "applymode"}
+ ]
+ },*/
+ ]
+ },
+ {
+ name: "Amplitude",
+ contents: [
+ {
+ name: "Normalise",
+ instr: "twst_tf_normalise",
+ description: "Normalise region",
+ parameters: [
+ {name: "Scale", description: "Scaling of normalisation", dfault: 1, min: 0, max: 1, automatable: false},
+ {name: "Stereo equal", channel: "equal", description: "Normalise stereo channels equally", dfault: 1, min: 0, max: 1, step: 1, automatable: false},
+ ]
+ },
+ {
+ name: "Amplitude",
+ instr: "twst_tf_amplitude",
+ description: "Gain alteration",
+ twine: true,
+ parameters: [
+ {name: "Gain", description: "Gain amount", dfault: 1, min: 0, max: 2},
+ {name: "Balance", description: "Left and right balance", dfault: 0.5, min: 0, max: 1}
+ ]
+ },
+ {
+ name: "Bit crush",
+ instr: "twst_tf_bitcrush",
+ description: "Sample level bit reduction",
+ twine: true,
+ parameters: [
+ {name: "Crush depth", channel: "crush", description: "Bit depth", dfault: 16, min: 1, max: 64, step: 1},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Suppressor",
+ instr: "twst_tf_suppress",
+ description: "Wrap, mirror or limit amplitude",
+ twine: true,
+ parameters: [
+ {name: "Mode", channel: "mode", options: ["Limit", "Wrap", "Mirror"], automatable: true, dfault: 0},
+ {name: "Threshold", dfault: 0.8},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Linear clip",
+ instr: "twst_tf_pdclip",
+ description: "Phase distortion linear clipping",
+ twine: true,
+ parameters: [
+ {name: "Width", min: 0, max: 1, dfault: 0.2},
+ {name: "Centre", description: "Clipping offset", min: -1, max: 1, dfault: 0},
+ {name: "Bipolar", min: 0, max: 1, step: 1, dfault: 0, automatable: false},
+ {name: "Fullscale", min: 0, max: 1, dfault: 1, automatable: false},
+ ]
+ },
+ {
+ name: "Distortion",
+ instr: "twst_tf_distort",
+ description: "Waveshaping distortion",
+ twine: true,
+ parameters: [
+ {name: "Amount", min: 0, max: 1, dfault: 0.2},
+ {preset: "wave"},
+ {name: "Half power point", channel: "halfpower", min: 0, max: 100, dfault: 10, automatable: false},
+ ]
+ },
+ {
+ name: "HT Distortion",
+ instr: "twst_tf_distort1",
+ description: "Hyperbolic tangent distortion",
+ twine: true,
+ parameters: [
+ {name: "Pre gain", channel: "pregain", min: 0, max: 5, dfault: 1},
+ {name: "Post gain", channel: "postgain", min: 0, max: 1, dfault: 1},
+ {name: "Positive shape", channel: "shape1", min: 0, max: 1, dfault: 0.2},
+ {name: "Negative shape", channel: "shape2", min: 0, max: 1, dfault: 0.2},
+ ]
+ },
+ {
+ name: "Strobe",
+ instr: "twst_tf_strobe",
+ description: "Automatic amplitude attenuation",
+ twine: true,
+ added: "2025-04-17",
+ parameters: [
+ {name: "Rate", description: "Rate of action in Hz", dfault: 4, min: 0.1, max: 30},
+ {name: "Hold time", channel: "holdtime", description: "Hold time in seconds", dfault: 0.1, min: 0.01, max: 0.5},
+ {name: "Windowed", description: "Whether to apply windowing", dfault: 0, min: 0, max: 1, step: 1}
+ ]
+ },
+ ]
+ },
+ {
+ name: "Filter",
+ contents: [
+ {
+ name: "Low pass",
+ instr: "twst_tf_lpf",
+ description: "Butterworth low pass filter",
+ twine: true,
+ parameters: [
+ {name: "Frequency", description: "Filter frequency", max: 22000, min: 20, dfault: 1000},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "High pass",
+ instr: "twst_tf_hpf",
+ description: "Butterworth high pass filter",
+ twine: true,
+ parameters: [
+ {name: "Frequency", description: "Filter frequency", max: 22000, min: 20, dfault: 1000},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Band pass",
+ instr: "twst_tf_bpf",
+ description: "Butterworth band pass filter",
+ twine: true,
+ parameters: [
+ {name: "Frequency", description: "Filter frequency", max: 22000, min: 20, dfault: 1000},
+ {name: "Bandwidth", description: "Filter bandwidth", max: 5000, min: 1, dfault: 200},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Parametric",
+ instr: "twst_tf_pareq",
+ description: "Parametric EQ",
+ twine: true,
+ parameters: [
+ {name: "Frequency", description: "Filter frequency", max: 22000, min: 20, dfault: 1000},
+ {name: "Gain", description: "Filter gain factor", max: 4, min: 0, dfault: 1},
+ {name: "Q", description: "Filter Q", max: 0.9, min: 0.5, dfault: 0.707},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "DC Block",
+ instr: "twst_tf_dcblock",
+ description: "Remove DC offset from signal",
+ twine: true,
+ parameters: [
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Moog high pass",
+ instr: "twst_tf_mooghpf",
+ description: "Emulated Moog high pass filter",
+ twine: true,
+ parameters: [
+ {name: "Frequency", channel: "freq", min: 10, max: 10000, dfault: 800},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Moog low pass",
+ instr: "twst_tf_mooglpf",
+ description: "Emulated Moog low pass filter",
+ twine: true,
+ parameters: [
+ {name: "Frequency", channel: "freq", min: 10, max: 10000, dfault: 800},
+ {name: "Resonance", min: 0, max: 1, dfault: 0.6},
+ {name: "Mode", min: 0, max: 2, dfault: 1, step: 1},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "TB303 low pass",
+ instr: "twst_tf_tbvcf",
+ description: "Emulated TB303 low pass filter",
+ twine: true,
+ parameters: [
+ {name: "Frequency", channel: "freq", min: 1000, max: 15000, dfault: 1500},
+ {name: "Resonance", min: 0, max: 2, dfault: 0.6},
+ {name: "Distortion", min: 0.5, max: 3, dfault: 2},
+ {name: "Resonance asymmetry ", min: 0, max: 1, dfault: 0.5},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Waveguide",
+ instr: "twst_tf_waveguide1",
+ description: "Waveguide filter",
+ twine: true,
+ parameters: [
+ {name: "Rate", channel: "freq", min: 10, max: 4000, dfault: 100},
+ {name: "Filter cutoff", channel: "cutoff", min: 400, max: 20000, dfault: 4000},
+ {name: "Feedback", dfault: 0.5},
+ {presetgroup: "applymode"}
+ ]
+ }
+ ]
+ },
+ {
+ name: "Frequency", contents: [
+ {
+ name: "Frequency shift 1",
+ instr: "twst_tf_freqshift1",
+ description: "Hilbert frequency shifter",
+ twine: true,
+ parameters: [
+ {name: "Shift", description: "Shift frequency in Hz", dfault: 0, min: -1000, max: 1000},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Frequency shift 2",
+ instr: "twst_tf_freqshift2",
+ description: "Biquadratic frequency shifter",
+ twine: true,
+ parameters: [
+ {name: "Shift", description: "Shift frequency in Hz", dfault: 0, min: -1000, max: 1000},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Ring modulator",
+ instr: "twst_tf_ringmod",
+ description: "Ring modulator",
+ twine: true,
+ parameters: [
+ {name: "Frequency", description: "Modulation frequency in Hz", dfault: 440, min: 20, max: 18000},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Exciter",
+ instr: "twst_tf_exciter",
+ description: "Non-linear signal excitation",
+ twine: true,
+ parameters: [
+ {presetgroup: "notefreq", nameprepend: "Lower", channelprepend: "low"},
+ {presetgroup: "notefreq", nameprepend: "Upper", channelprepend: "high"},
+ {name: "Harmonics", description: "Number of harmonics", min: 0.1, max: 10, dfault: 6, lagHint: -1},
+ {name: "Blend", description: "Harmonic blending", min: -10, max: 10, dfault: 10},
+ {presetgroup: "applymode"}
+ ]
+ }
+ ]
+ },
+ {
+ name: "Delay", contents: [
+ {
+ name: "Dynamic delay",
+ instr: "twst_tf_vdelay",
+ description: "Variable delay",
+ twine: true,
+ parameters: [
+ {name: "Delay time", channel: "delay", description: "Delay time in seconds", dfault: 0.3, min: 0.001, max: 1, lagHint: -1},
+ {name: "Feedback", description: "Feedback gain", dfault: 0.5},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Flanger",
+ instr: "twst_tf_flanger",
+ twine: true,
+ parameters: [
+ {name: "Delay", max: 0.02, dfault: 0.01, lagHint: -1},
+ {name: "Feedback", dfault: 0.3},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "First order phaser",
+ instr: "twst_tf_phaser1",
+ twine: true,
+ parameters: [
+ {name: "Frequency", channel: "freq", min: 10, max: 10000, dfault: 3000},
+ {name: "Order", min: 1, max: 24, step: 1, dfault: 4, automatable: false, lagHint: -1},
+ {name: "Feedback", dfault: 0.3},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Second order phaser",
+ instr: "twst_tf_phaser2",
+ twine: true,
+ parameters: [
+ {name: "Frequency", channel: "freq", min: 10, max: 10000, dfault: 3000},
+ {name: "Q", min: 0.2, max: 1.5, dfault: 0.67},
+ {name: "Order", min: 1, max: 2499, step: 1, dfault: 800, automatable: false, lagHint: -1},
+ {name: "Mode", min: 1, max: 2, dfault: 1, step: 1, automatable: false},
+ {name: "Separation", channel: "sep", min: 0.01, max: 4, dfault: 1, lagHint: 1},
+ {name: "Feedback", min: -1, max: 1, dfault: 0.3},
+ {presetgroup: "applymode"}
+ ]
+ }
+ ]
+ },
+ {
+ name: "Reverb", contents: [
+ {
+ name: "Room",
+ instr: "twst_tf_reverb3",
+ twine: true,
+ parameters: [
+ {name: "Room size", channel: "roomsize", description: "Room size", dfault: 0.5, min: 0, max: 1, lagHint: -1},
+ {name: "Damping", channel: "hfdamp", description: "High frequency damping", dfault: 0.5, min: 0, max: 1},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Midverb",
+ instr: "twst_tf_reverb2",
+ twine: true,
+ parameters: [
+ {name: "Length", channel: "time", description: "Decay time", dfault: 1, min: 0.1, max: 10, lagHint: -1},
+ {name: "Damping", channel: "hfdamp", description: "High frequency damping", dfault: 0.5, min: 0, max: 1},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Basicverb",
+ instr: "twst_tf_reverb1",
+ twine: true,
+ parameters: [
+ {name: "Length", channel: "time", description: "Decay time", dfault: 1, min: 0.1, max: 10, lagHint: -1},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "FDNverb",
+ instr: "twst_tf_reverb4",
+ twine: true,
+ parameters: [
+ {name: "Feedback", channel: "feedback", description: "Feedback amount equating to decay time", dfault: 0.5, min: 0.1, max: 1, lagHint: -1},
+ {name: "Damping", channel: "hfdamp", description: "High frequency damping", dfault: 0.5, min: 0, max: 1},
+ {name: "Pitch variation", channel: "pitchmod", description: "Pitch variation", dfault: 1, min: 0, max: 10, automatable: false},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Baboverb",
+ instr: "twst_tf_reverb5",
+ description: "Physical model reverberator",
+ twine: true,
+ parameters: [
+ {name: "Room width", channel: "width", description: "Room width in metres", dfault: 14.39, min: 2, max: 100, automatable: false, lagHint: -1},
+ {name: "Room depth", channel: "depth", description: "Room depth in metres", dfault: 11.86, min: 2, max: 100, automatable: false, lagHint: -1},
+ {name: "Room height", channel: "height", description: "Room height in metres", dfault: 10, min: 2, max: 100, automatable: false, lagHint: -1},
+ {name: "X position", channel: "posx", description: "X position of listener", dfault: 0.5, min: 0, max: 1},
+ {name: "Y position", channel: "posy", description: "Y position of listener", dfault: 0.5, min: 0, max: 1},
+ {name: "Z position", channel: "posz", description: "Z position of listener", dfault: 0.5, min: 0, max: 1},
+ {presetgroup: "applymode"}
+ ]
+ },
+ ]
+ },
+ {
+ name: "Granular", contents: [
+ {
+ name: "Autoglitch",
+ instr: "twst_tf_autoglitch",
+ description: "Automatic aleatoric sample reading with modifications",
+ twine: true,
+ parameters: [
+ {name: "Minimum ratio", channel: "minratio", description: "Minimum time ratio of original", dfault: 0.5, min: 0, max: 1, lagHint: 1},
+ {name: "Change rate", channel: "changerate", description: "Rate of change in Hz", dfault: 0.5, min: 0.1, max: 10, lagHint: -1},
+ {name: "Change chance", channel: "changechance", description: "Chance of change", dfault: 0.5, min: 0, max: 1},
+ {name: "Portamento time", channel: "porttime", description: "Reading position glide", dfault: 0.1, min: 0.001, max: 0.5},
+ {name: "Distortion", channel: "distortion", description: "Apply distortion", dfault: 0, min: 0, max: 1, step: 1},
+ {name: "Amp change", channel: "ampchange", description: "Apply amplitude changes", dfault: 0, min: 0, max: 1, step: 1},
+ {name: "Buffer size", channel: "buflens", description: "Buffer size in seconds", dfault: 0.5, min: 0.1, max: 4, automatable: false, lagHint: -1},
+ {name: "Read mode", channel: "readmode", description: "Reading mode", dfault: 0, options: ["Direct", "Texture", "FFT"], automatable: false, lagHint: {option: 0}},
+ {name: "Stereo unique", channel: "stereounique", description: "Whether channels are glitched independently", dfault: 1, min: 0, max: 1, step: 1, automatable: false},
+ {presetgroup: "applymode"}
+
+ ]
+ },
+ {
+ name: "Syncgrain",
+ instr: "twst_tfi_syncgrain",
+ description: "Synchronous granular synthesis",
+ parameters: [
+ {preset: "amp"},
+ {name: "Frequency", description: "Grains per second", channel: "freq", step: 1, min: 1, max: 100, dfault: 20, lagHint: -1},
+ {presetgroup: "pitchscale"},
+ {name: "Grain size", channel: "grainsize", min: 0.01, max: 0.5, dfault: 0.1, lagHint: 1},
+ {name: "Overlaps", min: 1, max: 8, step: 1, dfault: 1},
+ {name: "Time scale", min: 0.1, max: 10, dfault: 1, channel: "timescale"},
+ {preset: "wintype"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Grain",
+ instr: "twst_tfi_grain",
+ description: "Granular synthesis",
+ parameters: [
+ {preset: "amp"},
+ {presetgroup: "pitchscale"},
+ {name: "Density", description: "Grains per second", channel: "density", step: 1, min: 1, max: 100, dfault: 20, lagHint: -1},
+ {name: "Grain size", channel: "grainsize", min: 0.01, max: 0.5, dfault: 0.1, lagHint: 1},
+ {name: "Amplitude variation", channel: "ampvar", min: 0, max: 1, dfault: 0},
+ {name: "Pitch variation", channel: "pitchvar", min: 0, max: 1, dfault: 0},
+ {name: "Random readpoint", min: 0, max: 1, step: 1, dfault: 1},
+ {preset: "wintype"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Retrigger",
+ instr: "twst_tfi_retriglitch",
+ description: "Repeated window reader",
+ parameters: [
+ {name: "Read mode", channel: "readmode", description: "Sample reading type", options: ["Linear", "Direct", "Scale", "Reverse", "Random"], dfault: 0},
+ {name: "Read position", channel: "readtime", description: "Read time ratio", dfault: 0.5, conditions: [{channel: "readmode", operator: "eq", value: 1}]},
+ {name: "Time scaling", channel: "timescale", description: "Time scaling factor", dfault: 1, min: 0.1, max: 16, conditions: [{channel: "readmode", operator: "eq", value: 2}], automatable: false},
+ {presetgroup: "pitchscale"},
+ {name: "Retrigger length", channel: "triglen", min: 0.01, max: 1, dfault: 0.2, lagHint: 1},
+ {name: "Apply windowing", channel: "applywindowing", step: 1, dfault: 0},
+ {preset: "wintype", conditions:[{channel: "applywindowing", operator: "eq", value: 1}]},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Sample rearrange",
+ instr: "twst_tfi_rearrange",
+ description: "Aleatoric sample range rearrangement",
+ parameters: [
+ {name: "Number of chops", description: "Number of sample rearrangements to apply", channel: "chopnumber", step: 1, min: 1, max: 128, dfault: 16, automatable: false},
+ {name: "Minimum samples", description: "Minimum number of samples to rearrange with each chop", channel: "chopmin", step: 1, min: 1, max: 1000, dfault: 400, automatable: false},
+ {name: "Maximum samples", description: "Maximum number of samples to rearrange with each chop", channel: "chopmax", step: 1, min: 64, max: 10000, dfault: 5000, automatable: false},
+ {name: "Stereo unique", description: "Whether to chop channels independently", channel: "stereounique", step: 1, min: 0, max: 1, dfault: 0, automatable: false},
+ {presetgroup: "applymode"}
+ ]
+ }
+ ]
+ },
+ {
+ name: "Harmonic", contents: [
+ {
+ name: "Parallel resonators",
+ instr: "twst_tf_resony",
+ twine: true,
+ parameters: [
+ {presetgroup: "notefreq"},
+ {name: "Bandwidth", description: "Bandwidth in Hz", dfault: 100, min: 1, max: 500},
+ {name: "Number", channel: "num", description: "Number of resonators", dfault: 8, min: 1, max: 64, step: 1, automatable: false, lagHint: -1},
+ {name: "Separation", description: "Band separation octaves", dfault: 1, min: 1, max: 6, step: 1, lagHint: 1},
+ {name: "Separation mode", channel: "sepmode", description: "Separation mode", options: ["Logarithmic", "Linear"], dfault: 0},
+ {name: "Balance output", channel: "balance", description: "Balance output level to input level", dfault: 1, min: 0, max: 1, step: 1, automatable: 0},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Resonator stack",
+ instr: "twst_tf_resonx",
+ twine: true,
+ parameters: [
+ {presetgroup: "notefreq"},
+ {name: "Bandwidth", description: "Bandwidth in Hz", dfault: 100, min: 1, max: 500},
+ {name: "Number", channel: "num", description: "Number of resonators", dfault: 8, min: 1, max: 64, step: 1, automatable: false, lagHint: -1},
+ {name: "Balance output", channel: "balance", description: "Balance output level to input level", dfault: 1, min: 0, max: 1, step: 1, automatable: 0},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "String resonator",
+ instr: "twst_tf_streson",
+ twine: true,
+ parameters: [
+ {presetgroup: "notefreq"},
+ {name: "Feedback", description: "Feedback gain", dfault: 0.6, min: 0, max: 1},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "MVM resonator",
+ instr: "twst_tf_mvmfilter",
+ twine: true,
+ parameters: [
+ {name: "Frequency", channel: "freq", min: 10, max: 10000, dfault: 800},
+ {name: "Decay time", channel: "decay", min: 0.1, max: 0.8, dfault: 0.2, lagHint: -1},
+ {name: "Balance", channel: "balance", min: 0, max: 1, step: 1, dfault: 1},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Autoharmoniser",
+ instr: "twst_tf_harmon",
+ twine: true,
+ parameters: [
+ {name: "Estimated frequency", channel: "estfreq", min: 10, max: 4000, dfault: 440},
+ {name: "Maximum variance", channel: "maxvar", dfault: 0.2},
+ {name: "Frequency 1 ratio", channel: "genfreq1", min: 0, max: 8, dfault: 2},
+ {name: "Frequency 2 ratio", channel: "genfreq2", min: 0, max: 8, dfault: 4},
+ {name: "Minimum analysis frequency", channel: "minfreq", min: 200, max: 4000, step: 1, dfault: 300, automatable: false, lagHint: 1},
+ {name: "Analysis time", channel: "minfreq", min: 0.01, max: 0.1, dfault: 0.03, automatable: false},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Formant autoharmoniser",
+ instr: "twst_tf_formantharmon",
+ twine: true,
+ parameters: [
+ {name: "Frequency 1 ratio", channel: "genfreq1", min: 0, max: 8, dfault: 2},
+ {name: "Frequency 2 ratio", channel: "genfreq2", min: 0, max: 8, dfault: 3},
+ {name: "Frequency 3 ratio", channel: "genfreq3", min: 0, max: 8, dfault: 4},
+ {name: "Frequency 4 ratio", channel: "genfreq4", min: 0, max: 8, dfault: 5},
+ {name: "Minimum frequency", channel: "minfreq", min: 20, max: 4000, step: 1, dfault: 100, automatable: false},
+ {name: "Polarity", min: 0, max: 1, step: 1, dfault: 1, automatable: false},
+ {name: "Analysis window time", channel: "pupdate", min: 0.001, max: 0.1, dfault: 0.01, automatable: false, lagHint: 1},
+ {name: "Analysis bottom frequency", channel: "plowfreq", min: 20, max: 1000, dfault: 100, automatable: false, lagHint: 1},
+ {name: "Analysis top frequency", channel: "phighfreq", min: 1000, max: 22000, dfault: 20000, automatable: false, lagHint: -1},
+ {name: "Analysis threshold", channel: "pthresh", min: 0, max: 1, dfault: 0.4, automatable: false},
+ {name: "Analysis octave divisions", channel: "pfrqs", min: 1, max: 120, dfault: 12, step: 1, automatable: false, lagHint: 1},
+ {name: "Analysis confirmations", channel: "pconfirms", min: 1, max: 40, dfault: 10, step: 1, automatable: false, lagHint: -1},
+ {presetgroup: "applymode"}
+ ]
+ }
+ ]
+ },
+ {
+ name: "Warping", contents: [
+ {
+ name: "Paulstretch",
+ instr: "twst_tfi_paulstretch",
+ description: "Extreme timestretch",
+ parameters: [
+ {name: "Stretch ratio", channel: "stretch", description: "Ratio to stretch by", dfault: 2, min: 1, max: 20, automatable: false},
+ {name: "Window size", channel: "winsize", description: "Window size used for stretch", dfault: 0.5, min: 0.1, max: 5, automatable: false, lagHint: -1}
+ ]
+ },
+ {
+ name: "Freeze",
+ instr: "twst_tf_freeze",
+ description: "Frequency domain freezing",
+ twine: true,
+ parameters: [
+ {name: "Freeze amp", channel: "freezeamp", description: "Freeze amplitudes", min: 0, max: 1, dfault: 1, step: 1},
+ {name: "Freeze frequency", channel: "freezefreq", description: "Freeze frequencies", min: 0, max: 1, dfault: 1, step: 1},
+ {presetgroup: "pvanal"},
+ {presetgroup: "pvsynth"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Waveset",
+ instr: "twst_tf_waveset",
+ description: "Repeat wave cycles",
+ twine: true,
+ parameters: [
+ {name: "Repetitions", channel: "reps", description: "Number of samples repetition in stretch", min: 1, max: 64, dfault: 2, step: 1},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Blur",
+ instr: "twst_tf_blur",
+ description: "Frequency domain time blurring",
+ twine: true,
+ parameters: [
+ {name: "Blur time", channel: "time", description: "Blur time in seconds", min: 0.01, max: 3, dfault: 0.4, lagHint: -1},
+ {presetgroup: "pvanal"},
+ {presetgroup: "pvsynth"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Spectral pitch scale",
+ instr: "twst_tf_fftpitchscale",
+ description: "Formant preserving pitch shifter",
+ twine: true,
+ parameters: [
+ {presetgroup: "pitchscale"},
+ {name: "Keep formants", channel: "formants", description: "Preserve formants", dfault: 0, min: 0, max: 1, step: 1},
+ {name: "Formant coefficients", channel: "formantcoefs", description: "Number of formants in preservation", dfault: 80, min: 1, max: 120, step: 1, conditions: [{channel: "formants", operator: "eq", value: 1}]},
+ {presetgroup: "pvanal"},
+ {presetgroup: "pvsynth"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Hilbert pitch scale",
+ instr: "twst_tf_hilbertpitchscale",
+ description: "Hilbert transform based pitch shifter",
+ twine: true,
+ parameters: [
+ {presetgroup: "pitchscale"},
+ {preset: "fftsize"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Autotune",
+ instr: "twst_tf_autotune",
+ description: "Formant preserving autotune pitch shifter",
+ twine: true,
+ parameters: [
+ {name: "Threshold", channel: "threshold", description: "Pitch detection threshold", dfault: 0.01, min: 0.001, max: 0.2},
+ {name: "Keep formants", channel: "formants", description: "Preserve formants", dfault: 0, min: 0, max: 1, step: 1},
+ {name: "Formant coefficients", channel: "formantcoefs", description: "Number of formants in preservation", dfault: 80, min: 1, max: 120, step: 1, conditions: [{channel: "formants", operator: "eq", value: 1}]},
+ {presetgroup: "pvanal"},
+ {presetgroup: "pvsynth"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Window reader",
+ instr: "twst_tfi_sndwarp",
+ description: "Windowed playback",
+ parameters: [
+ {name: "Read mode", channel: "readmode", description: "Sample reading type", options: ["Linear", "Direct", "Scale", "Reverse"], dfault: 0},
+ {name: "Read position", channel: "readtime", description: "Read time ratio", dfault: 0.5, conditions: [{channel: "readmode", operator: "eq", value: 1}]},
+ {name: "Time scaling", channel: "timescale", description: "Time scaling factor", dfault: 1, min: 0.1, max: 16, conditions: [{channel: "readmode", operator: "eq", value: 2}], automatable: false},
+ {presetgroup: "pitchscale"},
+ {name: "Window size", channel: "winsize", description: "Window size", min: 256, max: 10000, dfault: 4410, step: 1, automatable: false, lagHint: -1},
+ {name: "Window randomness", channel: "winrand", description: "Randomness in window size", min: 0, max: 1000, dfault: 441, step: 1, automatable: false},
+ {name: "Window overlap", channel: "overlap", description: "Overlap number", min: 1, max: 32, dfault: 4, step: 1, automatable: false, lagHint: -1},
+ {preset: "wintype"}
+ ]
+ },
+ {
+ name: "FFT reader",
+ instr: "twst_tfi_mincer",
+ description: "Frequency domain playback",
+ parameters: [
+ {name: "Read mode", channel: "readmode", description: "Sample reading type", options: ["Linear", "Direct", "Scale", "Reverse"], dfault: 0},
+ {name: "Read position", channel: "readtime", description: "Read time ratio", dfault: 0.5, conditions: [{channel: "readmode", operator: "eq", value: 1}]},
+ {name: "Time scaling", channel: "timescale", description: "Time scaling factor", dfault: 1, min: 0.1, max: 16, conditions: [{channel: "readmode", operator: "eq", value: 2}], automatable: false},
+ {presetgroup: "pitchscale"},
+ {name: "Phase lock", channel: "phaselock", description: "Lock phase when resynthesising", dfault: 0, min: 0, max: 1, step: 1},
+ {preset: "fftsize"},
+ {name: "Overlap decimation", options: [2, 4, 8, 16], asvalue: true, dfault: 1, channel: "decimation", automatable: false, lagHint: -1}
+ ]
+ },
+ {
+ name: "Sample holder",
+ instr: "twst_tf_smphold",
+ twine: true,
+ parameters: [
+ {name: "Ratio", description: "Inverse ratio of samples to be held in a block period", min: 0.000001},
+ {presetgroup: "applymode"}
+ ]
+ }
+ ]
+ },
+ {
+ name: "Cross processing", contents: [
+ {
+ name: "Cross synth",
+ instr: "twst_tf_crosssynth",
+ description: "Amplitude based cross synthesis",
+ inputs: 2,
+ parameters: [
+ {preset: "instance"},
+ {preset: "instanceloop"},
+ {name: "Current amp", channel: "amp1", description: "Ratio of current amplitude to use", dfault: 1, min: 0, max: 1},
+ {name: "Target amp", channel: "amp2", description: "Ratio of target amplitude to use", dfault: 1, min: 0, max: 1},
+ {presetgroup: "pvanal"},
+ {presetgroup: "pvsynth"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Direct convolution",
+ instr: "twst_tf_directconvolve",
+ description: "Convolution",
+ inputs: 2,
+ parameters: [
+ {preset: "instance"},
+ {preset: "amp"},
+ {name: "Size ratio", min: 0.00001, max: 1, dfault: 0.1, lagHint: -1, channel: "sizeratio", automatable: false},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Block convolution",
+ instr: "twst_tf_blockconvolve",
+ description: "Short term frequency domain convolution",
+ inputs: 2,
+ parameters: [
+ {preset: "instance"},
+ {preset: "instanceloop"},
+ {preset: "fftsize", dfault: 2},
+ {name: "Overlap", min: 1, max: 8, step: 1, dfault: 2, lagHint: -1},
+ {presetgroup: "applymode"}
+ ]
+ }, /* not in WASM at current
+ {
+ name: "DFT/FIR convolve",
+ instr: "twst_tf_tvconv",
+ inputs: 2,
+ parameters: [
+ {preset: "instance"},
+ {preset: "instanceloop"},
+ {name: "Update source", channel: "apply1", min: 0, max: 1, step: 1, dfault: 1},
+ {name: "Update destination", channel: "apply2", min: 0, max: 1, step: 1, dfault: 1},
+ {name: "Mode", options: ["DFT", "FIR"]},
+ {name: "Partition size", channel: "parts", options: [16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192], dfault: 5, asvalue: true, conditions: [{channel: "mode", operator: "eq", value: 0}]},
+ {name: "Filter size", channel: "dftfiltersize", options: [16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192], dfault: 5, asvalue: true, conditions: [{channel: "mode", operator: "eq", value: 0}]},
+ {name: "Filter size", channel: "firfiltersize", min: 2, max: 8192, dfault: 512, conditions: [{channel: "mode", operator: "eq", value: 1}]},
+ {presetgroup: "applymode"}
+ ]
+ }, */
+ {
+ name: "Morph",
+ instr: "twst_tf_morph",
+ description: "Amplitude and frequency cross synthesis",
+ inputs: 2,
+ parameters: [
+ {preset: "instance", name: "Cross instance"},
+ {preset: "instanceloop"},
+ {name: "Amplitude amount", channel: "amp", description: "Amplitude interpolation", dfault: 1, min: 0, max: 1},
+ {name: "Frequency amount", channel: "freq", description: "Frequency interpolation", dfault: 1, min: 0, max: 1},
+ {presetgroup: "pvanal"},
+ {presetgroup: "pvsynth"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Concatenative resynthesis",
+ instr: "twst_tf_mfccmatch",
+ description: "Map nearest perceptually similar segments",
+ inputs: 2,
+ parameters: [
+ {preset: "instance", name: "Corpus"},
+ {preset: "instanceloop"},
+ {preset: "fftsize"},
+ {name: "Minimum frequency", channel: "freqmin", description: "Minimum frequency to account for", dfault: 100, min: 30, max: 1000, automatable: false, lagHint: 1},
+ {name: "Maximum frequency", channel: "freqmax", description: "Maximum frequency to account for", dfault: 4000, min: 1000, max: 20000, automatable: false, lagHint: -1},
+ {name: "Bands", channel: "bands", description: "Number of frequency bands to use", dfault: 3, options:[2, 4, 8, 16, 32, 64], asvalue: true, automatable: false, lagHint: -1},
+ {name: "Stretch", channel: "stretch", description: "Read stretch", dfault: 0.35, min: 0.1, max: 2.5},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Cross rearrange",
+ instr: "twst_tf_crossrearrange",
+ description: "Select chunks from all open instances",
+ added: "2025-04-17",
+ parameters: [
+ {name: "Minimum samples", channel: "minsamples", description: "Minimum number of samples to chop", dfault: 4410, min: 10, max: 10000},
+ {name: "Maximum samples", channel: "maxsamples", description: "Maximum number of samples to chop", dfault: 10000, min: 1000, max: 50000},
+ {name: "Change rate", channel: "rate", description: "Rate of rearrangement change", dfault: 4, min: 0.1, max: 20},
+ {name: "Stereo unique", channel: "stereounique", description: "Stereo independent rearrangement", dfault: 1, min: 0, max: 1, step: 1},
+ {presetgroup: "applymode"}
+ ]
+ }
+ ]
+ },
+ {
+ name: "Spectral", contents: [
+ {
+ name: "Spectral autoglitch",
+ instr: "twst_tf_spectralautoglitch",
+ description: "Automatic frequency domain glitcher",
+ twine: true,
+ parameters: [
+ {name: "Change rate", channel: "changerate", description: "Rate of change", dfault: 1, min: 0.1, max: 10, lagHint: -1},
+ {name: "Change chance", channel: "changechance", description: "Chance of change", dfault: 0.5, min: 0, max: 1, lagHint: -1},
+ {name: "Portamento time", channel: "porttime", description: "Reading position glide", dfault: 0.1, min: 0.001, max: 0.5},
+ {name: "Alter pitch", channel: "pitchalter", description: "Apply pitch alterations", dfault: 0, min: 0, max: 1, step: 1},
+ {preset: "fftsize"},
+ {presetgroup: "pvsynth"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Delay",
+ instr: "twst_tf_spectraldelay",
+ description: "Frequency domain bin-independent delay",
+ unstable: true,
+ parameters: [
+ {name: "Delay time", channel: "time", description: "Delay time in seconds", dfault: 0.03, min: 0.01, max: 0.4, lagHint: -1},
+ {name: "Delay time add", channel: "add", description: "Delay time addition with each step", dfault: 0.001, min: 0, max: 0.2, lagHint: -1},
+ {name: "Portamento", channel: "porttime", description: "Resynthesis oscillator portamento time in seconds", dfault: 0.01, min: 0.01, max: 0.1},
+ {presetgroup: "pitchscale"},
+ {name: "Frequency bottom ratio", automatable: false, channel: "start", description: "Resynthesis bin start", dfault: 0, lagHint: 1},
+ {name: "Frequency top ratio", automatable: false, channel: "end", description: "Resynthesis bin end", dfault: 0.3, lagHint: -1},
+ {name: "Resynthesis waveform", preset: "wave"},
+ {presetgroup: "pvanal"},
+ {presetgroup: "applymode"}
+ ]
+ },/* not in WASM
+ {
+ name: "Trace",
+ instr: "twst_tf_trace",
+ twine: true,
+ description: "Retain only a selected number of the loudest bins",
+ parameters: [
+ {name: "Number of bins (ratio)", description: "Number of frequency bins to retain", dfault: 0.5, min: 0, max: 1},
+ {presetgroup: "pvanal"},
+ {presetgroup: "applymode"}
+ ]
+ },*/
+ {
+ name: "Isolator",
+ instr: "twst_tf_isolator",
+ description: "Isolate an analysis bin",
+ twine: true,
+ parameters: [
+ {name: "Bin (ratio)", description: "Bin to use", dfault: 0.1, min: 0, max: 1, channel: "bin"},
+ {name: "Attenuation", description: "Bin attenuation", dfault: 1, min: 0, max: 1},
+ {name: "Accentuation", description: "Bin accentuation", dfault: 1, min: 0, max: 2},
+ {presetgroup: "pvanal"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Shift",
+ instr: "twst_tf_spectralshift",
+ description: "Frequency shifter in the spectral domain",
+ twine: true,
+ parameters: [
+ {name: "Shift", channel: "freqincr", description: "Frequency addition per bin", dfault: 0, min: -100, max: 100},
+ {name: "Portamento", channel: "porttime", description: "Resynthesis oscillator portamento time in seconds", dfault: 0.01, min: 0.01, max: 0.1},
+ {presetgroup: "pitchscale"},
+ {name: "Frequency bottom ratio", automatable: false, channel: "start", description: "Resynthesis bin start", dfault: 0, lagHint: 1},
+ {name: "Frequency top ratio", dfault: 0.3, automatable: false, channel: "end", description: "Resynthesis bin end", lagHint: -1},
+ {name: "Resynthesis waveform", preset: "wave"},
+ {presetgroup: "pvanal"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Gate",
+ instr: "twst_tf_spectralgate",
+ description: "Analysis bin-independent gate",
+ twine: true,
+ parameters: [
+ {name: "Threshold", description: "Gate threshold", dfault: 0.01, min: 0, max: 0.2},
+ {name: "Hold", description: "Hold or decay frequencies", dfault: 0, min: 0, max: 1, step: 1},
+ {name: "Portamento", channel: "porttime", description: "Resynthesis oscillator portamento time in seconds", dfault: 0.01, min: 0.01, max: 0.1},
+ {presetgroup: "pitchscale"},
+ {name: "Frequency bottom ratio", automatable: false, channel: "start", description: "Resynthesis bin start", dfault: 0, lagHint: 1},
+ {name: "Frequency top ratio", dfault: 0.3, automatable: false, channel: "end", description: "Resynthesis bin end", lagHint: -1},
+ {name: "Resynthesis waveform", preset: "wave"},
+ {presetgroup: "pvanal"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Granular",
+ instr: "twst_tfi_spectralgrain1",
+ description: "Frequency domain granular synthesis",
+ parameters: [
+ {name: "Grain duration", channel: "graindur", description: "Duration of grains in seconds", min: 0.05, max: 2, dfault: 0.2},
+ {name: "Overlaps", channel: "layers", description: "Layers of grains", min: 1, max: 6, dfault: 1, step: 1, automatable: false},
+ {name: "Rate randomness", channel: "freqrand", description: "Read rate randomness", min: 1, max: 3, dfault: 1},
+ {name: "Duration randomness", channel: "durrand", description: "Grain duration randomness", min: 1, max: 3, dfault: 1},
+ {name: "Pitch randomness", channel: "pitchrand", description: "Grain pitch randomness", min: 1, max: 3, dfault: 1},
+ {name: "Read mode", channel: "readmode", description: "Grain reading mode", options: ["Linear", "Direct", "Scale", "Reverse"], dfault: 0},
+ {name: "Read position", channel: "readtime", description: "Read time ratio", dfault: 0.5, conditions: [{channel: "readmode", operator: "eq", value: 1}]},
+ {name: "Time scaling", channel: "timescale", description: "Time scaling factor", dfault: 1, min: 0.1, max: 10, conditions: [{channel: "readmode", operator: "eq", value: 2}], automatable: false},
+ {name: "Portamento", channel: "porttime", description: "Resynthesis oscillator portamento time in seconds", dfault: 0.01, min: 0.01, max: 0.1},
+ {presetgroup: "pitchscale"},
+ {name: "Frequency bottom ratio", automatable: false, channel: "start", description: "Resynthesis bin start", dfault: 0, lagHint: 1},
+ {name: "Frequency top ratio", dfault: 0.3, automatable: false, channel: "end", description: "Resynthesis bin end", lagHint: -1},
+ {name: "Resynthesis waveform", preset: "wave"},
+ {presetgroup: "pvanal"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Residuals",
+ instr: "twst_tf_residual",
+ description: "Spectral resynthesis residuals",
+ twine: true,
+ parameters: [
+ {preset: "fftsize"}
+ ]
+ },
+ /*{
+ name: "Stencil",
+ instr: "twst_tf_stencil",
+ unstable: true,
+ inputs: 2,
+ parameters: [
+ {preset: "instance"},
+ {preset: "instanceloop"},
+ {name: "Gain", description: "Pre processing gain", dfault: 1},
+ {name: "Level", description: "Level of transformation", dfault: 1},
+ {presetgroup: "pvanal"},
+ {presetgroup: "pvsynth"},
+ {presetgroup: "applymode"}
+ ]
+
+ },*/
+ {
+ name: "Bubble",
+ instr: "twst_tf_tpvbubble",
+ description: "Randomly reset bin amplitudes to zero",
+ twine: true,
+ parameters: [
+ {name: "Chance", description: "Chance of resetting bin amplitudes to 0", dfault: 0.5},
+ {name: "Stereo unique", channel: "stereounique", description: "Whether to apply channel independently", dfault: 1, min: 0, max: 1, step: 1},
+ {presetgroup: "pvanal"},
+ {presetgroup: "pvsynth"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Smear",
+ instr: "twst_tf_tpvsmear",
+ description: "Delay bin amplitudes",
+ twine: true,
+ parameters: [
+ {name: "Maximum frames", channel: "maxframes", description: "Maximum number of frames to be used", automatable: false, min: 4, max: 32, step: 1, dfault: 16},
+ {name: "Frames", description: "Number of frames to be used", min: 4, max: 32, step: 1, dfault: 16},
+ {name: "Average frequencies", channel: "avgfreqs", description: "Average frequencies as well as smearing amplitudes", min: 0, max: 1, step: 1, dfault: 1},
+ {name: "Include original", channel: "includeoriginal", description: "Include original frames in output", min: 0, max: 1, step: 1, dfault: 0},
+ {presetgroup: "pvanal"},
+ {presetgroup: "pvsynth"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Read",
+ instr: "twst_tf_spectralread",
+ description: "Frequency domain sample reader",
+ parameters: [
+ {name: "Read position", channel: "readtime", description: "Read time ratio", dfault: 0},
+ {presetgroup: "pvanal"},
+ {presetgroup: "pvsynth"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Partial reconstruction",
+ instr: "twst_tf_partialreconstruction",
+ description: "Streaming partials resynthesis",
+ twine: true,
+ parameters: [
+ {name: "Threshold", description: "Analysis threshold factor", dfault: 0.5},
+ {name: "Minimum points", channel: "minpoints", description: "Minimum analysis points", dfault: 1, min: 1, max: 10, lagHint: 1},
+ {name: "Maximum gap", channel: "maxgap", description: "Maximum gap between analysis points", dfault: 3, min: 1, max: 10, lagHint: 1},
+ {name: "Maximum analysis tracks", channel: "anlmaxtracks", description: "Maximum number of frequency tracks in analysis", automatable: false, lagHint: -1},
+ {name: "Amplitude scale", channel: "ampscale", description: "Amplitude scaling"},
+ {presetgroup: "pitchscale"},
+ {name: "Maximum resynth tracks", channel: "resmaxtracks", description: "Maximum number of frequency tracks in resynthesis", lagHint: -1},
+ {preset: "fftsize"},
+ {preset: "wave"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Invert",
+ instr: "twst_tf_tpvinvert",
+ description: "Invert frequency and/or amplitude",
+ twine: true,
+ parameters: [
+ {name: "Invert frequency", channel: "invertfreq", description: "Perform inversion of frequency", dfault: 1, min: 0, max: 1, step: 1},
+ {name: "Invert amplitude", channel: "invertamp", description: "Perform inversion of amplitude", dfault: 1, min: 0, max: 1, step: 1},
+ {presetgroup: "pvanal"},
+ {presetgroup: "pvsynth", dfault: 1},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Scramble",
+ instr: "twst_tf_tpvscramble",
+ twine: true,
+ description: "Randomly reassign amplitude and/or frequency",
+ parameters: [
+ {name: "Sanity", channel: "step", description: "Retention of sanity in scrambling", dfault: 0, min: 0, max: 1},
+ {name: "Amplitude", channel: "scrambleamp", description: "Apply scrambling to amplitude", dfault: 1, min: 0, max: 1, step: 1},
+ {name: "Frequency", channel: "scramblefreq", description: "Apply scrambling to frequency", dfault: 1, min: 0, max: 1, step: 1},
+ {presetgroup: "pvanal"},
+ {presetgroup: "pvsynth"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Frame gate",
+ instr: "twst_tf_tpvthreshold",
+ twine: true,
+ description: "Bin-independent spectral gate",
+ parameters: [
+ {name: "Threshold", description: "Amplitude threshold", dfault: 0.5, min: 0, max: 1},
+ {name: "Direction", description: "Apply to above or below threshold", dfault: 0, min: 0, max: 1, step: 1},
+ {presetgroup: "pvanal"},
+ {presetgroup: "pvsynth"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Frame freeze",
+ instr: "twst_tf_tpvfreeze",
+ twine: true,
+ description: "Freeze analysis frames",
+ parameters: [
+ {name: "Freeze amount", channel: "freeze", description: "Freeze amount", dfault: 1, min: 0, max: 1},
+ {name: "Freeze amplitude", channel: "freezeamp", description: "Apply amplitude freeze", dfault: 0, min: 0, max: 1, step: 1},
+ {name: "Freeze frequency", channel: "freezefreq", description: "Apply amplitude freeze", dfault: 0, min: 0, max: 1, step: 1},
+ {name: "Apply crossfades", channel: "crossfade", dfault: 0, min: 0, max: 1, step: 1},
+ {presetgroup: "pvanal"},
+ {presetgroup: "pvsynth"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Average",
+ instr: "twst_tf_tpvaverage",
+ twine: true,
+ description: "Time-average frequency and/or amplitudes",
+ parameters: [
+ {name: "Average amplitudes", channel: "avgamp", dfault: 0, min: 0, max: 1, step: 1},
+ {name: "Average frequencies", channel: "avgfreq", dfault: 1, min: 0, max: 1, step: 1},
+ {name: "Maximum frames", description: "Maximum frames in average window", channel: "maxframes", dfault: 16, min: 2, max: 512, step: 1, lagHint: -1},
+ {name: "Rate", description: "Rate of averaging in Hz", dfault: 1, min: 0.1, max: 10, lagHint: -1},
+ {presetgroup: "pvanal"},
+ {presetgroup: "pvsynth"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Wrap",
+ instr: "twst_tf_tpvwrap",
+ twine: true,
+ description: "Wrap amplitude and/or frequency bins",
+ parameters: [
+ {name: "Amplitude wrap bin ratio", channel: "wrapampbin", dfault: 0, min: 0, max: 3},
+ {name: "Frequency wrap bin ratio", channel: "wrapfreqbin", dfault: 1, min: 0, max: 3},
+ {presetgroup: "pvanal"},
+ {presetgroup: "pvsynth"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Swap",
+ instr: "twst_tf_tpvswap",
+ twine: true,
+ description: "Swap amplitude and/or frequency bin ranges",
+ parameters: [
+ {name: "Amplitude start bin ratio", channel: "ampstart"},
+ {name: "Amplitude length bin ratio", channel: "amplength", dfault: 0.1},
+ {name: "Amplitude target bin ratio", channel: "amptarget"},
+ {name: "Frequency start bin ratio", channel: "freqstart"},
+ {name: "Frequency length bin ratio", channel: "freqlength", dfault: 0.1},
+ {name: "Frequency target bin ratio", channel: "freqtarget"},
+ {name: "Wrap mode", channel: "wrapmode", options: ["Limit", "Wrap"], dfault: 1, automatable: true},
+ {presetgroup: "pvanal"},
+ {presetgroup: "pvsynth"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Centroid oscillator",
+ instr: "twst_tf_centroidoscillator",
+ twine: true,
+ description: "Oscillate at the analysed spectral centroid",
+ parameters: [
+ {preset: "wave", automatable: true},
+ {presetgroup: "pitchscale"},
+ {name: "Portamento time", channel: "porttime", description: "Reading position glide", dfault: 0.01, min: 0.001, max: 0.3},
+ {presetgroup: "pvanal"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Bin oscillator",
+ instr: "twst_tf_binoscillator",
+ twine: true,
+ description: "Resynthesise a single analysis bin",
+ parameters: [
+ {name: "Bin ratio", channel: "bin", description: "Frequency bin ratio", dfault: 0.1, min: 0, max: 1},
+ {preset: "wave", automatable: true},
+ {presetgroup: "pitchscale"},
+ {name: "Portamento time", channel: "porttime", description: "Reading position glide", dfault: 0.01, min: 0.001, max: 0.3},
+ {presetgroup: "pvanal"},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Stochastic subtractive",
+ instr: "twst_tf_subtractive",
+ description: "Parametric aleatoric subtractive synthesis",
+ twine: true,
+ unstable: true,
+ parameters: [
+ {preset: "amp", automatable: false},
+ {presetgroup: "notefreq", nameprepend: "Minimum", dfault: 440, channelprepend: "min", automatable: false, lagHint: 1},
+ {presetgroup: "notefreq", nameprepend: "Maximum", dfault: 8000, channelprepend: "max", automatable: false, lagHint: -1},
+ {name: "Frequency increment", channel: "step", automatable: false, min: 1.1, max: 2, dfault: 1, lagHint: 1},
+ {name: "Frequency randomness", channel: "steprand", automatable: false, min: 1, max: 1.5, dfault: 1},
+ {name: "Amplitude increment", channel: "ampmult", automatable: false, min: 0.2, max: 1, dfault: 0.6},
+ {presetgroup: "applymode"}
+ ]
+ },
+ {
+ name: "Phase masher",
+ instr: "twst_tf_phasemash",
+ twine: true,
+ description: "Phase modification and reset",
+ parameters: [
+ {name: "Replace phase", min: 0, max: 1, step: 1, dfault: 0, channel: "phasereplace"},
+ {name: "Phase alteration", min: 0, max: 1, dfault: 0.5, channel: "phasevalue"},
+ {preset: "fftsize"},
+ {presetgroup: "applymode"}
+ ]
+ }
+ ]
+ }
+ ]
+};
\ No newline at end of file |