From 9fbf91db06a6d4f4b5cd8bb45389a731bb86bf22 Mon Sep 17 00:00:00 2001 From: Richard Date: Sun, 13 Apr 2025 18:48:02 +0100 Subject: initial --- site/app/twirl/appdata.js | 1427 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1427 insertions(+) create mode 100644 site/app/twirl/appdata.js (limited to 'site/app/twirl/appdata.js') 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 -- cgit v1.2.3