Last active
May 6, 2026 05:37
-
-
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)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "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