Skip to content

Instantly share code, notes, and snippets.

@Dinir
Last active May 6, 2026 05:37
Show Gist options
  • Select an option

  • Save Dinir/c4fba7f2844de6f6fb18e48ae818af35 to your computer and use it in GitHub Desktop.

Select an option

Save Dinir/c4fba7f2844de6f6fb18e48ae818af35 to your computer and use it in GitHub Desktop.
Use various controls within pressing and rotating on Intech Grid EN16. (with a corresponding Grid Editor configuration)
#name=Intech Grid EN16 for FL
# To be used with the Grid Editor configuration: grid-editor://?config-link=nFPiyc4PDsAcsXoR6ebk
from enum import IntFlag
from fl_classes import FlMidiMsg
import midi
import device
import transport
import patterns
import ui
PortNumber = device.getPortNumber()
CCStart = 16
CCShift = 32
ConsecutiveCCAmount = 16
CCs = []
ControlIDs = []
EventIDs = [midi.REC_InvalidID for i in range(0, 32)]
LastValues = [-1.0 for i in range(0, 32)]
# ---- Channel assignments ----
# Encoder rotations for parameter automation: Ch 1 (midiChan == 0), CCs 16-31 and 48-63 (existing setup).
# Encoder push buttons: Ch 16 (midiChan == 15), Note On notes 0..15.
# Jog-style encoders all live on Ch 15 (midiChan == 14), differing by CC number.
ButtonChannel = 15
JogChannel = 14
PatternJogCC = 0 # encoder 5 rotation -- pattern skim
JogCC = 1 # encoder 6 rotation -- timeline jog
MarkerJogCC = 2 # encoder 7 rotation -- jump between markers
UndoJogCC = 3 # encoder 8 rotation -- undo step-by-step
# Notes 6, 8, 9, 10 are intentionally unmapped here -- those buttons are configured
# in Grid Editor to send keystrokes directly:
# note 6 (encoder 7) -> Strum (Alt+S)
# note 8 (encoder 9) -> Quick Quantize Start Times (Shift+Q)
# note 9 (encoder 10) -> Scale Levels (Alt+X)
# note 10 (encoder 11) -> Articulate (Alt+L)
# The FL Python API does not expose these Tools-menu actions, so keystrokes
# from Grid Editor are the only available path.
JogPushNote = 5
# ---- Helpers for dispatch table ----
def _show(window_id):
return lambda: ui.showWindow(window_id)
def _gt(cmd, value=1):
return lambda: transport.globalTransport(cmd, value)
def _clone_pattern():
# Pattern-side equivalent of right-click > "Make unique" in the playlist.
# Clones the currently active pattern into a new slot and switches to it.
# Note: per the API docs, this also closes the Piano Roll to avoid
# accidental edits to the wrong pattern.
patterns.clonePattern()
# ---- Button dispatch (note number -> (callable, label) or None) ----
# Note number maps to encoder push: note N -> encoder (N+1)
ButtonActions = {
0: (_show(midi.widPlaylist), 'Playlist'), # encoder 1
1: (_show(midi.widChannelRack), 'Channel Rack'), # encoder 2
2: (_show(midi.widPianoRoll), 'Piano Roll'), # encoder 3
3: (_show(midi.widMixer), 'Mixer'), # encoder 4
4: (_clone_pattern, 'Clone Pattern'), # encoder 5
5: None, # encoder 6 -- jog encoder push, Step Edit, handled below
6: None, # encoder 7 -- Strum (keystroke Alt+S from Grid Editor)
7: (_gt(midi.FPT_Undo), 'Undo/Redo'), # encoder 8
8: None, # encoder 9 -- Quick Quantize Start Times (Shift+Q keystroke)
9: None, # encoder 10 -- Scale Levels (Alt+X keystroke)
10: None, # encoder 11 -- Articulate (Alt+L keystroke)
11: (_gt(midi.FPT_Metronome), 'Metronome'), # encoder 12
12: (_gt(midi.FPT_Loop), 'Pattern/Song'), # encoder 13
13: (_gt(midi.FPT_Play), 'Start/Pause'), # encoder 14
14: (_gt(midi.FPT_Stop), 'Stop'), # encoder 15
15: (_gt(midi.FPT_Record), 'Record'), # encoder 16
}
def OnInit():
for s in range(0, 2):
for i in range(0, ConsecutiveCCAmount):
index = CCStart + i + CCShift * s
CCs.append(index)
ControlIDs.append(midi.EncodeRemoteControlID(PortNumber, 0, index))
def OnMidiMsg(msg: FlMidiMsg):
status = msg.status & 0xF0
# ---- Pattern jog encoder rotation (encoder 5) ----
if status == midi.MIDI_CONTROLCHANGE and msg.midiChan == JogChannel and msg.data1 == PatternJogCC:
delta = msg.data2 - 64
if delta != 0:
transport.globalTransport(midi.FPT_PatternJog, delta)
current = patterns.patternNumber()
ui.setHintMsg('Pattern {}: {}'.format(current, patterns.getPatternName(current)))
msg.handled = True
return
# ---- Timeline jog encoder rotation (encoder 6) ----
if status == midi.MIDI_CONTROLCHANGE and msg.midiChan == JogChannel and msg.data1 == JogCC:
delta = msg.data2 - 64
if delta != 0:
transport.globalTransport(midi.FPT_Jog, delta)
ui.setHintMsg('Jog: {:+d}'.format(delta))
msg.handled = True
return
# ---- Marker jump jog (encoder 7) -- jump between time markers ----
if status == midi.MIDI_CONTROLCHANGE and msg.midiChan == JogChannel and msg.data1 == MarkerJogCC:
delta = msg.data2 - 64
if delta != 0:
transport.globalTransport(midi.FPT_MarkerJumpJog, delta)
ui.setHintMsg('Marker: {:+d}'.format(delta))
msg.handled = True
return
# ---- Undo step-by-step rotation (encoder 8) ----
if status == midi.MIDI_CONTROLCHANGE and msg.midiChan == JogChannel and msg.data1 == UndoJogCC:
delta = msg.data2 - 64
if delta != 0:
transport.globalTransport(midi.FPT_UndoJog, delta)
ui.setHintMsg('Undo: {:+d}'.format(delta))
msg.handled = True
return
# ---- Encoder push buttons (Note On, configured channel) ----
if status == midi.MIDI_NOTEON and msg.midiChan == ButtonChannel:
# velocity 0 = release, ignore
if msg.data2 == 0:
msg.handled = True
return
# Jog encoder push = Step Edit toggle (handled out of band, since dispatch table has None for note 5)
if msg.data1 == JogPushNote:
transport.globalTransport(midi.FPT_StepEdit, 1)
ui.setHintMsg('EN16: Step Edit')
msg.handled = True
return
action = ButtonActions.get(msg.data1)
if action is None:
return # unmapped or intentionally skipped
func, label = action
func()
ui.setHintMsg('EN16: {}'.format(label))
msg.handled = True
return
def OnRefresh(flags: IntFlag):
if ((flags & midi.HW_Dirty_RemoteLinkValues)
== midi.HW_Dirty_RemoteLinkValues):
for i in range(0, len(CCs)):
NewEventID = device.findEventID(ControlIDs[i])
if NewEventID == midi.REC_InvalidID:
continue
if NewEventID != EventIDs[i]:
EventIDs[i] = NewEventID
LinkedValue = device.getLinkedValue(EventIDs[i])
if LinkedValue == -1.0:
continue
if LinkedValue == LastValues[i]:
continue
LastValues[i] = LinkedValue
ConvertedValue = int(LinkedValue * 127)
device.midiOutMsg(midi.MIDI_CONTROLCHANGE, 0, CCs[i], ConvertedValue)
{
"id": "11568283-e2dd-455d-b867-301ae04334f3",
"modifiedAt": "2026-05-06T05:34:02.399Z",
"createdAt": "2026-05-05T04:26:13.829Z",
"name": "FL Studio Shortcuts and Script 2.0",
"description": "To be used with the script: https://gist.github.com/Dinir/c4fba7f2844de6f6fb18e48ae818af35\n\nEncoders with CC from 20\\~35 and buttons assigned to FL Studio features. The CC range doesn't overlap with Novation Launchkey default knobs assignment.\n| Playlist | Channel Rack | Piano Roll | Mixer |\n| - | - | - | - |\n| Clone Pattern* | Step Edit Toggle* | Strum* ** | Undo/Redo* |\n| Quick Quantize** | Scale Levels** | Articulate** | Metronome |\n| Pat/Song | Start/Pause | Stop | Recording |\n\n\\* the controls include rotation: \n Pattern Jog, Step Edit Jog, Marker Jog, Undo Jog\n\\*\\* sends a keyboard shortcut\n\nUnfortunately the alternative states won't be synced when the keyboard/mouse changes the corresponding controls.",
"type": "EN16",
"version": {
"major": "1",
"minor": "6",
"patch": "5"
},
"configType": "profile",
"configs": [
{
"controlElementNumber": 0,
"events": [
{
"event": 0,
"config": "--[[@sn]] self:gen(\"Playlist\")--[[@sn]] self:gen(\"Playlist\")--[[@l]] local num,bval,eval=self:ind(),self:bva(),self:eva()--[[@s]] self.cc,self.hold=er(num),1--[[@sec]] self:emo(1)self:ev0(50)--[[@cb#Color Definitions]] glc(num,1,clg,clg,clg,1)glc(num,2,clx[1],cld[2],cln[1])glp(num,1,bval)glp(num,2,64)"
},
{
"event": 3,
"config": "--[[@l]] local num,val=self:ind(),self:bva()--[[@bpr]] if self:bst()> 0 then--[[@gms]] self:gms(15,144,0,127)--[[@bprel]] else--[[@bpre]] end--[[@glp]] glp(num,1,val)"
},
{
"event": 2,
"config": "--[[@l]] local num,val,cc=self:ind(),self:eva(),self.cc--[[@cb#MIDI Send]] if self.hold==1 then cc=cc + ccsh end gms(ch,176,cc,val)gtt(num,125)--[[@cb#Color Change]] if val < 64 then glc(num,2,cld[1],cld[2],cld[3],0)elseif val > 64 then glc(num,2,clx[1],clx[2],clx[3],0)end"
},
{
"event": 6,
"config": "--[[@l]] local num=self:ind()--[[@glc]] glc(num,2,clx[1],cld[2],cln[1],0)"
}
]
},
{
"controlElementNumber": 1,
"events": [
{
"event": 0,
"config": "--[[@sn]] self:gen(\"Channel Rack\")--[[@l]] local num,bval,eval=self:ind(),self:bva(),self:eva()--[[@s]] self.cc,self.hold=er(num),1--[[@sec]] self:emo(1)self:ev0(50)--[[@cb#Color Definitions]] glc(num,1,clg,clg,clg,1)glc(num,2,clx[1],cld[2],cln[1])glp(num,1,bval)glp(num,2,64)"
},
{
"event": 3,
"config": "--[[@l]] local num,val=self:ind(),self:bva()--[[@bpr]] if self:bst()> 0 then--[[@gms]] self:gms(15,144,1,127)--[[@bprel]] else--[[@bpre]] end--[[@glp]] glp(num,1,val)"
},
{
"event": 2,
"config": "--[[@l]] local num,val,cc=self:ind(),self:eva(),self.cc--[[@cb#MIDI Send]] if self.hold==1 then cc=cc + ccsh end gms(ch,176,cc,val)gtt(num,125)--[[@cb#Color Change]] if val < 64 then glc(num,2,cld[1],cld[2],cld[3],0)elseif val > 64 then glc(num,2,clx[1],clx[2],clx[3],0)end"
},
{
"event": 6,
"config": "--[[@l]] local num=self:ind()--[[@glc]] glc(num,2,clx[1],cld[2],cln[1],0)"
}
]
},
{
"controlElementNumber": 2,
"events": [
{
"event": 0,
"config": "--[[@sn]] self:gen(\"Piano Roll\")--[[@l]] local num,bval,eval=self:ind(),self:bva(),self:eva()--[[@s]] self.cc,self.hold=er(num),1--[[@sec]] self:emo(1)self:ev0(50)--[[@cb#Color Definitions]] glc(num,1,clg,clg,clg,1)glc(num,2,clx[1],cld[2],cln[1])glp(num,1,bval)glp(num,2,64)"
},
{
"event": 3,
"config": "--[[@l]] local num,val=self:ind(),self:bva()--[[@bpr]] if self:bst()> 0 then--[[@gms]] self:gms(15,144,2,127)--[[@bprel]] else--[[@bpre]] end--[[@glp]] glp(num,1,val)"
},
{
"event": 2,
"config": "--[[@l]] local num,val,cc=self:ind(),self:eva(),self.cc--[[@cb#MIDI Send]] if self.hold==1 then cc=cc + ccsh end gms(ch,176,cc,val)gtt(num,125)--[[@cb#Color Change]] if val < 64 then glc(num,2,cld[1],cld[2],cld[3],0)elseif val > 64 then glc(num,2,clx[1],clx[2],clx[3],0)end"
},
{
"event": 6,
"config": "--[[@l]] local num=self:ind()--[[@glc]] glc(num,2,clx[1],cld[2],cln[1],0)"
}
]
},
{
"controlElementNumber": 3,
"events": [
{
"event": 0,
"config": "--[[@sn]] self:gen(\"Mixer\")--[[@l]] local num,bval,eval=self:ind(),self:bva(),self:eva()--[[@s]] self.cc,self.hold=er(num),1--[[@sec]] self:emo(1)self:ev0(50)--[[@cb#Color Definitions]] glc(num,1,clg,clg,clg,1)glc(num,2,clx[1],cld[2],cln[1])glp(num,1,bval)glp(num,2,64)"
},
{
"event": 3,
"config": "--[[@l]] local num,val=self:ind(),self:bva()--[[@bpr]] if self:bst()> 0 then--[[@gms]] self:gms(15,144,3,127)--[[@bprel]] else--[[@bpre]] end--[[@glp]] glp(num,1,val)"
},
{
"event": 2,
"config": "--[[@l]] local num,val,cc=self:ind(),self:eva(),self.cc--[[@cb#MIDI Send]] if self.hold==1 then cc=cc + ccsh end gms(ch,176,cc,val)gtt(num,125)--[[@cb#Color Change]] if val < 64 then glc(num,2,cld[1],cld[2],cld[3],0)elseif val > 64 then glc(num,2,clx[1],clx[2],clx[3],0)end"
},
{
"event": 6,
"config": "--[[@l]] local num=self:ind()--[[@glc]] glc(num,2,clx[1],cld[2],cln[1],0)"
}
]
},
{
"controlElementNumber": 4,
"events": [
{
"event": 0,
"config": "--[[@sn]] self:gen(\"Pattern Wheel\")--[[@l]] local num,bval,eval=self:ind(),self:bva(),self:eva()--[[@s]] self.cc,self.hold=er(num),0--[[@sec]] self:emo(1)self:ev0(50)--[[@cb#Color Definitions]] glc(num,1,clg,clg,clg,1)glc(num,2,cln[1],cln[2],cln[3])glp(num,1,bval)glp(num,2,64)"
},
{
"event": 3,
"config": "--[[@l]] local num,val,sib=self:ind(),self:bva(),self:ind()+ sib_itv--[[@bpr]] if self:bst()> 0 then--[[@gms]] self:gms(15,144,4,127)--[[@bprel]] else--[[@bpre]] end--[[@glp]] glp(num,1,val)"
},
{
"event": 2,
"config": "--[[@l]] local num,val,cc=self:ind(),self:eva(),self.cc--[[@elr]] if self:est()< 64 then--[[@gms]] self:gms(14,176,0,63)--[[@elrel]] else--[[@gms]] self:gms(14,176,0,65)--[[@elre]] end--[[@cb]] gtt(num,125)--[[@cb#Color Change]] if val < 64 then glc(num,2,cld[1],cld[2],cld[3],0)elseif val > 64 then glc(num,2,clx[1],clx[2],clx[3],0)end"
},
{
"event": 6,
"config": "--[[@l]] local num=self:ind()--[[@glc]] glc(num,2,cln[1],cln[2],cln[3],0)"
}
]
},
{
"controlElementNumber": 5,
"events": [
{
"event": 0,
"config": "--[[@sn]] self:gen(\"Step Edit\")--[[@l]] local num,bval,eval=self:ind(),self:bva(),self:eva()--[[@s]] self.cc,self.hold=er(num),0--[[@sec]] self:emo(1)self:ev0(50)--[[@cb#Color Definitions]] glc(num,1,clg,clg,clg,1)glc(num,2,cln[1],cln[2],cln[3])glp(num,1,bval)glp(num,2,64)--[[@cb]] tgl(num)"
},
{
"event": 3,
"config": "--[[@l]] local num,val,sib=self:ind(),self:bva(),self:ind()- sib_itv--[[@bpr]] if self:bst()> 0 then--[[@gms]] self:gms(15,144,5,127)--[[@bprel]] else--[[@bpre]] end--[[@glp]] glp(num,1,val)"
},
{
"event": 2,
"config": "--[[@l]] local num,val,cc=self:ind(),self:eva(),self.cc--[[@elr]] if self:est()< 64 then--[[@gms]] self:gms(14,176,1,63)--[[@elrel]] else--[[@gms]] self:gms(14,176,1,65)--[[@elre]] end--[[@cb#Action]] gtt(num,125)--[[@cb#Color Change]] if val < 64 then glc(num,2,cld[1],cld[2],cld[3],0)elseif val > 64 then glc(num,2,clx[1],clx[2],clx[3],0)end"
},
{
"event": 6,
"config": "--[[@l]] local num=self:ind()--[[@glc]] glc(num,2,cln[1],cln[2],cln[3],0)"
}
]
},
{
"controlElementNumber": 6,
"events": [
{
"event": 0,
"config": "--[[@sn]] self:gen(\"Strum\")--[[@l]] local num,bval,eval=self:ind(),self:bva(),self:eva()--[[@s]] self.cc,self.hold=er(num),1--[[@sec]] self:emo(1)self:ev0(50)--[[@cb#Color Definitions]] glc(num,1,clg,clg,clg,1)glc(num,2,cln[1],cln[3],cln[1])glp(num,1,bval)glp(num,2,64)"
},
{
"event": 3,
"config": "--[[@l]] local num,val=self:ind(),self:bva()--[[@bpr]] if self:bst()> 0 then--[[@gks]] gks(25,1,1,4,0,2,22,1,0,4)--[[@bprel]] else--[[@bpre]] end--[[@glp]] glp(num,1,val)"
},
{
"event": 2,
"config": "--[[@l]] local num,val,cc=self:ind(),self:eva(),self.cc--[[@elr]] if self:est()< 64 then--[[@gms]] self:gms(14,176,2,63)--[[@elrel]] else--[[@gms]] self:gms(14,176,2,65)--[[@elre]] end--[[@cb#MIDI Send]] gtt(num,125)--[[@cb#Color Change]] if val < 64 then glc(num,2,cld[1],cld[2],cld[3],0)elseif val > 64 then glc(num,2,clx[1],clx[2],clx[3],0)end"
},
{
"event": 6,
"config": "--[[@l]] local num=self:ind()--[[@glc]] glc(num,2,cln[1],cln[3],cln[1],0)"
}
]
},
{
"controlElementNumber": 7,
"events": [
{
"event": 0,
"config": "--[[@sn]] self:gen(\"Undo/Redo\")--[[@l]] local num,bval,eval=self:ind(),self:bva(),self:eva()--[[@s]] self.cc,self.hold=er(num),1--[[@sec]] self:emo(1)self:ev0(50)--[[@cb#Color Definitions]] glc(num,1,clg,clg,clg,1)glc(num,2,cln[3],cln[1],cln[1])glp(num,1,bval)glp(num,2,64)"
},
{
"event": 3,
"config": "--[[@l]] local num,val=self:ind(),self:bva()--[[@bpr]] if self:bst()> 0 then--[[@gms]] self:gms(15,144,7,127)--[[@bprel]] else--[[@bpre]] end--[[@glp]] glp(num,1,val)"
},
{
"event": 2,
"config": "--[[@l]] local num,val,cc=self:ind(),self:eva(),self.cc--[[@cb#MIDI Send]] if self.hold==1 then cc=cc + ccsh end gtt(num,125)--[[@elr]] if self:est()< 64 then--[[@gms]] self:gms(14,176,3,63)--[[@elrel]] else--[[@gms]] self:gms(14,176,3,65)--[[@elre]] end--[[@cb#Color Change]] if val < 64 then glc(num,2,cld[1],cld[2],cld[3],0)elseif val > 64 then glc(num,2,clx[1],clx[2],clx[3],0)end"
},
{
"event": 6,
"config": "--[[@l]] local num=self:ind()--[[@glc]] glc(num,2,cln[3],cln[1],cln[1],0)"
}
]
},
{
"controlElementNumber": 8,
"events": [
{
"event": 0,
"config": "--[[@sn]] self:gen(\"Quick Quantize Start Times\")--[[@l]] local num,bval,eval=self:ind(),self:bva(),self:eva()--[[@s]] self.cc,self.hold=er(num),0--[[@sec]] self:emo(1)self:ev0(50)--[[@cb#Color Definitions]] glc(num,1,clg,clg,clg,1)glc(num,2,cln[1],cln[3],cln[1])glp(num,1,bval)glp(num,2,64)"
},
{
"event": 3,
"config": "--[[@l]] local num,val=self:ind(),self:bva()--[[@bpr]] if self:bst()> 0 then--[[@gks]] gks(25,1,1,2,0,2,20,1,0,2)--[[@bprel]] else--[[@bpre]] end--[[@glp]] glp(num,1,val)"
},
{
"event": 2,
"config": "--[[@l]] local num,val,cc=self:ind(),self:eva(),self.cc--[[@cb#MIDI Send]] if self.hold==1 then cc=cc + ccsh end gms(ch,176,cc,val)gtt(num,125)--[[@cb#Color Change]] if val < 64 then glc(num,2,cld[1],cld[2],cld[3],0)elseif val > 64 then glc(num,2,clx[1],clx[2],clx[3],0)end"
},
{
"event": 6,
"config": "--[[@l]] local num=self:ind()--[[@glc]] glc(num,2,cln[1],cln[3],cln[1],0)"
}
]
},
{
"controlElementNumber": 9,
"events": [
{
"event": 0,
"config": "--[[@sn]] self:gen(\"Scale Levels\")--[[@l]] local num,bval,eval=self:ind(),self:bva(),self:eva()--[[@s]] self.cc,self.hold=er(num),0--[[@sec]] self:emo(1)self:ev0(50)--[[@cb#Color Definitions]] glc(num,1,clg,clg,clg,1)glc(num,2,cln[1],cln[3],cln[1])glp(num,1,bval)glp(num,2,64)"
},
{
"event": 3,
"config": "--[[@l]] local num,val=self:ind(),self:bva()--[[@bpr]] if self:bst()> 0 then--[[@gks]] gks(25,1,1,4,0,2,27,1,0,4)--[[@bprel]] else--[[@bpre]] end--[[@glp]] glp(num,1,val)"
},
{
"event": 2,
"config": "--[[@l]] local num,val,cc=self:ind(),self:eva(),self.cc--[[@cb#MIDI Send]] if self.hold==1 then cc=cc + ccsh end gms(ch,176,cc,val)gtt(num,125)--[[@cb#Color Change]] if val < 64 then glc(num,2,cld[1],cld[2],cld[3],0)elseif val > 64 then glc(num,2,clx[1],clx[2],clx[3],0)end"
},
{
"event": 6,
"config": "--[[@l]] local num=self:ind()--[[@glc]] glc(num,2,cln[1],cln[3],cln[1],0)"
}
]
},
{
"controlElementNumber": 10,
"events": [
{
"event": 0,
"config": "--[[@sn]] self:gen(\"Articulate\")--[[@l]] local num,bval,eval=self:ind(),self:bva(),self:eva()--[[@s]] self.cc,self.hold=er(num),0--[[@sec]] self:emo(1)self:ev0(50)--[[@cb#Color Definitions]] glc(num,1,clg,clg,clg,1)glc(num,2,cln[1],cln[3],cln[1])glp(num,1,bval)glp(num,2,64)"
},
{
"event": 3,
"config": "--[[@l]] local num,val=self:ind(),self:bva()--[[@bpr]] if self:bst()> 0 then--[[@gks]] gks(25,1,1,4,0,2,15,1,0,4)--[[@bprel]] else--[[@bpre]] end--[[@glp]] glp(num,1,val)"
},
{
"event": 2,
"config": "--[[@l]] local num,val,cc=self:ind(),self:eva(),self.cc--[[@cb#MIDI Send]] if self.hold==1 then cc=cc + ccsh end gms(ch,176,cc,val)gtt(num,125)--[[@cb#Color Change]] if val < 64 then glc(num,2,cld[1],cld[2],cld[3],0)elseif val > 64 then glc(num,2,clx[1],clx[2],clx[3],0)end"
},
{
"event": 6,
"config": "--[[@l]] local num=self:ind()--[[@glc]] glc(num,2,cln[1],cln[3],cln[1],0)"
}
]
},
{
"controlElementNumber": 11,
"events": [
{
"event": 0,
"config": "--[[@sn]] self:gen(\"Metronome\")--[[@l]] local num,bval,eval=self:ind(),self:bva(),self:eva()--[[@s]] self.cc,self.hold=er(num),0--[[@sec]] self:emo(1)self:ev0(50)--[[@cb#Color Definitions]] glc(num,1,clg,clg,clg,1)glc(num,2,cln[2],cln[2],cln[2])glp(num,1,bval)glp(num,2,64)"
},
{
"event": 3,
"config": "--[[@l]] local num,val=self:ind(),self:bva()--[[@bpr]] if self:bst()> 0 then--[[@gms]] self:gms(15,144,11,127)--[[@bprel]] else--[[@bpre]] end--[[@glp]] glp(num,1,val)"
},
{
"event": 2,
"config": "--[[@l]] local num,val,cc=self:ind(),self:eva(),self.cc--[[@cb#MIDI Send]] if self.hold==1 then cc=cc + ccsh end gms(ch,176,cc,val)gtt(num,125)--[[@cb#Color Change]] if val < 64 then glc(num,2,cld[1],cld[2],cld[3],0)elseif val > 64 then glc(num,2,clx[1],clx[2],clx[3],0)end"
},
{
"event": 6,
"config": "--[[@l]] local num=self:ind()--[[@glc]] glc(num,2,cln[2],cln[2],cln[2],0)"
}
]
},
{
"controlElementNumber": 12,
"events": [
{
"event": 0,
"config": "--[[@sn]] self:gen(\"Pattern/Song\")--[[@l]] local num,bval,eval=self:ind(),self:bva(),self:eva()--[[@s]] self.cc,self.hold=er(num),0--[[@sec]] self:emo(1)self:ev0(50)--[[@cb#Color Definitions]] glc(num,1,clg,clg,clg,1)glc(num,2,cln[1],cln[2],cln[1])glp(num,1,bval)glp(num,2,64)"
},
{
"event": 3,
"config": "--[[@l]] local num,val=self:ind(),self:bva()--[[@bpr]] if self:bst()> 0 then--[[@gms]] self:gms(15,144,12,127)--[[@bprel]] else--[[@bpre]] end--[[@glp]] glp(num,1,val)"
},
{
"event": 2,
"config": "--[[@l]] local num,val,cc=self:ind(),self:eva(),self.cc--[[@cb#MIDI Send]] if self.hold==1 then cc=cc + ccsh end gms(ch,176,cc,val)gtt(num,125)--[[@cb#Color Change]] if val < 64 then glc(num,2,cld[1],cld[2],cld[3],0)elseif val > 64 then glc(num,2,clx[1],clx[2],clx[3],0)end"
},
{
"event": 6,
"config": "--[[@l]] local num=self:ind()--[[@glc]] glc(num,2,cln[1],cln[2],cln[1],0)"
}
]
},
{
"controlElementNumber": 13,
"events": [
{
"event": 0,
"config": "--[[@sn]] self:gen(\"Start/Pause\")--[[@l]] local num,bval,eval=self:ind(),self:bva(),self:eva()--[[@s]] self.cc,self.hold=er(num),0--[[@sec]] self:emo(1)self:ev0(50)--[[@cb#Color Definitions]] glc(num,1,clg,clg,clg,1)glc(num,2,cln[3],cln[3],cln[3])glp(num,1,bval)glp(num,2,64)"
},
{
"event": 3,
"config": "--[[@l]] local num,val,sib=self:ind(),self:bva(),self:ind()+ sib_itv--[[@bpr]] if self:bst()> 0 then--[[@gms]] self:gms(15,144,13,127)--[[@bprel]] else--[[@bpre]] end--[[@glp]] glp(num,1,val)"
},
{
"event": 2,
"config": "--[[@l]] local num,val,cc=self:ind(),self:eva(),self.cc--[[@cb#MIDI Send]] if self.hold==1 then cc=cc + ccsh end gms(ch,176,cc,val)gtt(num,125)--[[@cb#Color Change]] if val < 64 then glc(num,2,cld[1],cld[2],cld[3],0)elseif val > 64 then glc(num,2,clx[1],clx[2],clx[3],0)end"
},
{
"event": 6,
"config": "--[[@l]] local num=self:ind()--[[@glc]] glc(num,2,cln[3],cln[3],cln[3],0)"
}
]
},
{
"controlElementNumber": 14,
"events": [
{
"event": 0,
"config": "--[[@sn]] self:gen(\"Stop\")--[[@l]] local num,bval,eval=self:ind(),self:bva(),self:eva()--[[@s]] self.cc,self.hold=er(num),0--[[@sec]] self:emo(1)self:ev0(50)--[[@cb#Color Definitions]] glc(num,1,clg,clg,clg,1)glc(num,2,cln[1],cln[2],cln[3])glp(num,1,bval)glp(num,2,64)"
},
{
"event": 3,
"config": "--[[@l]] local num,val,sib=self:ind(),self:bva(),self:ind()- sib_itv--[[@bpr]] if self:bst()> 0 then--[[@gms]] self:gms(15,144,14,127)--[[@bprel]] else--[[@bpre]] end--[[@glp]] glp(num,1,val)"
},
{
"event": 2,
"config": "--[[@l]] local num,val,cc=self:ind(),self:eva(),self.cc--[[@cb#MIDI Send]] if self.hold==1 then cc=cc + ccsh end gms(ch,176,cc,val)gtt(num,125)--[[@cb#Color Change]] if val < 64 then glc(num,2,cld[1],cld[2],cld[3],0)elseif val > 64 then glc(num,2,clx[1],clx[2],clx[3],0)end"
},
{
"event": 6,
"config": "--[[@l]] local num=self:ind()--[[@glc]] glc(num,2,cln[3],cln[3],cln[3],0)"
}
]
},
{
"controlElementNumber": 15,
"events": [
{
"event": 0,
"config": "--[[@sn]] self:gen(\"Recording\")--[[@l]] local num,bval,eval=self:ind(),self:bva(),self:eva()--[[@s]] self.cc,self.hold=er(num),0--[[@sec]] self:emo(1)self:ev0(50)--[[@cb#Color Definitions]] glc(num,1,clg,clg,clg,1)glc(num,2,cln[1],cln[2],cln[3])glp(num,1,bval)glp(num,2,64)"
},
{
"event": 3,
"config": "--[[@l]] local num,val=self:ind(),self:bva()--[[@bpr]] if self:bst()> 0 then--[[@gms]] self:gms(15,144,15,127)--[[@bprel]] else--[[@bpre]] end--[[@glp]] glp(num,1,val)"
},
{
"event": 2,
"config": "--[[@l]] local num,val,cc=self:ind(),self:eva(),self.cc--[[@cb#MIDI Send]] if self.hold==1 then cc=cc + ccsh end gms(ch,176,cc,val)gtt(num,125)--[[@cb#Color Change]] if val < 64 then glc(num,2,cld[1],cld[2],cld[3],0)elseif val > 64 then glc(num,2,clx[1],clx[2],clx[3],0)end"
},
{
"event": 6,
"config": "--[[@l]] local num=self:ind()--[[@glc]] glc(num,2,cln[3],cln[1],cln[1],0)"
}
]
},
{
"controlElementNumber": 255,
"events": [
{
"event": 0,
"config": "--[[@g]] ch,ccs,ccsh,cln,cld,clx,clg,sib_itv=1,20,32,{48,67,83},{103,159,101},{186,184,127},31,1--[[@cb]] glr(cln[1])glg(cln[2])glb(cln[3])function cr(ccn)return ccn - ccs end function er(eln)return eln + ccs end function tgl(n)ele[n].hold=(ele[n].hold + 1)% 2 end function tgl_bth(n,s)for i=n,s,s - n do ele[i].hold=(ele[i].hold + 1)% 2 glp(i,1,ele[i].hold * 127)end end"
},
{
"event": 4,
"config": "--[[@cb]] gpl(gpn())"
},
{
"event": 6,
"config": "--[[@cb]] print(\"tick\")"
}
]
}
],
"owner": "d7Hbrpe9qTfWix6DVvd2DYyjROB3",
"virtualPath": "FL Studio",
"cloudId": "nFPiyc4PDsAcsXoR6ebk",
"fileName": "FL Studio Shortcuts and Script 2.0 1.json",
"isEditable": true,
"syncStatus": "local",
"public": true
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment