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