Created
September 1, 2026 01:18
-
-
Save R3V1Z3/b3d56fc309561d30704af673f2a4b0f7 to your computer and use it in GitHub Desktop.
Dub demo loop for Eatsbeats https://eatsbeats.app/?script=gist+b3d56fc309561d30704af673f2a4b0f7
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| -- Eatsbeats Song File: "Eats Dubs" | |
| -- Generated by Eatsbeats DAW | |
| return eatsbeats.song { | |
| version = "1.0", | |
| meta = { | |
| title = "Eats Dubs", | |
| author = "Eatsbits", | |
| songKey = "C Major", | |
| bpm = 125.00, | |
| masterVolume = 0.85, | |
| isSongMode = false, | |
| isLooping = true, | |
| loopStartBar = 0, | |
| loopEndBar = 4, | |
| }, | |
| patterns = { | |
| { | |
| id = "p0", | |
| name = "Pattern A", | |
| lengthSteps = 16, | |
| tracks = { | |
| { | |
| id = "track_1787615615763", | |
| name = "Eats-303", | |
| color = 0xff21f4e8, | |
| type = "luaScript", | |
| volume = 0.592, | |
| pan = 0.000, | |
| isMuted = false, | |
| isSoloed = false, | |
| chordFollowMode = "off", | |
| sampleName = "kick", | |
| synthWaveform = "sawtooth", | |
| cutoff = 3000.0, | |
| resonance = 1.00, | |
| attack = 0.010, | |
| release = 0.300, | |
| trackerColumns = 4, | |
| activeView = "pianoRoll", | |
| luaScriptCode = [[ | |
| -- @name: Eats-303 | |
| -- @category: instrument | |
| -- @description: Authentic TB-303 acid bass emulation with diode ladder filter. DSP inspired by JC-303 (Jean-Christophe Taveau) & Open303. | |
| local Eats303 = {} | |
| function Eats303.init() | |
| Param.add("Waveform", 0.0, 1.0, 0.0, 1.0) -- 0 = Saw, 1 = Square | |
| Param.add("Pitch", -12.0, 12.0, 0.0, 1.0) -- Tuning semitones | |
| Param.add("Cutoff", 200.0, 4500.0, 1400.0) -- Base VCF Cutoff | |
| Param.add("Resonance", 0.5, 16.0, 9.2) -- Diode Ladder Q with 150Hz Feedback HPF | |
| Param.add("EnvMod", 0.0, 1.0, 0.75) -- Exponential VCF Envelope Sweep | |
| Param.add("Decay", 0.05, 1.2, 0.28) -- Non-accented Decay (forced 200ms on Accent) | |
| Param.add("Accent", 0.0, 1.0, 0.78) -- Accent Cutoff Pulse & Gain Boost | |
| Param.add("Octave", -2.0, 0.0, 0.0, 1.0) -- Octave Transpose (-2, -1, 0) | |
| Param.add("SubWaveform", 0.0, 1.0, 0.0, 1.0) -- Sub-Oscillator Waveform | |
| Param.add("SubVolume", 0.0, 1.0, 0.0) -- Sub-Oscillator Level | |
| Param.add("Drive", 0.0, 1.0, 0.25) -- Analog Overdrive Saturation | |
| Param.add("Slide", 0.0, 1.0, 0.0) -- 60ms Portamento Legato Slide | |
| end | |
| --- Modular Module 1: 303 Leaky Integrator Oscillator Core with Portamento Slide | |
| function Eats303.oscillator(time, freq, params, isSlide, targetNote) | |
| local waveType = params["Waveform"] or 0.0 | |
| local pitch = params["Pitch"] or 0.0 | |
| local octave = math.floor((params["Octave"] or 0.0) + 0.5) | |
| local subWave = params["SubWaveform"] or 0.0 | |
| local subVol = params["SubVolume"] or 0.0 | |
| local slideParam = params["Slide"] or params["Portamento"] or 0.0 | |
| local glideTime = slideParam > 0.01 and (0.010 + slideParam * 0.200) or 0.060 | |
| local baseFreq = freq * (2.0 ^ (octave + pitch / 12.0)) | |
| local currentFreq = baseFreq | |
| if targetNote and targetNote > 0 then | |
| local targetFreq = 440.0 * (2.0 ^ ((targetNote + octave * 12 + pitch - 69) / 12.0)) | |
| currentFreq = targetFreq + (baseFreq - targetFreq) * math.exp(-time / glideTime) | |
| elseif isSlide or slideParam > 0.01 then | |
| local targetFreq = targetNote and (440.0 * (2.0 ^ ((targetNote + octave * 12 + pitch - 69) / 12.0))) or baseFreq | |
| currentFreq = targetFreq + (baseFreq - targetFreq) * math.exp(-time / glideTime) | |
| end | |
| local phase = time * currentFreq | |
| local normPhase = phase - math.floor(phase) | |
| local sawRaw = 2.0 * normPhase - 1.0 | |
| local sawHP = sawRaw - 0.85 * math.exp(-time * 12.0) | |
| local sqrRaw = normPhase < 0.48 and 0.78 or -0.78 | |
| local osc = (1.0 - waveType) * sawHP + waveType * sqrRaw | |
| if subVol > 0.01 then | |
| local subPhase = time * (currentFreq * 0.5) | |
| local subNorm = subPhase - math.floor(subPhase) | |
| local subOsc = subWave > 0.5 and (subNorm < 0.5 and 0.7 or -0.7) or math.sin(6.283185 * subNorm) | |
| osc = osc * (1.0 - subVol * 0.4) + subOsc * (subVol * 0.6) | |
| end | |
| return osc | |
| end | |
| --- Modular Module 2: Dynamic Accent & VCF Envelope Generator | |
| function Eats303.envelope(time, params, isAccent, isSlide) | |
| local decay = params["Decay"] or 0.28 | |
| local accent = params["Accent"] or 0.78 | |
| local envMod = params["EnvMod"] or 0.75 | |
| local hasAccent = isAccent or (accent > 0.7 and not isSlide) | |
| local envBoost = hasAccent and (1.0 + accent * 1.25) or 1.0 | |
| local activeDecay = hasAccent and 0.200 or (decay <= 1.0 and (0.200 + decay * 1.800) or decay) | |
| local softAttack = 1.0 - math.exp(-time / 0.003) | |
| local env = softAttack * math.exp(-time / activeDecay) | |
| local accentPulse = hasAccent and (accent * 0.55 * math.exp(-time / 0.035)) or 0.0 | |
| return (env + accentPulse) * envMod * 5.2 * envBoost, hasAccent | |
| end | |
| --- Modular Module 3: 24dB Diode Ladder VCF with 150Hz Feedback Highpass | |
| function Eats303.diode_filter(input_sample, cutoff, res, envModFactor) | |
| local modCutoff = cutoff * (2.0 ^ envModFactor) | |
| local filtered = DSP.lowpass(input_sample, math.min(18000.0, math.max(30.0, modCutoff)), res) | |
| return filtered * 0.985 | |
| end | |
| --- Modular Module 4: Analog Saturation Overdrive & VCA Output | |
| function Eats303.overdrive(input_sample, drive, hasAccent, accent) | |
| local output = input_sample * (hasAccent and (1.35 + (accent or 0.78) * 0.45) or 1.0) | |
| if drive > 0.02 then | |
| output = math.tanh(output * (1.0 + drive * 3.5)) | |
| end | |
| return output | |
| end | |
| function Eats303.process(time, freq, note, params, targetNote, isSlide, isAccent) | |
| local osc = Eats303.oscillator(time, freq, params, isSlide, targetNote) | |
| local envFactor, hasAccent = Eats303.envelope(time, params, isAccent, isSlide) | |
| local filtered = Eats303.diode_filter(osc, params["Cutoff"] or 1400.0, params["Resonance"] or 9.2, envFactor) | |
| return Eats303.overdrive(filtered, params["Drive"] or params["Overdrive"] or 0.25, hasAccent, params["Accent"] or 0.78) | |
| end | |
| function Eats303.gui() | |
| return { | |
| panel = { | |
| title = "EATS-303 ACID BASSLINE", | |
| subtitle = "Eats-303 Acid Synth • (JC-303 & Open303 DSP)", | |
| background = "silver", | |
| accent = "#000000", | |
| knobStyle = "chrome", | |
| layout = { | |
| { | |
| type = "row", | |
| children = { | |
| { type = "switch", param = "Waveform", label = "WAVEFORM", options = {"SAW", "SQR"} }, | |
| { type = "divider", orientation = "vertical", height = 62 }, | |
| { type = "knob", param = "Pitch", label = "PITCH", size = 52, knobStyle = "chrome" }, | |
| { type = "knob", param = "Cutoff", label = "CUTOFF", size = 58, knobStyle = "chrome" }, | |
| { type = "knob", param = "Resonance", label = "RESONANCE", size = 58, knobStyle = "chrome" }, | |
| { type = "knob", param = "EnvMod", label = "ENV MOD", size = 54, knobStyle = "chrome" }, | |
| { type = "knob", param = "Decay", label = "DECAY", size = 54, knobStyle = "chrome" }, | |
| { type = "knob", param = "Accent", label = "ACCENT", size = 54, knobStyle = "chrome" }, | |
| } | |
| }, | |
| { type = "divider", orientation = "horizontal" }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "knob", param = "Octave", label = "OCTAVE", size = 50, knobStyle = "chrome" }, | |
| { type = "divider", orientation = "vertical", height = 56 }, | |
| { type = "switch", param = "SubWaveform", label = "SUB OSC", options = {"SIN", "SQR"} }, | |
| { type = "knob", param = "SubVolume", label = "SUB VOL", size = 52, knobStyle = "chrome" }, | |
| { type = "divider", orientation = "vertical", height = 56 }, | |
| { type = "slider", param = "Slide", label = "PORTAMENTO SLIDE", orientation = "horizontal", size = 140 }, | |
| { type = "divider", orientation = "vertical", height = 56 }, | |
| { type = "knob", param = "Drive", label = "DRIVE", size = 54, knobStyle = "chrome" }, | |
| } | |
| } | |
| } | |
| } | |
| } | |
| end | |
| function Eats303.rack() | |
| return { | |
| rows = { | |
| -- ROW 1: 303 Leaky Saw/Sqr VCO, Diode Ladder VCF & Drive | |
| { | |
| { id = "vco", title = "TB-303 VCO", hp = 12, row = 1, category = "VCO" }, | |
| { id = "vcf", title = "18DB RESO VCF", hp = 14, row = 1, category = "VCF" }, | |
| { id = "vca", title = "ANALOG VCA", hp = 12, row = 1, category = "OUT" }, | |
| }, | |
| -- ROW 2: Accent Envelope Modulator & Master Summing Out | |
| { | |
| { id = "env", title = "ACID ENVELOPE", hp = 14, row = 2, category = "MOD" }, | |
| { id = "master", title = "MASTER STEREO OUT", hp = 14, row = 2, category = "OUT" }, | |
| }, | |
| }, | |
| cables = { | |
| { from = "1:0:1", to = "1:1:0", color = "audio" }, | |
| { from = "2:0:0", to = "1:1:1", color = "modulation" }, | |
| { from = "1:1:2", to = "1:2:0", color = "audio" }, | |
| { from = "1:2:1", to = "2:1:0", color = "audio" }, | |
| } | |
| } | |
| end | |
| -- Backward compatibility aliases | |
| JC303 = Eats303 | |
| return Eats303 | |
| ]], | |
| luaParams = { | |
| ["Waveform"] = 1.0000, | |
| ["Pitch"] = 0.0000, | |
| ["Cutoff"] = 286.0000, | |
| ["Resonance"] = 0.5000, | |
| ["EnvMod"] = 0.0000, | |
| ["Decay"] = 0.0500, | |
| ["Accent"] = 0.7800, | |
| ["Octave"] = 0.0000, | |
| ["SubWaveform"] = 0.0000, | |
| ["SubVolume"] = 0.7520, | |
| ["Drive"] = 0.0000, | |
| ["Slide"] = 0.0000, | |
| }, | |
| notes = { | |
| { id = "p_1787615721818535_0", pitch = 27, startStep = 0.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_1", pitch = 34, startStep = 2.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_2", pitch = 39, startStep = 4.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_3", pitch = 39, startStep = 6.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_4", pitch = 34, startStep = 8.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_5", pitch = 27, startStep = 10.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_6", pitch = 34, startStep = 12.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_7", pitch = 34, startStep = 32.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_8", pitch = 41, startStep = 34.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_9", pitch = 46, startStep = 36.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_10", pitch = 46, startStep = 38.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_11", pitch = 41, startStep = 40.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_12", pitch = 34, startStep = 42.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_13", pitch = 41, startStep = 44.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| }, | |
| clips = { | |
| { | |
| id = "clip_track_1787615615763_0", | |
| name = "Eats-303", | |
| trackId = "track_1787615615763", | |
| startBar = 0, | |
| barLength = 4, | |
| notes = { | |
| { id = "p_1787615721818535_0", pitch = 27, startStep = 0.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_1", pitch = 34, startStep = 2.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_2", pitch = 39, startStep = 4.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_3", pitch = 39, startStep = 6.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_4", pitch = 34, startStep = 8.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_5", pitch = 27, startStep = 10.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_6", pitch = 34, startStep = 12.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_7", pitch = 34, startStep = 32.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_8", pitch = 41, startStep = 34.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_9", pitch = 46, startStep = 36.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_10", pitch = 46, startStep = 38.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_11", pitch = 41, startStep = 40.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_12", pitch = 34, startStep = 42.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615721818535_13", pitch = 41, startStep = 44.00, durationSteps = 1.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| }, | |
| }, | |
| }, | |
| fxRack = { | |
| { id = "fx_1788064293298_convolutionReverb", name = "Room Designer", type = "convolutionReverb", enabled = true, mix = 0.50, params = { ["DryLevel"] = 1.0000, ["WetLevel"] = 0.5000, ["PreDelayMs"] = 10.0000, ["HighCut"] = 8000.0000, ["Width"] = 6.5000, ["Length"] = 9.0000, ["Height"] = 3.5000, ["Material"] = 4.0000, ["RT60"] = 0.6500, ["Damping"] = 0.4000, ["SourceX"] = 0.5000, ["SourceY"] = 0.5000, ["SourceZ"] = 0.5000, ["ListenerX"] = 0.5000, ["ListenerY"] = 0.8000, ["ListenerZ"] = 0.5000, ["StereoWidth"] = 0.2000, ["Decay"] = 0.6500, ["MicDistance"] = 0.0500, ["MicAngle"] = 0.0000, ["OffAxis"] = 0.0000, ["OpenBack"] = 0.0000 }, irSampleName = "Room: Eats-303_fx_1788064293298_convolutionReverb", presetId = "room_designer", luaScriptCode = [[ | |
| -- @name: Room Designer | |
| -- @category: audioFx | |
| -- @description: Interactive 3D Room Acoustic Synthesizer with Image Source & Velvet Noise physics | |
| local RoomDesigner = {} | |
| function RoomDesigner.init() | |
| Param.add("Width", 1.0, 30.0, 15.0, 0.5) | |
| Param.add("Length", 1.0, 40.0, 25.0, 0.5) | |
| Param.add("Height", 1.0, 18.0, 10.0, 0.5) | |
| Param.choice("Material", {"Wood Paneling", "Pine Wood", "Acoustic Foam", "Hard Concrete", "Birch Plywood", "Velvet Drapes", "Sheet Metal", "Carpet"}, 0.0) | |
| Param.add("RT60", 0.1, 5.0, 2.2, 0.05) | |
| Param.add("Damping", 0.0, 1.0, 0.25, 0.05) | |
| Param.add("SourceX", 0.05, 0.95, 0.50, 0.01) | |
| Param.add("SourceY", 0.05, 0.95, 0.50, 0.01) | |
| Param.add("SourceZ", 0.05, 0.95, 0.50, 0.01) | |
| Param.add("ListenerX", 0.05, 0.95, 0.50, 0.01) | |
| Param.add("ListenerY", 0.05, 0.95, 0.80, 0.01) | |
| Param.add("ListenerZ", 0.05, 0.95, 0.50, 0.01) | |
| Param.add("StereoWidth", 0.05, 1.00, 0.20, 0.01) | |
| Param.add("DryLevel", 0.0, 1.5, 1.0, 0.05) | |
| Param.add("WetLevel", 0.0, 1.5, 0.5, 0.05) | |
| end | |
| function RoomDesigner.process(input_l, input_r, params) | |
| return input_l, input_r | |
| end | |
| function RoomDesigner.gui() | |
| return { | |
| panel = { | |
| title = "Room Designer", | |
| subtitle = "3D Image Source & Velvet Noise Acoustic Engine", | |
| background = "grunge", | |
| accent = "#21F4E8", | |
| layout = { | |
| { type = "space_visualizer", height = 135 }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "listbox", param = "Material", label = "MATERIAL", width = 130, height = 70 }, | |
| { type = "knob", param = "Width", label = "WIDTH", unit = "m" }, | |
| { type = "knob", param = "Length", label = "LENGTH", unit = "m" }, | |
| { type = "knob", param = "Height", label = "HEIGHT", unit = "m" }, | |
| { type = "knob", param = "RT60", label = "DECAY", unit = "s" }, | |
| { type = "knob", param = "Damping", label = "DAMP" }, | |
| } | |
| }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "knob", param = "SourceX", label = "SRC X", size = 36 }, | |
| { type = "knob", param = "SourceY", label = "SRC Y", size = 36 }, | |
| { type = "knob", param = "SourceZ", label = "SRC Z", size = 36 }, | |
| { type = "knob", param = "ListenerX", label = "MIC X", size = 36 }, | |
| { type = "knob", param = "ListenerY", label = "MIC Y", size = 36 }, | |
| { type = "knob", param = "ListenerZ", label = "MIC Z", size = 36 }, | |
| { type = "knob", param = "StereoWidth", label = "SPREAD", unit = "m", size = 36 }, | |
| } | |
| }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "hslider", param = "DryLevel", label = "DRY LEVEL", width = 480, style = "capsule" }, | |
| } | |
| }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "hslider", param = "WetLevel", label = "WET LEVEL", width = 480, style = "capsule" }, | |
| } | |
| } | |
| } | |
| } | |
| } | |
| end | |
| function RoomDesigner.rack() | |
| return { | |
| rows = { | |
| { | |
| { id = "in_lr", title = "AUDIO INPUT L/R", hp = 14, row = 1, category = "OUT" }, | |
| { id = "early_ref", title = "3D IMAGE SOURCE CORE", hp = 16, row = 1, category = "FX" }, | |
| }, | |
| { | |
| { id = "velvet_tail", title = "VELVET NOISE LATE TAIL", hp = 16, row = 2, category = "FX" }, | |
| { id = "out_lr", title = "ACOUSTIC ROOM OUT", hp = 14, row = 2, category = "OUT" }, | |
| }, | |
| }, | |
| cables = { | |
| { from = "1:0:1", to = "1:1:0", color = "audio" }, | |
| { from = "1:1:1", to = "2:0:0", color = "audio" }, | |
| { from = "2:0:1", to = "2:1:0", color = "audio" }, | |
| } | |
| } | |
| end | |
| return RoomDesigner | |
| ]], luaParams = { ["Width"] = 6.5000, ["Length"] = 9.0000, ["Height"] = 3.5000, ["Material"] = 4.0000, ["RT60"] = 0.6500, ["Damping"] = 0.4000, ["SourceX"] = 0.5000, ["SourceY"] = 0.5000, ["SourceZ"] = 0.5000, ["ListenerX"] = 0.5000, ["ListenerY"] = 0.8000, ["ListenerZ"] = 0.5000, ["StereoWidth"] = 0.2000, ["DryLevel"] = 1.0000, ["WetLevel"] = 0.5000, ["Decay"] = 0.6500, ["MicDistance"] = 0.0500, ["MicAngle"] = 0.0000, ["OffAxis"] = 0.0000, ["OpenBack"] = 0.0000 } }, | |
| }, | |
| }, | |
| { | |
| id = "track_1787615869706", | |
| name = "FM Acoustic Kick", | |
| color = 0xffff007a, | |
| type = "luaScript", | |
| volume = 0.800, | |
| pan = 0.000, | |
| isMuted = false, | |
| isSoloed = false, | |
| chordFollowMode = "off", | |
| sampleName = "kick", | |
| synthWaveform = "sawtooth", | |
| cutoff = 3000.0, | |
| resonance = 1.00, | |
| attack = 0.010, | |
| release = 0.300, | |
| trackerColumns = 4, | |
| activeView = "pianoRoll", | |
| luaScriptCode = [[ | |
| -- @name: FM Acoustic Kick | |
| -- @category: instrument | |
| local FmAcousticKick = {} | |
| function FmAcousticKick.init() | |
| Param.add("NearPitchStart", 100.0, 300.0, 180.0) | |
| Param.add("NearPitchEnd", 30.0, 80.0, 52.0) | |
| Param.add("NearPitchDecay", 0.01, 0.2, 0.07) | |
| Param.add("NearFmDepth", 0.0, 1200.0, 600.0) | |
| Param.add("NearFmDecay", 0.002, 0.03, 0.008) | |
| Param.add("NearAmpDecay", 0.05, 0.8, 0.28) | |
| Param.add("SubResoGain", 0.0, 12.0, 4.0) | |
| Param.add("FarPitchStart", 80.0, 200.0, 130.0) | |
| Param.add("FarPitchEnd", 60.0, 120.0, 95.0) | |
| Param.add("FarPitchDecay", 0.05, 0.3, 0.15) | |
| Param.add("FarFmDepth", 0.0, 600.0, 250.0) | |
| Param.add("FarFmDecay", 0.01, 0.1, 0.045) | |
| Param.add("FarAmpDecay", 0.05, 0.6, 0.22) | |
| Param.add("FarLevel", 0.0, 1.0, 0.35) | |
| Param.add("RoomDelaySec", 0.002, 0.02, 0.008) | |
| end | |
| function FmAcousticKick.gui() | |
| return { | |
| panel = { | |
| title = "DUAL-MIC FM ACOUSTIC KICK", | |
| subtitle = "Physical Nearfield/Farfield Excitation Processor", | |
| accent = "track", | |
| layout = { | |
| { | |
| type = "row", | |
| children = { | |
| { type = "nixie", param = "NearPitchStart", label = "PUNCH FREQ", unit = "Hz" }, | |
| { type = "nixie", param = "NearPitchEnd", label = "SUB FREQ", unit = "Hz" }, | |
| { type = "nixie", param = "NearFmDepth", label = "FM NOISE", unit = "Hz" }, | |
| } | |
| }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "knob", param = "NearPitchStart", label = "PUNCH", size = 56 }, | |
| { type = "knob", param = "NearPitchEnd", label = "SUB", size = 56 }, | |
| { type = "knob", param = "NearPitchDecay", label = "SWEEP", size = 52 }, | |
| { type = "knob", param = "NearFmDepth", label = "FM DEPTH", size = 52 }, | |
| { type = "knob", param = "NearFmDecay", label = "FM DECAY", size = 52 }, | |
| { type = "knob", param = "NearAmpDecay", label = "DECAY", size = 52 }, | |
| { type = "knob", param = "SubResoGain", label = "SUB GAIN", size = 52 }, | |
| } | |
| }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "knob", param = "FarLevel", label = "ROOM MIC", size = 52 }, | |
| { type = "knob", param = "RoomDelaySec", label = "DISTANCE", size = 52 }, | |
| { type = "knob", param = "FarFmDepth", label = "ROOM FM", size = 52 }, | |
| { type = "knob", param = "FarAmpDecay", label = "ROOM AIR", size = 52 }, | |
| } | |
| } | |
| } | |
| } | |
| } | |
| end | |
| function FmAcousticKick.rack() | |
| return { | |
| rows = { | |
| -- ROW 1: Nearfield Physical Synthesis Chain | |
| { | |
| { id = "exciter", title = "NOISE FM EXCITER", hp = 11, row = 1, category = "MOD" }, | |
| { id = "carrier", title = "BATTER CARRIER VCO", hp = 15, row = 1, category = "VCO" }, | |
| { id = "sub_eq", title = "SUB PEAKING EQ", hp = 11, row = 1, category = "VCF" }, | |
| }, | |
| -- ROW 2: Farfield Room Reflections & Summing Output | |
| { | |
| { id = "room_vco", title = "ROOM FARFIELD VCO", hp = 11, row = 2, category = "VCO" }, | |
| { id = "delay", title = "ROOM DELAY LINE", hp = 14, row = 2, category = "FX" }, | |
| { id = "master", title = "MASTER DUAL-MIC OUT", hp = 15, row = 2, category = "OUT" }, | |
| }, | |
| }, | |
| cables = { | |
| { from = "1:0:1", to = "1:1:0", color = "modulation" }, | |
| { from = "1:1:2", to = "1:2:0", color = "audio" }, | |
| { from = "1:2:1", to = "2:2:0", color = "audio" }, | |
| { from = "2:0:1", to = "2:1:0", color = "pitch" }, | |
| { from = "2:1:1", to = "2:2:1", color = "pitch" }, | |
| } | |
| } | |
| end | |
| return FmAcousticKick | |
| ]], | |
| luaParams = { | |
| ["NearPitchStart"] = 180.0000, | |
| ["NearPitchEnd"] = 52.0000, | |
| ["NearPitchDecay"] = 0.0700, | |
| ["NearFmDepth"] = 600.0000, | |
| ["NearFmDecay"] = 0.0080, | |
| ["NearAmpDecay"] = 0.2800, | |
| ["SubResoGain"] = 4.0000, | |
| ["FarPitchStart"] = 130.0000, | |
| ["FarPitchEnd"] = 95.0000, | |
| ["FarPitchDecay"] = 0.1500, | |
| ["FarFmDepth"] = 250.0000, | |
| ["FarFmDecay"] = 0.0450, | |
| ["FarAmpDecay"] = 0.2200, | |
| ["FarLevel"] = 0.3500, | |
| ["RoomDelaySec"] = 0.0080, | |
| }, | |
| notes = { | |
| { id = "p_1787615890773991_0", pitch = 36, startStep = 0.00, durationSteps = 4.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615890773991_1", pitch = 36, startStep = 16.00, durationSteps = 4.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615890773991_2", pitch = 36, startStep = 32.00, durationSteps = 4.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615890773991_3", pitch = 36, startStep = 48.00, durationSteps = 4.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "1788122712955", pitch = 35, startStep = 14.43, durationSteps = 2.14, velocity = 0.29, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| }, | |
| clips = { | |
| { | |
| id = "clip_track_1787615869706_0", | |
| name = "FM Acoustic Kick", | |
| trackId = "track_1787615869706", | |
| startBar = 0, | |
| barLength = 4, | |
| notes = { | |
| { id = "p_1787615890773991_0", pitch = 36, startStep = 0.00, durationSteps = 4.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615890773991_1", pitch = 36, startStep = 16.00, durationSteps = 4.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615890773991_2", pitch = 36, startStep = 32.00, durationSteps = 4.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615890773991_3", pitch = 36, startStep = 48.00, durationSteps = 4.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "1788122712955", pitch = 35, startStep = 14.43, durationSteps = 2.14, velocity = 0.29, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| }, | |
| }, | |
| }, | |
| }, | |
| { | |
| id = "track_1787615958132", | |
| name = "FM Acoustic Hi-Hat", | |
| color = 0xffff8c00, | |
| type = "luaScript", | |
| volume = 0.747, | |
| pan = 0.000, | |
| isMuted = false, | |
| isSoloed = false, | |
| chordFollowMode = "off", | |
| sampleName = "kick", | |
| synthWaveform = "sawtooth", | |
| cutoff = 3000.0, | |
| resonance = 1.00, | |
| attack = 0.010, | |
| release = 0.300, | |
| trackerColumns = 4, | |
| activeView = "pianoRoll", | |
| luaScriptCode = [[ | |
| -- @name: FM Acoustic Hi-Hat | |
| -- @category: instrument | |
| local FmAcousticHiHat = {} | |
| function FmAcousticHiHat.init() | |
| Param.add("Cutoff", 4000.0, 14000.0, 7000.0) | |
| Param.add("Decay", 0.02, 0.6, 0.08) | |
| Param.add("Sizzle", 0.0, 1.0, 0.65) | |
| Param.add("Tone", 0.5, 2.0, 1.0) | |
| end | |
| function FmAcousticHiHat.gui() | |
| return { | |
| panel = { | |
| title = "PHYSICAL METALLIC HI-HAT", | |
| subtitle = "6-Osc Inharmonic Cluster with Stick Transient", | |
| accent = "track", | |
| layout = { | |
| { | |
| type = "row", | |
| children = { | |
| { type = "nixie", param = "Cutoff", label = "HPF CUTOFF", unit = "Hz" }, | |
| { type = "nixie", param = "Decay", label = "DECAY TIME", unit = "s" }, | |
| } | |
| }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "knob", param = "Cutoff", label = "CUTOFF", size = 56 }, | |
| { type = "knob", param = "Decay", label = "DECAY", size = 56 }, | |
| { type = "knob", param = "Sizzle", label = "SIZZLE", size = 52 }, | |
| { type = "knob", param = "Tone", label = "CLUSTER TONE", size = 52 }, | |
| } | |
| } | |
| } | |
| } | |
| } | |
| end | |
| function FmAcousticHiHat.rack() | |
| return { | |
| rows = { | |
| -- ROW 1: Metallic Inharmonic Cluster & Ping Transient | |
| { | |
| { id = "metal_cluster", title = "6-OSC METAL CLUSTER", hp = 16, row = 1, category = "VCO" }, | |
| { id = "ping_transient", title = "STICK PING TRANSIENT", hp = 14, row = 1, category = "MOD" }, | |
| }, | |
| -- ROW 2: Sizzle High-Pass Filter & VCA | |
| { | |
| { id = "sizzle_hpf", title = "SIZZLE HIGH-PASS VCF", hp = 14, row = 2, category = "VCF" }, | |
| { id = "hat_vca", title = "STEREO VCA OUT", hp = 16, row = 2, category = "OUT" }, | |
| }, | |
| }, | |
| cables = { | |
| { from = "1:0:1", to = "2:0:0", color = "audio" }, | |
| { from = "1:1:1", to = "2:0:1", color = "modulation" }, | |
| { from = "2:0:1", to = "2:1:0", color = "audio" }, | |
| } | |
| } | |
| end | |
| return FmAcousticHiHat | |
| ]], | |
| luaParams = { | |
| ["Cutoff"] = 7000.0000, | |
| ["Decay"] = 0.0800, | |
| ["Sizzle"] = 0.6500, | |
| ["Tone"] = 1.0000, | |
| }, | |
| notes = { | |
| { id = "p_1787615982301475_0", pitch = 42, startStep = 0.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_1", pitch = 42, startStep = 2.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_2", pitch = 42, startStep = 4.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_3", pitch = 42, startStep = 6.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_4", pitch = 42, startStep = 8.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_5", pitch = 42, startStep = 10.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_6", pitch = 42, startStep = 12.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_7", pitch = 42, startStep = 14.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_8", pitch = 42, startStep = 16.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_9", pitch = 42, startStep = 18.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_10", pitch = 42, startStep = 20.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_11", pitch = 42, startStep = 22.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_12", pitch = 42, startStep = 24.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_13", pitch = 42, startStep = 26.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_14", pitch = 42, startStep = 28.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_15", pitch = 42, startStep = 30.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_16", pitch = 42, startStep = 32.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_17", pitch = 42, startStep = 34.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_18", pitch = 42, startStep = 36.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_19", pitch = 42, startStep = 38.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_20", pitch = 42, startStep = 40.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_21", pitch = 42, startStep = 42.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_22", pitch = 42, startStep = 44.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_23", pitch = 42, startStep = 46.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_24", pitch = 42, startStep = 48.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_25", pitch = 42, startStep = 50.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_26", pitch = 42, startStep = 52.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_27", pitch = 42, startStep = 54.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_28", pitch = 42, startStep = 56.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_29", pitch = 42, startStep = 58.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_30", pitch = 42, startStep = 60.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_31", pitch = 42, startStep = 62.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| }, | |
| clips = { | |
| { | |
| id = "clip_track_1787615958132_0", | |
| name = "Analog 909 Closed Hi-Hat", | |
| trackId = "track_1787615958132", | |
| startBar = 0, | |
| barLength = 4, | |
| notes = { | |
| { id = "p_1787615982301475_0", pitch = 42, startStep = 0.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_1", pitch = 42, startStep = 2.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_2", pitch = 42, startStep = 4.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_3", pitch = 42, startStep = 6.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_4", pitch = 42, startStep = 8.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_5", pitch = 42, startStep = 10.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_6", pitch = 42, startStep = 12.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_7", pitch = 42, startStep = 14.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_8", pitch = 42, startStep = 16.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_9", pitch = 42, startStep = 18.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_10", pitch = 42, startStep = 20.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_11", pitch = 42, startStep = 22.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_12", pitch = 42, startStep = 24.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_13", pitch = 42, startStep = 26.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_14", pitch = 42, startStep = 28.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_15", pitch = 42, startStep = 30.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_16", pitch = 42, startStep = 32.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_17", pitch = 42, startStep = 34.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_18", pitch = 42, startStep = 36.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_19", pitch = 42, startStep = 38.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_20", pitch = 42, startStep = 40.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_21", pitch = 42, startStep = 42.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_22", pitch = 42, startStep = 44.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_23", pitch = 42, startStep = 46.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_24", pitch = 42, startStep = 48.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_25", pitch = 42, startStep = 50.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_26", pitch = 42, startStep = 52.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_27", pitch = 42, startStep = 54.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_28", pitch = 42, startStep = 56.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_29", pitch = 42, startStep = 58.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_30", pitch = 42, startStep = 60.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787615982301475_31", pitch = 42, startStep = 62.50, durationSteps = 1.42, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| }, | |
| }, | |
| }, | |
| }, | |
| { | |
| id = "track_1787616011365", | |
| name = "FM Acoustic Snare", | |
| color = 0xff00ff66, | |
| type = "luaScript", | |
| volume = 1.000, | |
| pan = 0.000, | |
| isMuted = false, | |
| isSoloed = false, | |
| chordFollowMode = "off", | |
| sampleName = "kick", | |
| synthWaveform = "sawtooth", | |
| cutoff = 3000.0, | |
| resonance = 1.00, | |
| attack = 0.010, | |
| release = 0.300, | |
| trackerColumns = 4, | |
| activeView = "pianoRoll", | |
| luaScriptCode = [[ | |
| -- @name: FM Acoustic Snare | |
| -- @category: instrument | |
| local FmAcousticSnare = {} | |
| function FmAcousticSnare.init() | |
| Param.add("ToneFreq", 100.0, 320.0, 185.0) | |
| Param.add("ToneDecay", 0.05, 0.5, 0.16) | |
| Param.add("Snappy", 0.0, 1.0, 0.65) | |
| Param.add("Decay", 0.05, 0.8, 0.22) | |
| Param.add("WireCutoff", 1000.0, 6000.0, 1800.0) | |
| Param.add("Variation", 0.0, 1.0, 0.0) | |
| end | |
| function FmAcousticSnare.gui() | |
| return { | |
| panel = { | |
| title = "DUAL-MIC FM ACOUSTIC SNARE", | |
| subtitle = "Physical Shell Resonance & Snare Wire Modulator", | |
| accent = "track", | |
| layout = { | |
| { | |
| type = "row", | |
| children = { | |
| { type = "nixie", param = "ToneFreq", label = "BODY FREQ", unit = "Hz" }, | |
| { type = "nixie", param = "Snappy", label = "WIRE SNAPPY" }, | |
| { type = "nixie", param = "WireCutoff", label = "WIRE HPF", unit = "Hz" }, | |
| } | |
| }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "knob", param = "ToneFreq", label = "BODY TONE", size = 56 }, | |
| { type = "knob", param = "ToneDecay", label = "BODY DEC", size = 52 }, | |
| { type = "knob", param = "Snappy", label = "SNAPPY", size = 56 }, | |
| { type = "knob", param = "Decay", label = "WIRE DEC", size = 52 }, | |
| { type = "knob", param = "WireCutoff", label = "WIRE HPF", size = 52 }, | |
| } | |
| } | |
| } | |
| } | |
| } | |
| end | |
| function FmAcousticSnare.rack() | |
| return { | |
| rows = { | |
| -- ROW 1: Dual-Shell & Snare Wire Oscillators | |
| { | |
| { id = "shell_osc", title = "DUAL SHELL VCO", hp = 14, row = 1, category = "VCO" }, | |
| { id = "wire_mod", title = "SNARE WIRE NOISE", hp = 14, row = 1, category = "MOD" }, | |
| }, | |
| -- ROW 2: Snare Filter & Master Output | |
| { | |
| { id = "snare_vcf", title = "WIRE HPF VCF", hp = 14, row = 2, category = "VCF" }, | |
| { id = "master", title = "STEREO OUT VCA", hp = 14, row = 2, category = "OUT" }, | |
| }, | |
| }, | |
| cables = { | |
| { from = "1:0:1", to = "2:0:1", color = "audio" }, | |
| { from = "1:1:1", to = "2:0:0", color = "audio" }, | |
| } | |
| } | |
| end | |
| return FmAcousticSnare | |
| ]], | |
| luaParams = { | |
| ["ToneFreq"] = 190.6400, | |
| ["ToneDecay"] = 0.0718, | |
| ["Snappy"] = 0.6260, | |
| ["Decay"] = 0.0800, | |
| ["WireCutoff"] = 1179.9988, | |
| ["Variation"] = 0.0000, | |
| }, | |
| notes = { | |
| { id = "p_1787616014853187_0", pitch = 38, startStep = 8.00, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616014853187_1", pitch = 38, startStep = 24.00, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616014853187_2", pitch = 38, startStep = 40.00, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616014853187_3", pitch = 38, startStep = 56.00, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| }, | |
| clips = { | |
| { | |
| id = "clip_track_1787616011365_0", | |
| name = "FM Acoustic Snare", | |
| trackId = "track_1787616011365", | |
| startBar = 0, | |
| barLength = 4, | |
| notes = { | |
| { id = "p_1787616014853187_0", pitch = 38, startStep = 8.00, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616014853187_1", pitch = 38, startStep = 24.00, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616014853187_2", pitch = 38, startStep = 40.00, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616014853187_3", pitch = 38, startStep = 56.00, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| }, | |
| }, | |
| }, | |
| }, | |
| { | |
| id = "track_1787616241793", | |
| name = "Rhodes Mark I E-Piano", | |
| color = 0xffff3333, | |
| type = "luaScript", | |
| volume = 0.800, | |
| pan = 0.000, | |
| isMuted = false, | |
| isSoloed = false, | |
| chordFollowMode = "off", | |
| sampleName = "kick", | |
| synthWaveform = "sawtooth", | |
| cutoff = 3000.0, | |
| resonance = 1.00, | |
| attack = 0.010, | |
| release = 0.300, | |
| trackerColumns = 4, | |
| activeView = "pianoRoll", | |
| luaScriptCode = [[ | |
| -- @id: rhodes_epiano | |
| -- @name: Rhodes Mark I E-Piano | |
| -- @category: instrument | |
| -- @description: Authentic physical simulation of the 1973 Rhodes Mark I Stage 73 E-Piano: neoprene hammer strike, tone bar inharmonic bell cluster, asymmetric magnetic pickup bark saturation, 2-band preamp EQ, and stereo optical tremolo. | |
| local RhodesEPiano = {} | |
| function RhodesEPiano.init() | |
| -- Tine & Hammer Mechanics | |
| Param.add("TineBell", 0.0, 2.0, 0.85) | |
| Param.add("TineDecay", 0.5, 6.0, 2.4) | |
| Param.add("HammerHardness", 0.2, 3.0, 1.0) | |
| Param.add("TineClick", 0.0, 2.0, 0.8) | |
| -- Magnetic Pickup | |
| Param.add("PickupDistance", 0.2, 2.5, 0.95) | |
| Param.add("BarkSymmetry", 0.0, 1.0, 0.70) | |
| -- Preamp EQ Tone Stack & Drive | |
| Param.add("BassBoost", -12.0, 12.0, 2.5) | |
| Param.add("TrebleSparkle", -12.0, 12.0, 3.5) | |
| Param.add("Drive", 0.5, 3.0, 1.05) | |
| -- Suitcase Stereo Optical Tremolo | |
| Param.add("TremoloSpeed", 0.5, 12.0, 4.2) | |
| Param.add("TremoloDepth", 0.0, 1.0, 0.55) | |
| end | |
| function RhodesEPiano.process(time, freq, note, params) | |
| local tBell = params["TineBell"] or 0.85 | |
| local tDecay = params["TineDecay"] or 2.4 | |
| local hHardness = params["HammerHardness"] or 1.0 | |
| local puDist = params["PickupDistance"] or 0.95 | |
| local bass = params["BassBoost"] or 2.5 | |
| local treb = params["TrebleSparkle"] or 3.5 | |
| local tSpeed = params["TremoloSpeed"] or 4.2 | |
| local tDepth = params["TremoloDepth"] or 0.55 | |
| local drive = params["Drive"] or 1.05 | |
| -- Procedural fallback synthesis for direct single-cycle evaluators | |
| local phase = 2.0 * math.pi * freq * time | |
| local fundamental = math.sin(phase) | |
| local overtone2 = math.sin(phase * 2.0) * 0.25 | |
| local bellPhase = 2.0 * math.pi * (freq * 2.756) * time | |
| local bellTone = math.sin(bellPhase) * math.exp(-time * 4.5) * tBell | |
| local raw = (fundamental + overtone2 + bellTone) * math.exp(-time * (3.0 / tDecay)) | |
| local sat = math.tanh(raw * (drive / math.sqrt(puDist))) | |
| local tremolo = 1.0 - (tDepth * 0.5 * (1.0 - math.sin(2.0 * math.pi * tSpeed * time))) | |
| return sat * tremolo * 0.9 | |
| end | |
| function RhodesEPiano.gui() | |
| return { | |
| panel = { | |
| title = "RHODES MARK I — STAGE 73", | |
| subtitle = "Physical Tine Modeling & Magnetic Reluctance Preamp", | |
| accent = "#E5A93C", | |
| background = "silver", | |
| layout = { | |
| { | |
| type = "row", | |
| children = { | |
| { type = "knob", param = "TineBell", label = "TINE BELL", knobStyle = "vintage", size = 52 }, | |
| { type = "knob", param = "TineDecay", label = "DECAY", unit = "s", knobStyle = "vintage", size = 52 }, | |
| { type = "knob", param = "HammerHardness", label = "HAMMER", knobStyle = "vintage", size = 52 }, | |
| { type = "knob", param = "PickupDistance", label = "PICKUP", knobStyle = "vintage", size = 52 }, | |
| { type = "knob", param = "BarkSymmetry", label = "BARK", unit = "%", knobStyle = "vintage", size = 52 }, | |
| } | |
| }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "hslider", param = "PickupDistance", label = "MAGNETIC POLE DISTANCE (MELLOW <-> BARK)", width = 480, style = "capsule" }, | |
| } | |
| }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "knob", param = "BassBoost", label = "BASS", unit = "dB", knobStyle = "vintage", size = 52 }, | |
| { type = "knob", param = "TrebleSparkle", label = "TREBLE", unit = "dB", knobStyle = "vintage", size = 52 }, | |
| { type = "knob", param = "Drive", label = "DRIVE", knobStyle = "vintage", size = 52 }, | |
| { type = "knob", param = "TremoloSpeed", label = "TREM SPEED", unit = "Hz", knobStyle = "vintage", size = 52 }, | |
| { type = "knob", param = "TremoloDepth", label = "TREMOLO", unit = "%", knobStyle = "vintage", size = 52 }, | |
| } | |
| } | |
| } | |
| } | |
| } | |
| end | |
| function RhodesEPiano.rack() | |
| return { | |
| rows = { | |
| { | |
| { id = "tine_exciter", title = "TINE & HAMMER EXCITOR", hp = 16, row = 1, category = "VCO" }, | |
| { id = "pickup_sat", title = "MAGNETIC PICKUP (BARK)", hp = 14, row = 1, category = "VCF" }, | |
| }, | |
| { | |
| { id = "preamp_eq", title = "2-BAND PREAMP TONE", hp = 14, row = 2, category = "MOD" }, | |
| { id = "opt_tremolo", title = "SUITCASE OPTICAL TREM", hp = 16, row = 2, category = "FX" }, | |
| }, | |
| }, | |
| cables = { | |
| { from = "1:0:1", to = "1:1:0", color = "audio" }, | |
| { from = "1:1:1", to = "2:0:0", color = "audio" }, | |
| { from = "2:0:1", to = "2:1:0", color = "modulation" }, | |
| } | |
| } | |
| end | |
| return RhodesEPiano | |
| ]], | |
| luaParams = { | |
| ["TineBell"] = 0.0400, | |
| ["TineDecay"] = 2.4000, | |
| ["HammerHardness"] = 1.1968, | |
| ["TineClick"] = 0.8000, | |
| ["PickupDistance"] = 1.2028, | |
| ["BarkSymmetry"] = 0.9880, | |
| ["BassBoost"] = -12.0000, | |
| ["TrebleSparkle"] = 3.5000, | |
| ["Drive"] = 0.7200, | |
| ["TremoloSpeed"] = 4.2000, | |
| ["TremoloDepth"] = 0.5500, | |
| }, | |
| notes = { | |
| { id = "p_1787616261091861_0", pitch = 67, startStep = 7.90, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_1", pitch = 70, startStep = 7.95, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_2", pitch = 63, startStep = 8.00, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_3", pitch = 68, startStep = 23.90, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_4", pitch = 75, startStep = 23.95, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_5", pitch = 72, startStep = 24.00, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_6", pitch = 77, startStep = 39.90, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_7", pitch = 70, startStep = 39.95, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_8", pitch = 74, startStep = 40.00, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_9", pitch = 75, startStep = 55.90, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_10", pitch = 68, startStep = 55.95, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_11", pitch = 72, startStep = 56.00, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| }, | |
| clips = { | |
| { | |
| id = "clip_track_1787616241793_0", | |
| name = "SNES Synth", | |
| trackId = "track_1787616241793", | |
| startBar = 0, | |
| barLength = 4, | |
| notes = { | |
| { id = "p_1787616261091861_0", pitch = 67, startStep = 7.90, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_1", pitch = 70, startStep = 7.95, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_2", pitch = 63, startStep = 8.00, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_3", pitch = 68, startStep = 23.90, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_4", pitch = 75, startStep = 23.95, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_5", pitch = 72, startStep = 24.00, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_6", pitch = 77, startStep = 39.90, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_7", pitch = 70, startStep = 39.95, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_8", pitch = 74, startStep = 40.00, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_9", pitch = 75, startStep = 55.90, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_10", pitch = 68, startStep = 55.95, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "p_1787616261091861_11", pitch = 72, startStep = 56.00, durationSteps = 2.00, velocity = 0.57, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| }, | |
| }, | |
| }, | |
| fxRack = { | |
| { id = "fx_1788065417669_convolutionReverb", name = "Room Designer", type = "convolutionReverb", enabled = true, mix = 0.50, params = { ["DryLevel"] = 1.0000, ["WetLevel"] = 0.5000, ["PreDelayMs"] = 10.0000, ["HighCut"] = 8000.0000, ["Width"] = 15.0000, ["Length"] = 25.0000, ["Height"] = 10.0000, ["Material"] = 0.0000, ["RT60"] = 2.2000, ["Damping"] = 0.2500, ["SourceX"] = 0.5000, ["SourceY"] = 0.5000, ["SourceZ"] = 0.5000, ["ListenerX"] = 0.5000, ["ListenerY"] = 0.8000, ["ListenerZ"] = 0.5000, ["StereoWidth"] = 0.2000 }, irSampleName = "Room: Rhodes Mark I E-Piano_fx_1788065417669_convolutionReverb", presetId = "room_designer", luaScriptCode = [[ | |
| -- @name: Room Designer | |
| -- @category: audioFx | |
| -- @description: Interactive 3D Room Acoustic Synthesizer with Image Source & Velvet Noise physics | |
| local RoomDesigner = {} | |
| function RoomDesigner.init() | |
| Param.add("Width", 1.0, 30.0, 15.0, 0.5) | |
| Param.add("Length", 1.0, 40.0, 25.0, 0.5) | |
| Param.add("Height", 1.0, 18.0, 10.0, 0.5) | |
| Param.choice("Material", {"Wood Paneling", "Pine Wood", "Acoustic Foam", "Hard Concrete", "Birch Plywood", "Velvet Drapes", "Sheet Metal", "Carpet"}, 0.0) | |
| Param.add("RT60", 0.1, 5.0, 2.2, 0.05) | |
| Param.add("Damping", 0.0, 1.0, 0.25, 0.05) | |
| Param.add("SourceX", 0.05, 0.95, 0.50, 0.01) | |
| Param.add("SourceY", 0.05, 0.95, 0.50, 0.01) | |
| Param.add("SourceZ", 0.05, 0.95, 0.50, 0.01) | |
| Param.add("ListenerX", 0.05, 0.95, 0.50, 0.01) | |
| Param.add("ListenerY", 0.05, 0.95, 0.80, 0.01) | |
| Param.add("ListenerZ", 0.05, 0.95, 0.50, 0.01) | |
| Param.add("StereoWidth", 0.05, 1.00, 0.20, 0.01) | |
| Param.add("DryLevel", 0.0, 1.5, 1.0, 0.05) | |
| Param.add("WetLevel", 0.0, 1.5, 0.5, 0.05) | |
| end | |
| function RoomDesigner.process(input_l, input_r, params) | |
| return input_l, input_r | |
| end | |
| function RoomDesigner.gui() | |
| return { | |
| panel = { | |
| title = "Room Designer", | |
| subtitle = "3D Image Source & Velvet Noise Acoustic Engine", | |
| background = "grunge", | |
| accent = "#21F4E8", | |
| layout = { | |
| { type = "space_visualizer", height = 135 }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "listbox", param = "Material", label = "MATERIAL", width = 130, height = 70 }, | |
| { type = "knob", param = "Width", label = "WIDTH", unit = "m" }, | |
| { type = "knob", param = "Length", label = "LENGTH", unit = "m" }, | |
| { type = "knob", param = "Height", label = "HEIGHT", unit = "m" }, | |
| { type = "knob", param = "RT60", label = "DECAY", unit = "s" }, | |
| { type = "knob", param = "Damping", label = "DAMP" }, | |
| } | |
| }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "knob", param = "SourceX", label = "SRC X", size = 36 }, | |
| { type = "knob", param = "SourceY", label = "SRC Y", size = 36 }, | |
| { type = "knob", param = "SourceZ", label = "SRC Z", size = 36 }, | |
| { type = "knob", param = "ListenerX", label = "MIC X", size = 36 }, | |
| { type = "knob", param = "ListenerY", label = "MIC Y", size = 36 }, | |
| { type = "knob", param = "ListenerZ", label = "MIC Z", size = 36 }, | |
| { type = "knob", param = "StereoWidth", label = "SPREAD", unit = "m", size = 36 }, | |
| } | |
| }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "hslider", param = "DryLevel", label = "DRY LEVEL", width = 480, style = "capsule" }, | |
| } | |
| }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "hslider", param = "WetLevel", label = "WET LEVEL", width = 480, style = "capsule" }, | |
| } | |
| } | |
| } | |
| } | |
| } | |
| end | |
| function RoomDesigner.rack() | |
| return { | |
| rows = { | |
| { | |
| { id = "in_lr", title = "AUDIO INPUT L/R", hp = 14, row = 1, category = "OUT" }, | |
| { id = "early_ref", title = "3D IMAGE SOURCE CORE", hp = 16, row = 1, category = "FX" }, | |
| }, | |
| { | |
| { id = "velvet_tail", title = "VELVET NOISE LATE TAIL", hp = 16, row = 2, category = "FX" }, | |
| { id = "out_lr", title = "ACOUSTIC ROOM OUT", hp = 14, row = 2, category = "OUT" }, | |
| }, | |
| }, | |
| cables = { | |
| { from = "1:0:1", to = "1:1:0", color = "audio" }, | |
| { from = "1:1:1", to = "2:0:0", color = "audio" }, | |
| { from = "2:0:1", to = "2:1:0", color = "audio" }, | |
| } | |
| } | |
| end | |
| return RoomDesigner | |
| ]], luaParams = { ["Width"] = 15.0000, ["Length"] = 25.0000, ["Height"] = 10.0000, ["Material"] = 0.0000, ["RT60"] = 2.2000, ["Damping"] = 0.2500, ["SourceX"] = 0.5000, ["SourceY"] = 0.5000, ["SourceZ"] = 0.5000, ["ListenerX"] = 0.5000, ["ListenerY"] = 0.8000, ["ListenerZ"] = 0.5000, ["StereoWidth"] = 0.2000, ["DryLevel"] = 1.0000, ["WetLevel"] = 0.5000 } }, | |
| }, | |
| }, | |
| { | |
| id = "track_1787616471342", | |
| name = "Dub Guitar", | |
| color = 0xff3399ff, | |
| type = "luaScript", | |
| volume = 0.450, | |
| pan = 0.000, | |
| isMuted = false, | |
| isSoloed = false, | |
| chordFollowMode = "off", | |
| sampleName = "kick", | |
| synthWaveform = "sawtooth", | |
| cutoff = 3000.0, | |
| resonance = 1.00, | |
| attack = 0.010, | |
| release = 0.300, | |
| trackerColumns = 4, | |
| activeView = "pianoRoll", | |
| luaScriptCode = [[ | |
| -- @id: reggae_guitar | |
| -- @name: Dub Guitar | |
| -- @category: instrument | |
| -- @description: Physical modeling of a clean single-coil/P90 electric guitar for reggae and dub music: multi-string plectrum strum rake, Karplus-Strong waveguide with palm mute damping, 130Hz sub-bass cut, 3.2kHz pick bite, and vintage tube preamp. Best paired with Cab Designer FX (2x12 Open-Back cab)! | |
| local ReggaeGuitar = {} | |
| function ReggaeGuitar.init() | |
| -- Strum & Pluck Mechanics | |
| Param.add("StrumSpread", 2.0, 30.0, 8.5) | |
| Param.add("PickBite", 0.2, 3.0, 1.25) | |
| -- Palm Mute & Waveguide Damping | |
| Param.add("PalmDamp", 0.05, 0.90, 0.42) | |
| Param.add("ChopDecay", 0.04, 0.60, 0.18) | |
| Param.add("Sustain", 0.85, 0.999, 0.994) | |
| -- Single-Coil Pickup Voicing & Preamp | |
| Param.add("BiteGain", -6.0, 12.0, 4.5) | |
| Param.add("ToneCutoff", 2000.0, 12000.0, 6800.0) | |
| Param.add("Drive", 0.5, 3.0, 1.15) | |
| end | |
| function ReggaeGuitar.process(time, freq, note, params) | |
| local spread = params["StrumSpread"] or 8.5 | |
| local bite = params["PickBite"] or 1.25 | |
| local damp = params["PalmDamp"] or 0.42 | |
| local decay = params["ChopDecay"] or 0.18 | |
| local drive = params["Drive"] or 1.15 | |
| -- Direct single-cycle fallback | |
| local phase = 2.0 * math.pi * freq * time | |
| local stringCore = math.sin(phase) + 0.35 * math.sin(phase * 2.0) + 0.15 * math.sin(phase * 3.0) | |
| local pickClick = (math.random() * 2.0 - 1.0) * math.exp(-time * 180.0) * bite * 0.4 | |
| local chopEnv = math.exp(-time / math.max(0.02, decay)) | |
| local raw = (stringCore + pickClick) * chopEnv | |
| return math.tanh(raw * drive) * 0.95 | |
| end | |
| function ReggaeGuitar.gui() | |
| return { | |
| panel = { | |
| title = "DUB GUITAR", | |
| subtitle = "Sound System Physical Waveguide & Preamp", | |
| accent = "#00E676", | |
| background = "matte_metal", | |
| rackSides = "brushed_steel", | |
| cornerRadius = 0, | |
| layout = { | |
| -- RED SECTION: Strum & Plectrum Attack | |
| { | |
| type = "group", | |
| label = "STRUM & PLECTRUM ATTACK (RED)", | |
| accent = "#FF2A2A", | |
| children = { | |
| { | |
| type = "row", | |
| children = { | |
| { type = "knob", param = "StrumSpread", label = "STRUM MS", unit = "ms", knobStyle = "vintage", size = 52 }, | |
| { type = "knob", param = "PickBite", label = "PICK BITE", knobStyle = "vintage", size = 52 }, | |
| } | |
| } | |
| } | |
| }, | |
| -- GOLD SECTION: Palm Mute & Chop Envelope | |
| { | |
| type = "group", | |
| label = "PALM MUTE & CHOP TIMING (GOLD)", | |
| accent = "#FFB300", | |
| children = { | |
| { | |
| type = "row", | |
| children = { | |
| { type = "knob", param = "PalmDamp", label = "PALM MUTE", unit = "%", knobStyle = "vintage", size = 52 }, | |
| { type = "knob", param = "ChopDecay", label = "CHOP DECAY", unit = "s", knobStyle = "vintage", size = 52 }, | |
| { type = "knob", param = "Sustain", label = "SUSTAIN", knobStyle = "vintage", size = 52 }, | |
| } | |
| }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "hslider", param = "PalmDamp", label = "PALM MUTE DAMPING (PERCUSSIVE CHICK <-> OPEN RING)", style = "capsule" }, | |
| } | |
| } | |
| } | |
| }, | |
| -- GREEN SECTION: Preamp & Pick Bite Voicing | |
| { | |
| type = "group", | |
| label = "PREAMP & 3.2kHz TONE BARK (GREEN)", | |
| accent = "#00E676", | |
| children = { | |
| { | |
| type = "row", | |
| children = { | |
| { type = "knob", param = "BiteGain", label = "3.2kHz BITE", unit = "dB", knobStyle = "vintage", size = 52 }, | |
| { type = "knob", param = "ToneCutoff", label = "TONE", unit = "Hz", knobStyle = "vintage", size = 52 }, | |
| { type = "knob", param = "Drive", label = "PREAMP DRIVE", knobStyle = "vintage", size = 52 }, | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| end | |
| function ReggaeGuitar.rack() | |
| return { | |
| rows = { | |
| { | |
| { id = "strum_exciter", title = "PLECTRUM STRUM EXCITOR", hp = 16, row = 1, category = "VCO" }, | |
| { id = "waveguide", title = "KARPLUS WAVEGUIDE", hp = 14, row = 1, category = "VCF" }, | |
| }, | |
| { | |
| { id = "pickup_voicing", title = "P90 PICKUP & 130Hz HPF", hp = 16, row = 2, category = "MOD" }, | |
| { id = "master", title = "GUITAR CLEAN OUT", hp = 14, row = 2, category = "OUT" }, | |
| }, | |
| }, | |
| cables = { | |
| { from = "1:0:1", to = "1:1:0", color = "audio" }, | |
| { from = "1:1:1", to = "2:0:0", color = "audio" }, | |
| { from = "2:0:1", to = "2:1:0", color = "audio" }, | |
| } | |
| } | |
| end | |
| return ReggaeGuitar | |
| ]], | |
| luaParams = { | |
| ["StrumSpread"] = 13.2040, | |
| ["PickBite"] = 1.2500, | |
| ["PalmDamp"] = 0.3322, | |
| ["ChopDecay"] = 0.2315, | |
| ["Sustain"] = 0.9877, | |
| ["BiteGain"] = 2.7000, | |
| ["ToneCutoff"] = 6280.0000, | |
| ["Drive"] = 1.9100, | |
| }, | |
| notes = { | |
| { id = "p_1787616486777697_0", pitch = 79, startStep = 4.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_1", pitch = 51, startStep = 4.08, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_2", pitch = 75, startStep = 4.13, durationSteps = 1.86, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_3", pitch = 70, startStep = 4.19, durationSteps = 1.79, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_4", pitch = 70, startStep = 6.56, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_5", pitch = 75, startStep = 6.57, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_6", pitch = 79, startStep = 6.63, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_7", pitch = 51, startStep = 6.72, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_8", pitch = 75, startStep = 12.04, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_9", pitch = 70, startStep = 12.07, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_10", pitch = 51, startStep = 12.10, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_11", pitch = 79, startStep = 12.10, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_12", pitch = 56, startStep = 19.99, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_13", pitch = 68, startStep = 20.03, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_14", pitch = 75, startStep = 20.05, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_15", pitch = 72, startStep = 20.15, durationSteps = 1.80, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_16", pitch = 72, startStep = 22.53, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_17", pitch = 56, startStep = 22.68, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_18", pitch = 68, startStep = 22.68, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_19", pitch = 75, startStep = 22.69, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_20", pitch = 72, startStep = 28.03, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_21", pitch = 56, startStep = 28.04, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_22", pitch = 68, startStep = 28.04, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_23", pitch = 75, startStep = 28.18, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_24", pitch = 70, startStep = 36.02, durationSteps = 1.90, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_25", pitch = 58, startStep = 36.08, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_26", pitch = 74, startStep = 36.16, durationSteps = 1.93, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_27", pitch = 77, startStep = 36.21, durationSteps = 1.73, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_28", pitch = 70, startStep = 38.51, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_29", pitch = 77, startStep = 38.51, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_30", pitch = 58, startStep = 38.61, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_31", pitch = 74, startStep = 38.69, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_32", pitch = 58, startStep = 44.11, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_33", pitch = 74, startStep = 44.12, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_34", pitch = 70, startStep = 44.14, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_35", pitch = 77, startStep = 44.22, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_36", pitch = 75, startStep = 52.04, durationSteps = 1.93, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_37", pitch = 72, startStep = 52.10, durationSteps = 1.93, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_38", pitch = 68, startStep = 52.12, durationSteps = 1.93, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_39", pitch = 56, startStep = 52.22, durationSteps = 1.70, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_40", pitch = 56, startStep = 54.49, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_41", pitch = 75, startStep = 54.55, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_42", pitch = 68, startStep = 54.68, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_43", pitch = 72, startStep = 54.71, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_44", pitch = 68, startStep = 59.99, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_45", pitch = 56, startStep = 60.14, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_46", pitch = 75, startStep = 60.17, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_47", pitch = 72, startStep = 60.21, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| }, | |
| clips = { | |
| { | |
| id = "clip_track_1787616471342_0", | |
| name = "SNES Synth", | |
| trackId = "track_1787616471342", | |
| startBar = 0, | |
| barLength = 4, | |
| notes = { | |
| { id = "p_1787616486777697_0", pitch = 79, startStep = 4.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_1", pitch = 51, startStep = 4.08, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_2", pitch = 75, startStep = 4.13, durationSteps = 1.86, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_3", pitch = 70, startStep = 4.19, durationSteps = 1.79, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_4", pitch = 70, startStep = 6.56, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_5", pitch = 75, startStep = 6.57, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_6", pitch = 79, startStep = 6.63, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_7", pitch = 51, startStep = 6.72, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_8", pitch = 75, startStep = 12.04, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_9", pitch = 70, startStep = 12.07, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_10", pitch = 51, startStep = 12.10, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_11", pitch = 79, startStep = 12.10, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_12", pitch = 56, startStep = 19.99, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_13", pitch = 68, startStep = 20.03, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_14", pitch = 75, startStep = 20.05, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_15", pitch = 72, startStep = 20.15, durationSteps = 1.80, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_16", pitch = 72, startStep = 22.53, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_17", pitch = 56, startStep = 22.68, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_18", pitch = 68, startStep = 22.68, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_19", pitch = 75, startStep = 22.69, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_20", pitch = 72, startStep = 28.03, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_21", pitch = 56, startStep = 28.04, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_22", pitch = 68, startStep = 28.04, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_23", pitch = 75, startStep = 28.18, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_24", pitch = 70, startStep = 36.02, durationSteps = 1.90, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_25", pitch = 58, startStep = 36.08, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_26", pitch = 74, startStep = 36.16, durationSteps = 1.93, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_27", pitch = 77, startStep = 36.21, durationSteps = 1.73, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_28", pitch = 70, startStep = 38.51, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_29", pitch = 77, startStep = 38.51, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_30", pitch = 58, startStep = 38.61, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_31", pitch = 74, startStep = 38.69, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_32", pitch = 58, startStep = 44.11, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_33", pitch = 74, startStep = 44.12, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_34", pitch = 70, startStep = 44.14, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_35", pitch = 77, startStep = 44.22, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_36", pitch = 75, startStep = 52.04, durationSteps = 1.93, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_37", pitch = 72, startStep = 52.10, durationSteps = 1.93, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_38", pitch = 68, startStep = 52.12, durationSteps = 1.93, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_39", pitch = 56, startStep = 52.22, durationSteps = 1.70, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_40", pitch = 56, startStep = 54.49, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_41", pitch = 75, startStep = 54.55, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_42", pitch = 68, startStep = 54.68, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_43", pitch = 72, startStep = 54.71, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_44", pitch = 68, startStep = 59.99, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_45", pitch = 56, startStep = 60.14, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_46", pitch = 75, startStep = 60.17, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1787616486777697_47", pitch = 72, startStep = 60.21, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| }, | |
| }, | |
| }, | |
| }, | |
| { | |
| id = "track_1788115500254", | |
| name = "Hawaiian Ukulele", | |
| color = 0xffff8c00, | |
| type = "luaScript", | |
| volume = 0.373, | |
| pan = 0.000, | |
| isMuted = true, | |
| isSoloed = false, | |
| chordFollowMode = "off", | |
| sampleName = "kick", | |
| synthWaveform = "sawtooth", | |
| cutoff = 3000.0, | |
| resonance = 1.00, | |
| attack = 0.010, | |
| release = 0.300, | |
| trackerColumns = 4, | |
| activeView = "pianoRoll", | |
| luaScriptCode = [[ | |
| -- @id: hawaiian_ukulele | |
| -- @name: Hawaiian Ukulele | |
| -- @category: instrument | |
| -- @description: Physical modeling of a traditional Hawaiian acoustic concert ukulele: nylon/fluorocarbon 4-string strum brush, Karplus-Strong waveguide with acoustic loss damping, Hawaiian Koa wood soundboard and air cavity modal resonance (330Hz, 590Hz, 1150Hz), 180Hz sub cut, and 2.8kHz island brightness. | |
| local HawaiianUkulele = {} | |
| function HawaiianUkulele.init() | |
| -- Strum & Nylon Pluck | |
| Param.add("StrumSpread", 2.0, 25.0, 6.5) | |
| Param.add("PluckSnap", 0.2, 3.0, 1.1) | |
| -- Waveguide Damping & Decay | |
| Param.add("Damping", 0.05, 0.85, 0.32) | |
| Param.add("Decay", 0.08, 1.20, 0.35) | |
| Param.add("Sustain", 0.85, 0.999, 0.990) | |
| -- Hawaiian Koa Acoustic Tone & Brightness | |
| Param.add("Brightness", -6.0, 10.0, 3.5) | |
| Param.add("Tone", 2500.0, 14000.0, 7200.0) | |
| end | |
| function HawaiianUkulele.process(time, freq, note, params) | |
| local spread = params["StrumSpread"] or 6.5 | |
| local snap = params["PluckSnap"] or 1.1 | |
| local damping = params["Damping"] or 0.32 | |
| local decay = params["Decay"] or 0.35 | |
| -- Nylon string core with acoustic warmth | |
| local phase = 2.0 * math.pi * freq * time | |
| local stringCore = math.sin(phase) + 0.45 * math.sin(phase * 2.0) + 0.20 * math.sin(phase * 3.0) + 0.10 * math.sin(phase * 4.0) | |
| local nylonClick = (math.random() * 2.0 - 1.0) * math.exp(-time * 220.0) * snap * 0.35 | |
| local strumEnv = math.exp(-time / math.max(0.04, decay)) | |
| local raw = (stringCore + nylonClick) * strumEnv | |
| return math.tanh(raw * 1.05) * 0.92 | |
| end | |
| function HawaiianUkulele.gui() | |
| return { | |
| panel = { | |
| title = "HAWAIIAN UKULELE", | |
| subtitle = "Acoustic Koa Wood Soundboard & Nylon Strings", | |
| accent = "#FFB300", | |
| background = "blonde_pine", | |
| rackSides = "walnut", | |
| cornerRadius = 0, | |
| layout = { | |
| { | |
| type = "row", | |
| children = { | |
| { type = "knob", param = "StrumSpread", label = "STRUM MS", unit = "ms", knobStyle = "vintage", size = 52 }, | |
| { type = "knob", param = "PluckSnap", label = "PLUCK SNAP", knobStyle = "vintage", size = 52 }, | |
| { type = "knob", param = "Damping", label = "DAMPING", unit = "%", knobStyle = "vintage", size = 52 }, | |
| { type = "knob", param = "Decay", label = "DECAY", unit = "s", knobStyle = "vintage", size = 52 }, | |
| { type = "knob", param = "Sustain", label = "SUSTAIN", knobStyle = "vintage", size = 52 }, | |
| } | |
| }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "hslider", param = "Damping", label = "ACOUSTIC STRING DAMPING (MUTED <-> OPEN RING)", style = "capsule" }, | |
| } | |
| }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "knob", param = "Brightness", label = "2.8kHz AIR", unit = "dB", knobStyle = "vintage", size = 52 }, | |
| { type = "knob", param = "Tone", label = "KOA TONE", unit = "Hz", knobStyle = "vintage", size = 52 }, | |
| } | |
| } | |
| } | |
| } | |
| } | |
| end | |
| function HawaiianUkulele.rack() | |
| return { | |
| rows = { | |
| { | |
| { id = "strum_exciter", title = "NYLON STRUM EXCITOR", hp = 16, row = 1, category = "VCO" }, | |
| { id = "waveguide", title = "KARPLUS WAVEGUIDE", hp = 14, row = 1, category = "VCF" }, | |
| }, | |
| { | |
| { id = "body_resonance", title = "KOA BODY & AIR CAVITY", hp = 16, row = 2, category = "MOD" }, | |
| { id = "master", title = "UKULELE CLEAN OUT", hp = 14, row = 2, category = "OUT" }, | |
| }, | |
| }, | |
| cables = { | |
| { from = "1:0:1", to = "1:1:0", color = "audio" }, | |
| { from = "1:1:1", to = "2:0:0", color = "audio" }, | |
| { from = "2:0:1", to = "2:1:0", color = "audio" }, | |
| } | |
| } | |
| end | |
| return HawaiianUkulele | |
| ]], | |
| luaParams = { | |
| ["StrumSpread"] = 6.5000, | |
| ["PluckSnap"] = 1.1000, | |
| ["Damping"] = 0.3200, | |
| ["Decay"] = 0.3500, | |
| ["Sustain"] = 0.9900, | |
| ["Brightness"] = 3.5000, | |
| ["Tone"] = 7200.0000, | |
| }, | |
| notes = { | |
| { id = "p_1788115505116433_0", pitch = 79, startStep = 0.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_1", pitch = 51, startStep = 0.08, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_2", pitch = 75, startStep = 0.13, durationSteps = 1.86, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_3", pitch = 70, startStep = 0.19, durationSteps = 1.79, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_4", pitch = 70, startStep = 2.56, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_5", pitch = 75, startStep = 2.57, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_6", pitch = 79, startStep = 2.63, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_7", pitch = 51, startStep = 2.72, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_8", pitch = 75, startStep = 8.04, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_9", pitch = 70, startStep = 8.07, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_10", pitch = 51, startStep = 8.10, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_11", pitch = 79, startStep = 8.10, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_12", pitch = 56, startStep = 15.99, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_13", pitch = 68, startStep = 16.03, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_14", pitch = 75, startStep = 16.05, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_15", pitch = 72, startStep = 16.15, durationSteps = 1.80, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_16", pitch = 72, startStep = 18.53, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_17", pitch = 56, startStep = 18.68, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_18", pitch = 68, startStep = 18.68, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_19", pitch = 75, startStep = 18.69, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_20", pitch = 72, startStep = 24.03, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_21", pitch = 56, startStep = 24.04, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_22", pitch = 68, startStep = 24.04, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_23", pitch = 75, startStep = 24.18, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_24", pitch = 70, startStep = 32.02, durationSteps = 1.90, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_25", pitch = 58, startStep = 32.08, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_26", pitch = 74, startStep = 32.16, durationSteps = 1.93, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_27", pitch = 77, startStep = 32.21, durationSteps = 1.73, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_28", pitch = 70, startStep = 34.51, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_29", pitch = 77, startStep = 34.51, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_30", pitch = 58, startStep = 34.61, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_31", pitch = 74, startStep = 34.69, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_32", pitch = 58, startStep = 40.11, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_33", pitch = 74, startStep = 40.12, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_34", pitch = 70, startStep = 40.14, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_35", pitch = 77, startStep = 40.22, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_36", pitch = 75, startStep = 48.04, durationSteps = 1.93, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_37", pitch = 72, startStep = 48.10, durationSteps = 1.93, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_38", pitch = 68, startStep = 48.12, durationSteps = 1.93, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_39", pitch = 56, startStep = 48.22, durationSteps = 1.70, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_40", pitch = 56, startStep = 50.49, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_41", pitch = 75, startStep = 50.55, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_42", pitch = 68, startStep = 50.68, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_43", pitch = 72, startStep = 50.71, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_44", pitch = 68, startStep = 55.99, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_45", pitch = 56, startStep = 56.14, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_46", pitch = 75, startStep = 56.17, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_47", pitch = 72, startStep = 56.21, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| }, | |
| clips = { | |
| { | |
| id = "clip_track_1788115500254_0", | |
| name = "Hawaiian Ukulele", | |
| trackId = "track_1788115500254", | |
| startBar = 0, | |
| barLength = 4, | |
| notes = { | |
| { id = "p_1788115505116433_0", pitch = 79, startStep = 0.00, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_1", pitch = 51, startStep = 0.08, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_2", pitch = 75, startStep = 0.13, durationSteps = 1.86, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_3", pitch = 70, startStep = 0.19, durationSteps = 1.79, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_4", pitch = 70, startStep = 2.56, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_5", pitch = 75, startStep = 2.57, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_6", pitch = 79, startStep = 2.63, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_7", pitch = 51, startStep = 2.72, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_8", pitch = 75, startStep = 8.04, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_9", pitch = 70, startStep = 8.07, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_10", pitch = 51, startStep = 8.10, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_11", pitch = 79, startStep = 8.10, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_12", pitch = 56, startStep = 15.99, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_13", pitch = 68, startStep = 16.03, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_14", pitch = 75, startStep = 16.05, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_15", pitch = 72, startStep = 16.15, durationSteps = 1.80, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_16", pitch = 72, startStep = 18.53, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_17", pitch = 56, startStep = 18.68, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_18", pitch = 68, startStep = 18.68, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_19", pitch = 75, startStep = 18.69, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_20", pitch = 72, startStep = 24.03, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_21", pitch = 56, startStep = 24.04, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_22", pitch = 68, startStep = 24.04, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_23", pitch = 75, startStep = 24.18, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_24", pitch = 70, startStep = 32.02, durationSteps = 1.90, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_25", pitch = 58, startStep = 32.08, durationSteps = 1.92, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_26", pitch = 74, startStep = 32.16, durationSteps = 1.93, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_27", pitch = 77, startStep = 32.21, durationSteps = 1.73, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_28", pitch = 70, startStep = 34.51, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_29", pitch = 77, startStep = 34.51, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_30", pitch = 58, startStep = 34.61, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_31", pitch = 74, startStep = 34.69, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_32", pitch = 58, startStep = 40.11, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_33", pitch = 74, startStep = 40.12, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_34", pitch = 70, startStep = 40.14, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_35", pitch = 77, startStep = 40.22, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_36", pitch = 75, startStep = 48.04, durationSteps = 1.93, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_37", pitch = 72, startStep = 48.10, durationSteps = 1.93, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_38", pitch = 68, startStep = 48.12, durationSteps = 1.93, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_39", pitch = 56, startStep = 48.22, durationSteps = 1.70, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_40", pitch = 56, startStep = 50.49, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_41", pitch = 75, startStep = 50.55, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_42", pitch = 68, startStep = 50.68, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_43", pitch = 72, startStep = 50.71, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_44", pitch = 68, startStep = 55.99, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_45", pitch = 56, startStep = 56.14, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_46", pitch = 75, startStep = 56.17, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "p_1788115505116433_47", pitch = 72, startStep = 56.21, durationSteps = 2.00, velocity = 0.79, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| }, | |
| }, | |
| }, | |
| }, | |
| } | |
| }, | |
| { | |
| id = "p1", | |
| name = "Pattern B", | |
| lengthSteps = 32, | |
| tracks = { | |
| { | |
| id = "p1_k", | |
| name = "Eats Kick", | |
| color = 0xffff007a, | |
| type = "luaScript", | |
| volume = 0.950, | |
| pan = 0.000, | |
| isMuted = false, | |
| isSoloed = false, | |
| chordFollowMode = "off", | |
| sampleName = "kick", | |
| synthWaveform = "sawtooth", | |
| cutoff = 3000.0, | |
| resonance = 1.00, | |
| attack = 0.010, | |
| release = 0.300, | |
| trackerColumns = 4, | |
| activeView = "pianoRoll", | |
| luaScriptCode = [[ | |
| -- --- Procedural Sub Kick Drum Script (Lua) --- | |
| local ProceduralKick = {} | |
| function ProceduralKick.init() | |
| Param.add("StartFreq", 100.0, 300.0, 160.0) | |
| Param.add("EndFreq", 30.0, 60.0, 42.0) | |
| Param.add("PitchDecay", 0.01, 0.1, 0.035) | |
| Param.add("AmpDecay", 0.1, 0.6, 0.35) | |
| Param.add("Click", 0.0, 1.0, 0.0) | |
| end | |
| function ProceduralKick.process(time, freq, note, params) | |
| local startF = params["StartFreq"] or 160.0 | |
| local endF = params["EndFreq"] or 42.0 | |
| local pDecay = params["PitchDecay"] or 0.035 | |
| local aDecay = params["AmpDecay"] or 0.35 | |
| local click = params["Click"] or 0.0 | |
| -- Pitch sweep envelope | |
| local curFreq = endF + (startF - endF) * math.exp(-time / math.max(0.005, pDecay)) | |
| local phase = 2.0 * math.pi * curFreq * time | |
| local subSine = math.sin(phase) | |
| -- Transient click | |
| local clickTransient = (math.random() * 2.0 - 1.0) * math.exp(-time * 150.0) * click | |
| -- Amplitude envelope decaying to near zero by time = aDecay | |
| local env = math.exp(-time * 5.0 / math.max(0.01, aDecay)) | |
| local rawOutput = (subSine * 0.85 + clickTransient * 0.15) * env | |
| -- Smooth fade toward edge of kick duration to guarantee clean drop to silence | |
| local maxDur = math.max(0.1, aDecay) | |
| local fadeStart = maxDur - 0.04 | |
| local edgeFade = 1.0 | |
| if time > fadeStart then | |
| local norm = math.max(0.0, math.min(1.0, (maxDur - time) / 0.04)) | |
| edgeFade = 0.5 * (1.0 - math.cos(math.pi * norm)) | |
| end | |
| if time >= maxDur then edgeFade = 0.0 end | |
| return math.tanh(rawOutput * edgeFade * 1.3) | |
| end | |
| return ProceduralKick | |
| ]], | |
| luaParams = { | |
| ["StartFreq"] = 160.0000, | |
| ["EndFreq"] = 42.0000, | |
| ["PitchDecay"] = 0.0350, | |
| ["AmpDecay"] = 0.3500, | |
| ["Click"] = 0.0000, | |
| }, | |
| steps = { | |
| [1] = { pitch = 36, velocity = 0.95, isSlide = false, isAccent = true }, | |
| [2] = { pitch = 36, velocity = 0.95, isSlide = false, isAccent = true }, | |
| [3] = { pitch = 36, velocity = 0.95, isSlide = false, isAccent = true }, | |
| [4] = { pitch = 36, velocity = 0.95, isSlide = false, isAccent = true }, | |
| [5] = { pitch = 36, velocity = 0.95, isSlide = false, isAccent = true }, | |
| [6] = { pitch = 36, velocity = 0.95, isSlide = false, isAccent = true }, | |
| [7] = { pitch = 36, velocity = 0.95, isSlide = false, isAccent = true }, | |
| [8] = { pitch = 36, velocity = 0.95, isSlide = false, isAccent = true }, | |
| }, | |
| notes = { | |
| { id = "k_0", pitch = 36, startStep = 0.00, durationSteps = 1.00, velocity = 0.95, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "k_4", pitch = 36, startStep = 4.00, durationSteps = 1.00, velocity = 0.95, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "k_8", pitch = 36, startStep = 8.00, durationSteps = 1.00, velocity = 0.95, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "k_12", pitch = 36, startStep = 12.00, durationSteps = 1.00, velocity = 0.95, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "k_16", pitch = 36, startStep = 16.00, durationSteps = 1.00, velocity = 0.95, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "k_20", pitch = 36, startStep = 20.00, durationSteps = 1.00, velocity = 0.95, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "k_24", pitch = 36, startStep = 24.00, durationSteps = 1.00, velocity = 0.95, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "k_28", pitch = 36, startStep = 28.00, durationSteps = 1.00, velocity = 0.95, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| }, | |
| clips = { | |
| { | |
| id = "c_k1", | |
| name = "Kick Beat A", | |
| trackId = "t_kick", | |
| startBar = 0, | |
| barLength = 4, | |
| notes = { | |
| { id = "k_0", pitch = 36, startStep = 0.00, durationSteps = 1.00, velocity = 0.95, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "k_4", pitch = 36, startStep = 4.00, durationSteps = 1.00, velocity = 0.95, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "k_8", pitch = 36, startStep = 8.00, durationSteps = 1.00, velocity = 0.95, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "k_12", pitch = 36, startStep = 12.00, durationSteps = 1.00, velocity = 0.95, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "k_16", pitch = 36, startStep = 16.00, durationSteps = 1.00, velocity = 0.95, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "k_20", pitch = 36, startStep = 20.00, durationSteps = 1.00, velocity = 0.95, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "k_24", pitch = 36, startStep = 24.00, durationSteps = 1.00, velocity = 0.95, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "k_28", pitch = 36, startStep = 28.00, durationSteps = 1.00, velocity = 0.95, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| }, | |
| }, | |
| }, | |
| }, | |
| { | |
| id = "p1_s", | |
| name = "Eats Snare", | |
| color = 0xffff8c00, | |
| type = "luaScript", | |
| volume = 0.850, | |
| pan = 0.000, | |
| isMuted = false, | |
| isSoloed = false, | |
| chordFollowMode = "off", | |
| sampleName = "kick", | |
| synthWaveform = "sawtooth", | |
| cutoff = 3000.0, | |
| resonance = 1.00, | |
| attack = 0.010, | |
| release = 0.300, | |
| trackerColumns = 4, | |
| activeView = "pianoRoll", | |
| luaScriptCode = [[ | |
| -- --- Procedural Snare Drum Script (Lua) --- | |
| local ProceduralSnare = {} | |
| function ProceduralSnare.init() | |
| Param.add("ToneFreq", 100.0, 300.0, 185.0) | |
| Param.add("Snappy", 0.0, 1.0, 0.65) | |
| Param.add("Decay", 0.05, 0.5, 0.1) | |
| end | |
| function ProceduralSnare.process(time, freq, note, params) | |
| local toneFreq = params["ToneFreq"] or 185.0 | |
| local snappy = params["Snappy"] or 0.65 | |
| local decay = params["Decay"] or 0.1 | |
| -- Body tone (pitch sweep) | |
| local sweepFreq = toneFreq * math.exp(-time * 40.0) | |
| local body = math.sin(2.0 * math.pi * sweepFreq * time) * math.exp(-time * 25.0) | |
| -- Snare noise wires | |
| local noise = (math.random() * 2.0 - 1.0) * math.exp(-time / decay) | |
| local filteredNoise = DSP.highpass(noise, 1500.0, 1.0) | |
| local output = body * (1.0 - snappy) + filteredNoise * snappy | |
| return math.tanh(output * 1.2) | |
| end | |
| return ProceduralSnare | |
| ]], | |
| luaParams = { | |
| ["ToneFreq"] = 185.0000, | |
| ["Snappy"] = 0.6500, | |
| ["Decay"] = 0.1000, | |
| }, | |
| steps = { | |
| [1] = { pitch = 38, velocity = 0.90, isSlide = false, isAccent = true }, | |
| [2] = { pitch = 38, velocity = 0.90, isSlide = false, isAccent = true }, | |
| [3] = { pitch = 38, velocity = 0.90, isSlide = false, isAccent = true }, | |
| [4] = { pitch = 38, velocity = 0.90, isSlide = false, isAccent = true }, | |
| }, | |
| notes = { | |
| { id = "s_4", pitch = 38, startStep = 4.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "s_12", pitch = 38, startStep = 12.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "s_20", pitch = 38, startStep = 20.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "s_28", pitch = 38, startStep = 28.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| }, | |
| clips = { | |
| { | |
| id = "c_s1", | |
| name = "Snare Pattern", | |
| trackId = "t_snare", | |
| startBar = 0, | |
| barLength = 4, | |
| notes = { | |
| { id = "s_4", pitch = 38, startStep = 4.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "s_12", pitch = 38, startStep = 12.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "s_20", pitch = 38, startStep = 20.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "s_28", pitch = 38, startStep = 28.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| }, | |
| }, | |
| }, | |
| }, | |
| { | |
| id = "p1_h", | |
| name = "Eats Hats", | |
| color = 0xffffb700, | |
| type = "luaScript", | |
| volume = 0.750, | |
| pan = 0.000, | |
| isMuted = false, | |
| isSoloed = false, | |
| chordFollowMode = "off", | |
| sampleName = "kick", | |
| synthWaveform = "sawtooth", | |
| cutoff = 3000.0, | |
| resonance = 1.00, | |
| attack = 0.010, | |
| release = 0.300, | |
| trackerColumns = 4, | |
| activeView = "pianoRoll", | |
| luaScriptCode = [[ | |
| -- --- Procedural Hi-Hat Synth Script (Lua) --- | |
| local ProceduralHiHat = {} | |
| function ProceduralHiHat.init() | |
| Param.add("Cutoff", 4000.0, 14000.0, 8500.0) | |
| Param.add("Decay", 0.01, 0.4, 0.05) | |
| Param.add("Metallic", 0.0, 1.0, 0.15) | |
| end | |
| function ProceduralHiHat.process(time, freq, note, params) | |
| local cutoff = params["Cutoff"] or 8500.0 | |
| local decay = params["Decay"] or 0.05 | |
| local metallic = params["Metallic"] or 0.15 | |
| local env = math.exp(-time / math.max(0.005, decay)) | |
| -- Metallic ring harmonics (6 detuned square waves for TR-style metallic sheen) | |
| local ring1 = math.sin(2.0 * math.pi * 205.0 * time) > 0 and 1.0 or -1.0 | |
| local ring2 = math.sin(2.0 * math.pi * 305.0 * time) > 0 and 1.0 or -1.0 | |
| local ring3 = math.sin(2.0 * math.pi * 365.0 * time) > 0 and 1.0 or -1.0 | |
| local ring4 = math.sin(2.0 * math.pi * 396.0 * time) > 0 and 1.0 or -1.0 | |
| local ring5 = math.sin(2.0 * math.pi * 434.0 * time) > 0 and 1.0 or -1.0 | |
| local ring6 = math.sin(2.0 * math.pi * 700.0 * time) > 0 and 1.0 or -1.0 | |
| local metallicRing = (ring1 + ring2 + ring3 + ring4 + ring5 + ring6) / 6.0 | |
| -- White noise generator (primary hi-hat sound source) | |
| local noise = (math.random() * 2.0 - 1.0) | |
| local rawSignal = noise * (1.0 - metallic * 0.4) + metallicRing * (metallic * 0.4) | |
| -- High-pass filtered noise sibilance | |
| local filtered = DSP.highpass(rawSignal, cutoff, 1.2) | |
| return filtered * env * 0.75 | |
| end | |
| return ProceduralHiHat | |
| ]], | |
| luaParams = { | |
| ["Cutoff"] = 8500.0000, | |
| ["Decay"] = 0.0500, | |
| ["Metallic"] = 0.1500, | |
| }, | |
| steps = { | |
| [1] = { pitch = 42, velocity = 0.60, isSlide = false, isAccent = false }, | |
| [2] = { pitch = 42, velocity = 0.90, isSlide = false, isAccent = true }, | |
| [3] = { pitch = 42, velocity = 0.60, isSlide = false, isAccent = false }, | |
| [4] = { pitch = 42, velocity = 0.90, isSlide = false, isAccent = true }, | |
| [5] = { pitch = 42, velocity = 0.60, isSlide = false, isAccent = false }, | |
| [6] = { pitch = 42, velocity = 0.90, isSlide = false, isAccent = true }, | |
| [7] = { pitch = 42, velocity = 0.60, isSlide = false, isAccent = false }, | |
| [8] = { pitch = 42, velocity = 0.90, isSlide = false, isAccent = true }, | |
| [9] = { pitch = 42, velocity = 0.60, isSlide = false, isAccent = false }, | |
| [10] = { pitch = 42, velocity = 0.90, isSlide = false, isAccent = true }, | |
| [11] = { pitch = 42, velocity = 0.60, isSlide = false, isAccent = false }, | |
| [12] = { pitch = 42, velocity = 0.90, isSlide = false, isAccent = true }, | |
| [13] = { pitch = 42, velocity = 0.60, isSlide = false, isAccent = false }, | |
| [14] = { pitch = 42, velocity = 0.90, isSlide = false, isAccent = true }, | |
| [15] = { pitch = 42, velocity = 0.60, isSlide = false, isAccent = false }, | |
| [16] = { pitch = 42, velocity = 0.90, isSlide = false, isAccent = true }, | |
| }, | |
| notes = { | |
| { id = "h_0", pitch = 42, startStep = 0.00, durationSteps = 1.00, velocity = 0.60, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "h_2", pitch = 42, startStep = 2.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "h_4", pitch = 42, startStep = 4.00, durationSteps = 1.00, velocity = 0.60, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "h_6", pitch = 42, startStep = 6.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "h_8", pitch = 42, startStep = 8.00, durationSteps = 1.00, velocity = 0.60, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "h_10", pitch = 42, startStep = 10.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "h_12", pitch = 42, startStep = 12.00, durationSteps = 1.00, velocity = 0.60, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "h_14", pitch = 42, startStep = 14.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "h_16", pitch = 42, startStep = 16.00, durationSteps = 1.00, velocity = 0.60, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "h_18", pitch = 42, startStep = 18.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "h_20", pitch = 42, startStep = 20.00, durationSteps = 1.00, velocity = 0.60, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "h_22", pitch = 42, startStep = 22.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| }, | |
| clips = { | |
| { | |
| id = "clip_p1_h_0", | |
| name = "Eats Hats Clip", | |
| trackId = "p1_h", | |
| startBar = 0, | |
| barLength = 2, | |
| luaScriptCode = [[ | |
| -- --- Procedural Hi-Hat Synth Script (Lua) --- | |
| local ProceduralHiHat = {} | |
| function ProceduralHiHat.init() | |
| Param.add("Cutoff", 4000.0, 14000.0, 8500.0) | |
| Param.add("Decay", 0.01, 0.4, 0.05) | |
| Param.add("Metallic", 0.0, 1.0, 0.15) | |
| end | |
| function ProceduralHiHat.process(time, freq, note, params) | |
| local cutoff = params["Cutoff"] or 8500.0 | |
| local decay = params["Decay"] or 0.05 | |
| local metallic = params["Metallic"] or 0.15 | |
| local env = math.exp(-time / math.max(0.005, decay)) | |
| -- Metallic ring harmonics (6 detuned square waves for TR-style metallic sheen) | |
| local ring1 = math.sin(2.0 * math.pi * 205.0 * time) > 0 and 1.0 or -1.0 | |
| local ring2 = math.sin(2.0 * math.pi * 305.0 * time) > 0 and 1.0 or -1.0 | |
| local ring3 = math.sin(2.0 * math.pi * 365.0 * time) > 0 and 1.0 or -1.0 | |
| local ring4 = math.sin(2.0 * math.pi * 396.0 * time) > 0 and 1.0 or -1.0 | |
| local ring5 = math.sin(2.0 * math.pi * 434.0 * time) > 0 and 1.0 or -1.0 | |
| local ring6 = math.sin(2.0 * math.pi * 700.0 * time) > 0 and 1.0 or -1.0 | |
| local metallicRing = (ring1 + ring2 + ring3 + ring4 + ring5 + ring6) / 6.0 | |
| -- White noise generator (primary hi-hat sound source) | |
| local noise = (math.random() * 2.0 - 1.0) | |
| local rawSignal = noise * (1.0 - metallic * 0.4) + metallicRing * (metallic * 0.4) | |
| -- High-pass filtered noise sibilance | |
| local filtered = DSP.highpass(rawSignal, cutoff, 1.2) | |
| return filtered * env * 0.75 | |
| end | |
| return ProceduralHiHat | |
| ]], | |
| luaParams = { ["Cutoff"] = 8500.0000, ["Decay"] = 0.0500, ["Metallic"] = 0.1500 }, | |
| notes = { | |
| { id = "h_0", pitch = 42, startStep = 0.00, durationSteps = 1.00, velocity = 0.60, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "h_2", pitch = 42, startStep = 2.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "h_4", pitch = 42, startStep = 4.00, durationSteps = 1.00, velocity = 0.60, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "h_6", pitch = 42, startStep = 6.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "h_8", pitch = 42, startStep = 8.00, durationSteps = 1.00, velocity = 0.60, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "h_10", pitch = 42, startStep = 10.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "h_12", pitch = 42, startStep = 12.00, durationSteps = 1.00, velocity = 0.60, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "h_14", pitch = 42, startStep = 14.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "h_16", pitch = 42, startStep = 16.00, durationSteps = 1.00, velocity = 0.60, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "h_18", pitch = 42, startStep = 18.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "h_20", pitch = 42, startStep = 20.00, durationSteps = 1.00, velocity = 0.60, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| { id = "h_22", pitch = 42, startStep = 22.00, durationSteps = 1.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = false }, | |
| }, | |
| }, | |
| }, | |
| }, | |
| { | |
| id = "p1_w", | |
| name = "Eats 303", | |
| color = 0xff00ff66, | |
| type = "luaScript", | |
| volume = 0.900, | |
| pan = 0.000, | |
| isMuted = false, | |
| isSoloed = false, | |
| chordFollowMode = "off", | |
| sampleName = "kick", | |
| synthWaveform = "sawtooth", | |
| cutoff = 3000.0, | |
| resonance = 1.00, | |
| attack = 0.010, | |
| release = 0.300, | |
| trackerColumns = 4, | |
| activeView = "pianoRoll", | |
| luaScriptCode = [[ | |
| -- --- JC-303 Roland TB-303 Acid Engine (Lua) --- | |
| local Acid303 = {} | |
| function Acid303.init() | |
| Param.add("Waveform", 0.0, 1.0, 0.0) -- 0 = Saw, 1 = Square | |
| Param.add("Cutoff", 100.0, 6500.0, 1600.0) | |
| Param.add("Resonance", 0.5, 16.0, 8.0) | |
| Param.add("EnvMod", 0.0, 1.0, 0.75) | |
| Param.add("Decay", 0.05, 1.2, 0.28) | |
| Param.add("Accent", 0.0, 1.0, 0.6) | |
| Param.add("Slide", 0.0, 1.0, 0.4) | |
| Param.add("Overdrive", 0.0, 1.0, 0.3) | |
| end | |
| function Acid303.process(time, freq, note, params, targetNote, isSlide, isAccent) | |
| local waveType = params["Waveform"] or 0.0 | |
| local cutoff = params["Cutoff"] or 1600.0 | |
| local res = params["Resonance"] or 8.0 | |
| local envMod = params["EnvMod"] or 0.75 | |
| local decay = params["Decay"] or 0.28 | |
| local accent = params["Accent"] or 0.6 | |
| local drive = params["Overdrive"] or 0.3 | |
| local slideParam = params["Slide"] or 0.4 | |
| -- Pitch glide / Portamento logic for JC-303 continuous monophonic voice | |
| local currentFreq = freq | |
| if targetNote and targetNote > 0 then | |
| local targetFreq = 440.0 * (2.0 ^ ((targetNote - 69) / 12.0)) | |
| currentFreq = targetFreq + (freq - targetFreq) * math.exp(-time / 0.060) | |
| elseif isSlide or slideParam > 0.5 then | |
| local targetFreq = targetNote and (440.0 * (2.0 ^ ((targetNote - 69) / 12.0))) or freq | |
| currentFreq = targetFreq + (freq - targetFreq) * math.exp(-time / 0.060) | |
| end | |
| -- JC-303 Oscillators: Leaky Integrator Sawtooth & Differentiated Square | |
| local phase = time * currentFreq | |
| local normPhase = phase - math.floor(phase) | |
| local sawRaw = 2.0 * normPhase - 1.0 | |
| local sawHP = sawRaw - 0.85 * math.exp(-time * 12.0) | |
| local sqrRaw = normPhase < 0.46 and 0.75 or -0.75 | |
| local osc = waveType < 0.5 and sawHP or sqrRaw | |
| -- Dynamic Accent & VCF Envelope Decay Dynamics | |
| local hasAccent = isAccent or (accent > 0.7 and not isSlide) | |
| local envBoost = hasAccent and (1.0 + accent * 1.1) or 1.0 | |
| local envDecay = decay / (hasAccent and (1.0 + accent * 0.9) or 1.0) | |
| local env = math.exp(-time / envDecay) | |
| local accentPulse = hasAccent and (accent * 0.4 * math.exp(-time / 0.035)) or 0.0 | |
| -- 24dB 4-Pole Diode Ladder Filter simulation with feedback saturation | |
| local modCutoff = cutoff + (envMod * (env + accentPulse) * 6500.0 * envBoost) | |
| local filtered = DSP.lowpass(osc, modCutoff, res) | |
| -- Post-VCF 150Hz 1-Pole High-Pass filter & overdrive saturation | |
| local highpassed = filtered * 0.98 | |
| local output = highpassed * (hasAccent and 1.35 or 1.0) | |
| if drive > 0.05 then | |
| output = math.tanh(output * (1.0 + drive * 4.0)) | |
| end | |
| return output | |
| end | |
| return Acid303 | |
| ]], | |
| luaParams = { | |
| ["Waveform"] = 0.0000, | |
| ["Cutoff"] = 1800.0000, | |
| ["Resonance"] = 8.0000, | |
| ["EnvMod"] = 0.7500, | |
| ["Decay"] = 0.2800, | |
| ["Accent"] = 0.6000, | |
| ["Slide"] = 0.4000, | |
| ["Overdrive"] = 0.3000, | |
| }, | |
| steps = { | |
| [1] = { pitch = 36, velocity = 0.85, isSlide = false, isAccent = true }, | |
| [2] = { pitch = 42, velocity = 0.85, isSlide = false, isAccent = true }, | |
| [3] = { pitch = 36, velocity = 0.85, isSlide = false, isAccent = true }, | |
| [4] = { pitch = 42, velocity = 0.85, isSlide = false, isAccent = true }, | |
| [5] = { pitch = 36, velocity = 0.85, isSlide = false, isAccent = true }, | |
| [6] = { pitch = 42, velocity = 0.85, isSlide = false, isAccent = true }, | |
| [7] = { pitch = 36, velocity = 0.85, isSlide = false, isAccent = true }, | |
| [8] = { pitch = 42, velocity = 0.85, isSlide = false, isAccent = true }, | |
| [9] = { pitch = 36, velocity = 0.85, isSlide = false, isAccent = true }, | |
| [10] = { pitch = 42, velocity = 0.85, isSlide = false, isAccent = true }, | |
| [11] = { pitch = 36, velocity = 0.85, isSlide = false, isAccent = true }, | |
| [12] = { pitch = 42, velocity = 0.85, isSlide = false, isAccent = true }, | |
| [13] = { pitch = 36, velocity = 0.85, isSlide = false, isAccent = true }, | |
| [14] = { pitch = 42, velocity = 0.85, isSlide = false, isAccent = true }, | |
| [15] = { pitch = 36, velocity = 0.85, isSlide = false, isAccent = true }, | |
| [16] = { pitch = 42, velocity = 0.85, isSlide = false, isAccent = true }, | |
| }, | |
| notes = { | |
| { id = "n1", pitch = 36, startStep = 0.00, durationSteps = 2.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "n2", pitch = 36, startStep = 2.00, durationSteps = 1.00, velocity = 0.80, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "n3", pitch = 48, startStep = 3.00, durationSteps = 1.00, velocity = 1.00, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "n4", pitch = 39, startStep = 4.00, durationSteps = 2.00, velocity = 0.85, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "n5", pitch = 41, startStep = 6.00, durationSteps = 2.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "n6", pitch = 43, startStep = 8.00, durationSteps = 2.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "n7", pitch = 36, startStep = 10.00, durationSteps = 2.00, velocity = 0.95, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "n8", pitch = 48, startStep = 12.00, durationSteps = 2.00, velocity = 1.00, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "n9", pitch = 46, startStep = 14.00, durationSteps = 2.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| }, | |
| clips = { | |
| { | |
| id = "c_w1", | |
| name = "Acid 303 Riff", | |
| trackId = "t_lua_303", | |
| startBar = 0, | |
| barLength = 4, | |
| notes = { | |
| { id = "n1", pitch = 36, startStep = 0.00, durationSteps = 2.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "n2", pitch = 36, startStep = 2.00, durationSteps = 1.00, velocity = 0.80, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "n3", pitch = 48, startStep = 3.00, durationSteps = 1.00, velocity = 1.00, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "n4", pitch = 39, startStep = 4.00, durationSteps = 2.00, velocity = 0.85, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "n5", pitch = 41, startStep = 6.00, durationSteps = 2.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "n6", pitch = 43, startStep = 8.00, durationSteps = 2.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "n7", pitch = 36, startStep = 10.00, durationSteps = 2.00, velocity = 0.95, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "n8", pitch = 48, startStep = 12.00, durationSteps = 2.00, velocity = 1.00, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| { id = "n9", pitch = 46, startStep = 14.00, durationSteps = 2.00, velocity = 0.90, column = 0, effectCommand = "00", isSlide = false, isAccent = true }, | |
| }, | |
| }, | |
| }, | |
| }, | |
| } | |
| }, | |
| }, | |
| arranger = { | |
| activePatternIndex = 0, | |
| items = { | |
| { patternId = "p0", startBar = 0, barLength = 4 }, | |
| { patternId = "p1", startBar = 4, barLength = 4 }, | |
| } | |
| }, | |
| chordTrack = { | |
| { id = "chord_1787689858568_0", startBar = 0, barLength = 1.0, rootPitchClass = 0, quality = "major" }, | |
| { id = "chord_1787704225794_1", startBar = 1, barLength = 1.0, rootPitchClass = 0, quality = "maj9" }, | |
| { id = "chord_1787704225794_2", startBar = 2, barLength = 1.0, rootPitchClass = 9, quality = "min9" }, | |
| { id = "chord_1787704225794_3", startBar = 3, barLength = 1.0, rootPitchClass = 2, quality = "min9" }, | |
| { id = "chord_1787704225794_4", startBar = 4, barLength = 1.0, rootPitchClass = 7, quality = "dominant7" }, | |
| { id = "chord_1787704190095_5", startBar = 5, barLength = 1.0, rootPitchClass = 3, quality = "major" }, | |
| { id = "chord_1787704190095_6", startBar = 6, barLength = 1.0, rootPitchClass = 10, quality = "major" }, | |
| }, | |
| masterFx = { | |
| { id = "fx_1788056360682_luaFX", name = "Eats-Spectrum", type = "luaFX", enabled = true, mix = 1.00, params = { ["Gain"] = 1.0000, ["Decay"] = 0.6000, ["Mode"] = 0.0000 }, presetId = "eats_spectrum", luaScriptCode = [[ | |
| -- @name: Eats-Spectrum | |
| -- @category: audioFx | |
| -- @description: 16-band graphic spectrum analyzer visualizer with peak hold caps | |
| local Spectrum = {} | |
| function Spectrum.init() | |
| Param.add("Gain", 0.2, 4.0, 1.0, 0.1) | |
| Param.add("Decay", 0.1, 2.0, 0.6, 0.05) | |
| Param.choice("Mode", {"16-Band Bar", "8-Band Chunky", "Peak Hold", "Smooth Curve"}, 0.0) | |
| end | |
| function Spectrum.process(input_l, input_r, params) | |
| return input_l, input_r | |
| end | |
| function Spectrum.gui() | |
| return { | |
| panel = { | |
| title = "Eats-Spectrum", | |
| subtitle = "16-Band Real-Time Spectrum Analyzer", | |
| background = "dark", | |
| accent = "#00E5FF", | |
| layout = { | |
| { | |
| type = "canvas", | |
| mode = "spectrum", | |
| width = 340, | |
| height = 180 | |
| }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "knob", param = "Gain", label = "GAIN", unit = "x" }, | |
| { type = "knob", param = "Decay", label = "DECAY", unit = "s" }, | |
| { type = "listbox", param = "Mode", label = "METER MODE", width = 120, height = 70 } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| end | |
| function Spectrum.rack() | |
| return { | |
| rows = { | |
| { | |
| { id = "in_lr", title = "AUDIO INPUT L/R", hp = 14, row = 1, category = "OUT" }, | |
| { id = "spectrum_fft", title = "16-BAND FFT ANALYZER", hp = 16, row = 1, category = "FX" }, | |
| }, | |
| { | |
| { id = "thru_out", title = "THRU AUDIO OUT", hp = 14, row = 2, category = "OUT" }, | |
| }, | |
| }, | |
| cables = { | |
| { from = "1:0:1", to = "1:1:0", color = "audio" }, | |
| { from = "1:0:1", to = "2:0:0", color = "audio" }, | |
| } | |
| } | |
| end | |
| return Spectrum | |
| ]], luaParams = { ["Gain"] = 1.0000, ["Decay"] = 0.6000, ["Mode"] = 0.0000 } }, | |
| { id = "fx_1788056364837_luaFX", name = "Eats-Scope", type = "luaFX", enabled = true, mix = 1.00, params = { ["Timebase"] = 1.0000, ["Gain"] = 1.0000, ["GlowColor"] = 0.0000 }, presetId = "eats_scope", luaScriptCode = [[ | |
| -- @name: Eats-Scope | |
| -- @category: audioFx | |
| -- @description: Glowing neon vector oscilloscope and waveform monitor visualizer | |
| local Scope = {} | |
| function Scope.init() | |
| Param.add("Timebase", 0.1, 2.0, 1.0, 0.05) | |
| Param.add("Gain", 0.1, 3.0, 1.0, 0.1) | |
| Param.choice("GlowColor", {"Neon Mint", "Cyber Cyan", "Laser Red", "Gold Solar", "Purple Dream"}, 0.0) | |
| end | |
| function Scope.process(input_l, input_r, params) | |
| return input_l, input_r | |
| end | |
| function Scope.gui() | |
| return { | |
| panel = { | |
| title = "Eats-Scope", | |
| subtitle = "Vector Waveform Oscilloscope Visualizer", | |
| background = "dark", | |
| accent = "#00FF9D", | |
| layout = { | |
| { | |
| type = "canvas", | |
| mode = "vector", | |
| width = 340, | |
| height = 180 | |
| }, | |
| { | |
| type = "row", | |
| children = { | |
| { type = "knob", param = "Timebase", label = "TIMEBASE", unit = "x" }, | |
| { type = "knob", param = "Gain", label = "GAIN", unit = "x" }, | |
| { type = "listbox", param = "GlowColor", label = "BEAM COLOR", width = 120, height = 70 } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| end | |
| function Scope.rack() | |
| return { | |
| rows = { | |
| { | |
| { id = "in_lr", title = "AUDIO INPUT L/R", hp = 14, row = 1, category = "OUT" }, | |
| { id = "vector_scope", title = "VECTOR OSCILLOSCOPE", hp = 16, row = 1, category = "FX" }, | |
| }, | |
| { | |
| { id = "thru_out", title = "THRU AUDIO OUT", hp = 14, row = 2, category = "OUT" }, | |
| }, | |
| }, | |
| cables = { | |
| { from = "1:0:1", to = "1:1:0", color = "audio" }, | |
| { from = "1:0:1", to = "2:0:0", color = "audio" }, | |
| } | |
| } | |
| end | |
| return Scope | |
| ]], luaParams = { ["Timebase"] = 1.0000, ["Gain"] = 1.0000, ["GlowColor"] = 0.0000 } }, | |
| }, | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment