Skip to content

Instantly share code, notes, and snippets.

@R3V1Z3
Created September 1, 2026 01:18
Show Gist options
  • Select an option

  • Save R3V1Z3/b3d56fc309561d30704af673f2a4b0f7 to your computer and use it in GitHub Desktop.

Select an option

Save R3V1Z3/b3d56fc309561d30704af673f2a4b0f7 to your computer and use it in GitHub Desktop.
-- 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