├── .DS_Store ├── .gitignore ├── 12Step_Bitwig ├── 12Step │ ├── 12Step.html │ ├── 12Step_functions.js │ ├── 12step.control.js │ ├── 12step_outline.png │ └── bitwig.css ├── Bitwig Clip Launching.twelvesteppreset └── README.md ├── K-Board ├── .DS_Store ├── K-Board │ └── KBoard.control.js └── README.md ├── K-Board_Scales ├── .DS_Store ├── KBoard_Scales.control.js ├── KBoard_Scales.js └── README.md ├── QUNEO ├── .DS_Store ├── Documentation │ ├── .DS_Store │ ├── Instructions_versionNotes.txt │ ├── QuNeo.Bitwig.quneopreset │ ├── QuNeo_Bitwig_Documentation.pdf │ └── QuNeo_Bitwig_Layout.pdf ├── QUNEO_Script │ ├── .DS_Store │ ├── QUNEO.control.js │ ├── QUNEO.html │ ├── QUNEO.png │ ├── QUNEO_clips.js │ ├── QUNEO_functions.js │ ├── QUNEO_notes.js │ ├── QUNEO_pages.js │ ├── QUNEO_parameterPage.js │ └── bitwig.css └── README.md ├── QuNexus ├── .DS_Store └── qunexus.control.js ├── README.md └── SoftStep_Bitwig ├── .DS_Store ├── Bitwig_Clips.softsteppreset ├── Bitwig_FX.softsteppreset ├── README.md └── Softstep ├── .DS_Store ├── softstep.control.js └── softstep_functions.js /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataf1ow/KMI_Bitwig_Scripts/ea709ada6dafe49fcb4e516ceb5e4a0472be687e/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | K_Mix/ 3 | -------------------------------------------------------------------------------- /12Step_Bitwig/12Step/12Step.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Bitwig Studio | KMI 12Step 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 24 |
25 | 12step 26 |
27 |
28 |
29 |
12Step Clip Launching
30 |
31 |

This script allows you to control the Clip Launcher in bitwig Studio with the 12Step from Keith Mcmillen Instruments. 32 |

33 |

The first seven keys in the lower row fire clips in the designated tack bank.You can stop playing clips my holding down the corresponding key. The last key will fire the scene. 34 | The first two kesy in the top row will move the track bank up and down. The next two keys will fire the previous or next scene. 35 | The final key will stop all clips. 36 | 37 |

38 |
39 |
40 |
41 |
Upcoming features
42 |
43 |

There will be automatic parameter mapping coming soon. 44 |

45 |
46 |
47 | 53 |
54 | 55 | 56 | -------------------------------------------------------------------------------- /12Step_Bitwig/12Step/12Step_functions.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Sofstep Controller Functions 4 | 5 | Copyright 2014 Evan Bogunia_____evanbeta@keithmcmillen.com 6 | 7 | */ 8 | 9 | 10 | function launchClipSlots(data1, data2) 11 | { 12 | if (data1 < 8 & data2 == 127) 13 | { 14 | trackBank.getTrack((data1)/2).getClipLauncher().launch(data1 % 2); 15 | } 16 | } 17 | 18 | function launchScenes(data1, data2) 19 | { 20 | if (data1 == 10 && data2 ==127) 21 | { 22 | trackBank.launchScene(0) 23 | } 24 | if (data1 == 11 && data2 == 127) 25 | { 26 | trackBank.launchScene(1) 27 | } 28 | 29 | } 30 | 31 | function getGridObserverFunc(track, varToStore) 32 | { 33 | return function(scene, value) 34 | { 35 | varToStore[scene*4 + track] = value; 36 | clipLED() 37 | } 38 | } 39 | 40 | function scrollTrackBank(data1, data2) 41 | { 42 | if (data1 == 8 && data2 == 127) 43 | { 44 | trackBank.scrollScenesUp() 45 | 46 | }else if (data1 == 9 && data2 == 127) 47 | { 48 | trackBank.scrollScenesDown() 49 | } 50 | 51 | } 52 | 53 | 54 | 55 | function contentLED() 56 | { 57 | for(i = 0; i < 8; i++){ 58 | if (hasContent[i] == true){ 59 | pendingLEDs[i] = 1 60 | }else if (hasContent[i] == false){ 61 | pendingLEDs[i] = 0 62 | } 63 | } 64 | 65 | } 66 | 67 | 68 | function playingLED() 69 | { 70 | for(i = 0; i < 8; i++){ 71 | if (isPlaying[i] == true){ 72 | pendingLEDs[i] = 2 73 | } 74 | } 75 | } 76 | 77 | function recordingLED() 78 | { 79 | for (i = 0 ; i <8; i ++){ 80 | if (isRecording[i] == true){ 81 | pendingLEDs[i] = 3 82 | } 83 | } 84 | 85 | } 86 | 87 | 88 | function clipUpdate() 89 | { 90 | for(i = 0; i < 8; i ++){ 91 | if (pendingLEDs[i] != currentLEDs[i]){ 92 | currentLEDs[i] = pendingLEDs[i] 93 | sendClipLEDs(i) 94 | 95 | } 96 | 97 | 98 | 99 | } 100 | 101 | } 102 | 103 | function clipLED() 104 | { 105 | contentLED(); 106 | playingLED(); 107 | recordingLED(); 108 | clipUpdate(); 109 | 110 | } 111 | 112 | 113 | function sendClipLEDs(index){ 114 | switch(index){ 115 | case 0: 116 | if(currentLEDs[index] == 0){ 117 | sendMidi(176, 25, 0) 118 | sendMidi(176, 115, 0) 119 | 120 | }else if (currentLEDs[index] == 1){ 121 | sendMidi(176, 25, 2) 122 | sendMidi(176, 115, 2) 123 | 124 | }else if (currentLEDs[index] == 2){ 125 | sendMidi(176, 25, 0) 126 | sendMidi(176, 115, 3) 127 | }else if (currentLEDs[index] == 3){ 128 | sendMidi(176, 25, 3) 129 | sendMidi(176, 115, 0) 130 | } 131 | break; 132 | case 1: 133 | if(currentLEDs[index] == 0){ 134 | sendMidi(176, 26, 0) 135 | sendMidi(176, 116, 0) 136 | 137 | }else if (currentLEDs[index] == 1){ 138 | sendMidi(176, 26, 2) 139 | sendMidi(176, 116, 2) 140 | 141 | }else if (currentLEDs[index] == 2){ 142 | sendMidi(176, 26, 0) 143 | sendMidi(176, 116, 3) 144 | }else if (currentLEDs[index] == 3){ 145 | sendMidi(176, 26, 3) 146 | sendMidi(176, 116, 0) 147 | } 148 | break; 149 | case 2: 150 | if(currentLEDs[index] == 0){ 151 | sendMidi(176, 27, 0) 152 | sendMidi(176, 117, 0) 153 | 154 | }else if (currentLEDs[index] == 1){ 155 | sendMidi(176, 27, 2) 156 | sendMidi(176, 117, 2) 157 | 158 | }else if (currentLEDs[index] == 2){ 159 | sendMidi(176, 27, 0) 160 | sendMidi(176, 117, 3) 161 | }else if (currentLEDs[index] == 3){ 162 | sendMidi(176, 27, 3) 163 | sendMidi(176, 117, 0) 164 | } 165 | break; 166 | case 3: 167 | if(currentLEDs[index] == 0){ 168 | sendMidi(176, 28, 0) 169 | sendMidi(176, 118, 0) 170 | 171 | }else if (currentLEDs[index] == 1){ 172 | sendMidi(176, 28, 2) 173 | sendMidi(176, 118, 2) 174 | 175 | }else if (currentLEDs[index] == 2){ 176 | sendMidi(176, 28, 0) 177 | sendMidi(176, 118, 3) 178 | }else if (currentLEDs[index] == 3){ 179 | sendMidi(176, 28, 3) 180 | sendMidi(176, 118, 0) 181 | } 182 | break; 183 | case 4: 184 | if(currentLEDs[index] == 0){ 185 | sendMidi(176, 20, 0) 186 | sendMidi(176, 110, 0) 187 | 188 | }else if (currentLEDs[index] == 1){ 189 | sendMidi(176, 20, 2) 190 | sendMidi(176, 110, 2) 191 | 192 | }else if (currentLEDs[index] == 2){ 193 | sendMidi(176, 20, 0) 194 | sendMidi(176, 110, 3) 195 | }else if (currentLEDs[index] == 3){ 196 | sendMidi(176, 20, 3) 197 | sendMidi(176, 110, 0) 198 | } 199 | break; 200 | if(currentLEDs[index] == 0){ 201 | sendMidi(176, 21, 0) 202 | sendMidi(176, 111, 0) 203 | 204 | }else if (currentLEDs[index] == 1){ 205 | sendMidi(176, 21, 2) 206 | sendMidi(176, 111, 2) 207 | 208 | }else if (currentLEDs[index] == 2){ 209 | sendMidi(176, 21, 0) 210 | sendMidi(176, 111, 3) 211 | }else if (currentLEDs[index] == 3){ 212 | sendMidi(176, 21, 3) 213 | sendMidi(176, 111, 0) 214 | } 215 | break; 216 | case 6: 217 | if(currentLEDs[index] == 0){ 218 | sendMidi(176, 22, 0) 219 | sendMidi(176, 112, 0) 220 | 221 | }else if (currentLEDs[index] == 1){ 222 | sendMidi(176, 22, 2) 223 | sendMidi(176, 112, 2) 224 | 225 | }else if (currentLEDs[index] == 2){ 226 | sendMidi(176, 22, 0) 227 | sendMidi(176, 112, 3) 228 | }else if (currentLEDs[index] == 3){ 229 | sendMidi(176, 22, 3) 230 | sendMidi(176, 112, 0) 231 | } 232 | break; 233 | case 7: 234 | if(currentLEDs[index] == 0){ 235 | sendMidi(176, 23, 0) 236 | sendMidi(176, 113, 0) 237 | 238 | }else if (currentLEDs[index] == 1){ 239 | sendMidi(176, 23, 2) 240 | sendMidi(176, 113, 2) 241 | 242 | }else if (currentLEDs[index] == 2){ 243 | sendMidi(176, 23, 0) 244 | sendMidi(176, 113, 3) 245 | }else if (currentLEDs[index] == 3){ 246 | sendMidi(176, 23, 3) 247 | sendMidi(176, 113, 0) 248 | } 249 | break; 250 | } 251 | } -------------------------------------------------------------------------------- /12Step_Bitwig/12Step/12step.control.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright 2014 Evan Bogunia_____evanbeta@keithmcmillen.com 4 | 5 | 6 | */ 7 | 8 | 9 | 10 | //Load the bitwig API, obviously. 11 | loadAPI(1); 12 | 13 | //Define/set our controller properties [ company, device, version, uuid ] 14 | host.defineController("Keith McMillen Instruments", "12Step", "1.0", "63723F80-4FEE-11E4-916C-0800200C9A66"); 15 | host.defineMidiPorts(1, 1); 16 | 17 | //Define/set input/output port names (both i/o are the same) 18 | var portNames = ["12Step Port 1"]; 19 | host.addDeviceNameBasedDiscoveryPair(portNames, portNames); 20 | 21 | //Loading external Files 22 | load("12Step_functions.js") 23 | 24 | //Declare some global vars for a few of the interface types defined in the API 25 | var application, arranger, mixer, transport; 26 | var HIGHEST_CC = 119; 27 | var LOWEST_CC = 1; 28 | var NUM_TRACKS = 7; 29 | var NUM_SCENES = 1; 30 | var NUM_SENDS = 2; 31 | var hasContent = initArray(0, 8); 32 | var isPlaying = initArray(0, 8); 33 | var isRecording = initArray(0, 8); 34 | var isQueued = initArray(0, 8); 35 | var pendingLEDs = initArray(0, 8); 36 | var currentLEDs = initArray(0,8); 37 | var selectedTrack = 0; 38 | var canScrollUp = false 39 | //------------------------------------ Init -----------------------------------// 40 | function init() 41 | { 42 | //-------- Set MIDI callbacks / port 43 | host.getMidiInPort(0).setMidiCallback(onMidi); 44 | 45 | //host.getMidiInPort(0).setSysexCallback(onSysexPort1); 46 | 47 | 48 | //-------- Note Inputs (see REF below for argument details 49 | noteIn = host.getMidiInPort(0).createNoteInput("12Step Port 1"); 50 | noteIn.setShouldConsumeEvents(false); 51 | 52 | 53 | userControls = host.createUserControlsSection(HIGHEST_CC - LOWEST_CC + 1); 54 | 55 | for(var i=LOWEST_CC; i<=HIGHEST_CC; i++) 56 | { 57 | userControls.getControl(i - LOWEST_CC).setLabel("CC" + i); 58 | } 59 | 60 | 61 | application = host.createApplication(); 62 | trackBankMain = host.createTrackBank(NUM_TRACKS, NUM_SENDS, NUM_SCENES); 63 | trackBankAbove = host.createTrackBank(NUM_TRACKS, NUM_SENDS, NUM_SCENES) 64 | trackBankBelow = host.createTrackBank(NUM_TRACKS, NUM_SENDS, NUM_SCENES) 65 | cursorTrack = host.createCursorTrack(2, NUM_SCENES); 66 | transport = host.createTransport(); 67 | arranger = host.createArranger(0); 68 | master = host.createMasterTrack(8); 69 | cursorTrack = host.createCursorTrack(2, 0); 70 | primaryDevice = cursorTrack.getPrimaryDevice(); 71 | //println("This is the SoftStep Script") 72 | 73 | cursorTrack.addPositionObserver(function(track) 74 | { 75 | selectedTrack = track 76 | trackBankMain.scrollToTrack(track) 77 | }) 78 | 79 | trackBankMain.addCanScrollScenesUpObserver(function(scrollUp) 80 | { 81 | 82 | if (scrollUp == true) 83 | { 84 | 85 | sendMidi(176, 21, 1) 86 | }else 87 | { 88 | 89 | sendMidi(176, 21, 0) 90 | 91 | } 92 | }) 93 | 94 | trackBankMain.addCanScrollScenesDownObserver(function(scrollDown) 95 | { 96 | 97 | if (scrollDown == true) 98 | { 99 | 100 | sendMidi(176, 23, 1) 101 | }else 102 | { 103 | 104 | sendMidi(176, 23, 0) 105 | } 106 | }) 107 | 108 | for (var t = 0; t < NUM_TRACKS; t++) 109 | { 110 | var track = trackBankMain.getTrack(t); 111 | var clipLauncher = track.getClipLauncher(); 112 | clipLauncher.setIndication(true); 113 | 114 | clipLauncher.addHasContentObserver(getGridObserverFunc(t, hasContent)); 115 | clipLauncher.addIsPlayingObserver(getGridObserverFunc(t, isPlaying)); 116 | clipLauncher.addIsRecordingObserver(getGridObserverFunc(t, isRecording)); 117 | clipLauncher.addIsQueuedObserver(getGridObserverFunc(t, isQueued)); 118 | } 119 | 120 | } 121 | 122 | //--------------------------- MIDI Callbacks / Port ---------------------------// 123 | function onMidi(status, data1, data2) 124 | { 125 | //println("Port 1 [status, data1, data2]: " + status + ", " + data1 + ", " + data2); 126 | 127 | 128 | if(status == 233) 129 | { 130 | //println("pitchBend" + " " + data1 + " " + data2) 131 | 132 | }else if(status == 145){ 133 | 134 | //println("Notes" + " " + data1 + " " + data2) 135 | launchClipSlots(data1, data2); 136 | scrollTrackBank(data1, data2); 137 | launchScenes(data1, data2) 138 | 139 | }else if (status == 185){ 140 | 141 | //println("CC" + " " + data1 + " " + data2) 142 | 143 | } 144 | 145 | 146 | if (isChannelController(status)) 147 | { 148 | if (data1 >= LOWEST_CC && data1 <= HIGHEST_CC) 149 | { 150 | var index = data1 - LOWEST_CC; 151 | userControls.getControl(index).set(data2, 128); 152 | } 153 | } 154 | 155 | 156 | } 157 | 158 | 159 | 160 | function exit() 161 | { 162 | println("exit."); 163 | } 164 | 165 | 166 | 167 | 168 | //--------------------------------- Interfaces --------------------------------// 169 | 170 | 171 | 172 | 173 | 174 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 175 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 176 | //////////////////////////////////////////////////////////////// REF //////////////////////////////////////////////////////////////// 177 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 178 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 179 | 180 | //--------------------- Note Input Filters 181 | 182 | // These filters args are used in the createNoteInput method/function for a midi input port [ see init() ]. 183 | 184 | // See http://www.midi.org/techspecs/midimessages.php for midi message types. 185 | 186 | // Studying up on hexadecimal could be helpful also if it's new to you. 187 | 188 | 189 | //---- Note Off 190 | // "80????" - Sees all note offs on channel 1 191 | // "8?????" - Sees all note offs on any channel 192 | 193 | //---- Note On 194 | // "90????" - Sees all note ons on channel 1 195 | // "9?????" - Sees all note offs on any channel 196 | // "90607F" - Sees all note number 60s with a velocity of 127 (this is a very specific filter) 197 | 198 | //---- Polyphonic Aftertouch 199 | // "A0????" - Sees all note ons on channel 1 200 | // "A?????" - Sees all note offs on any channel 201 | 202 | //---- Controller Messages 203 | // "B0????" - Sees all cc messages on channel 1 204 | // "B?????" - Sees all cc messages on all channels 205 | 206 | //---- Program Changes 207 | // "C0????" - Sees all pgm changes on channel 1 208 | // "C?????" - Sees all pgm changes on all channels 209 | 210 | //---- Channel Aftertouch 211 | // "D0????" - Sees all ch. aftertouch on channel 1 212 | // "D?????" - Sees all ch. aftertouch on all channels 213 | 214 | //---- Pitch Wheel 215 | // "E0????" - Sees all ch. aftertouch on channel 1 216 | // "E?????" - Sees all ch. aftertouch on all channels 217 | // "E???00" - Sees all ch. aftertouch on all channels with an MSB of zero 218 | // "E?00??" - Sees all ch. aftertouch on all channels with an LSB of zero 219 | 220 | //---- SysEx start/end, esoteric MIDI mysticism (wouldn't use these filters unless your traversing some kind of musical 3-byte worm hole) 221 | //---- For sysex, just use the callbacks defined above 222 | // "F0????" - Sees all ch. aftertouch on channel 1 223 | // "D?????" - Sees all ch. aftertouch on all channels 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | -------------------------------------------------------------------------------- /12Step_Bitwig/12Step/12step_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataf1ow/KMI_Bitwig_Scripts/ea709ada6dafe49fcb4e516ceb5e4a0472be687e/12Step_Bitwig/12Step/12step_outline.png -------------------------------------------------------------------------------- /12Step_Bitwig/12Step/bitwig.css: -------------------------------------------------------------------------------- 1 | #page-container { 2 | width: 100%; 3 | margin: 0; 4 | } 5 | 6 | #header { 7 | height: 43px; 8 | padding-left: 20px; 9 | padding-right: 20px; 10 | color: white; 11 | background: #000000; 12 | } 13 | 14 | #footer { 15 | clear: both; 16 | height: 30px; 17 | margin-top: 30px; 18 | padding-top: 3px; 19 | margin-left: 20px; 20 | margin-right: 20px; 21 | border-top: 1px solid #000000; 22 | font: 10px "Lucida Grande", Lucida, Verdana, sans-serif; 23 | color: #505050; 24 | } 25 | 26 | #footer a { 27 | color: #505050; 28 | text-decoration: none; 29 | } 30 | 31 | #illustration { 32 | margin-top: 5px; 33 | margin-left: 0px; 34 | margin-right: 20px; 35 | margin-bottom: 20px; 36 | float: left; 37 | } 38 | 39 | #introduction { 40 | margin-top: 5px; 41 | margin-left: 20px; 42 | margin-right: 20px; 43 | margin-bottom: 20px; 44 | float: left; 45 | } 46 | 47 | #illustration-text { 48 | width: 200px; 49 | margin-top: 30px; 50 | margin-right: 20px; 51 | margin-bottom: 30px; 52 | padding-left: 25px; 53 | float: right; 54 | background-image: url("important.png"); 55 | background-repeat: no-repeat; 56 | background-position: left 0 top 3px; 57 | } 58 | 59 | #sticker { 60 | width: 400px; 61 | margin-top: 30px; 62 | margin-right: 20px; 63 | margin-bottom: 30px; 64 | padding-left: 25px; 65 | float: right; 66 | } 67 | 68 | #legend { 69 | clear: both; 70 | padding-top: 30px; 71 | margin: 0 20px 30px 20px; 72 | margin-top: 0px; 73 | border-top: 1px solid #000000; 74 | } 75 | 76 | #legend h2{ 77 | font-weight: bold; 78 | font-size: 12px; 79 | text-decoration: underline; 80 | margin: 20px 0 10px 0; 81 | } 82 | 83 | #legend h3{ 84 | font-weight: bold; 85 | font-size: 12px; 86 | margin: 10px 0 0 0; 87 | } 88 | 89 | #legend p{ 90 | margin: 0 0 10px 0; 91 | } 92 | 93 | #logo { 94 | width: 170px; 95 | height: 20px; 96 | background-image: url("logo.png"); 97 | background-repeat: no-repeat; 98 | display: inline-block; 99 | float: left; 100 | margin-top: 12px; 101 | margin-right: 20px; 102 | vertical-align: middle; 103 | } 104 | 105 | #title { 106 | display: inline-block; 107 | float: left; 108 | margin-top: 7px; 109 | margin-left: 20px; 110 | vertical-align: text-bottom; 111 | } 112 | 113 | html, body { 114 | margin: 0; 115 | padding: 0; 116 | background-color: white; 117 | color: black; 118 | font: 12px "Lucida Grande", Lucida, Verdana, sans-serif; 119 | } 120 | 121 | h1 { 122 | margin: 0; 123 | padding: 0; 124 | font: 26px Helvetica, Arial, sans-serif; 125 | font-weight: bold; 126 | } 127 | 128 | a { 129 | color: #ee7700; 130 | } 131 | 132 | ul { 133 | list-style-type: disc; 134 | list-style-position: outside; 135 | margin: 0 0 10px 0; 136 | padding: 0 0 10px 0; 137 | } 138 | 139 | li { 140 | /*position: relative;*/ 141 | margin-left: 15px; 142 | margin-bottom: 10px; 143 | padding-left: 0px; 144 | } 145 | 146 | li span { 147 | /*position: absolute;*/ 148 | left: -5px; 149 | } 150 | 151 | 152 | table.legend-column { 153 | border-width: 0px; 154 | border: none; 155 | border-collapse: collapse; 156 | text-align: left; 157 | vertical-align: top; 158 | background-color: #ffffff; 159 | border-color: #000000; 160 | margin-bottom: 15px; 161 | } 162 | table.legend-column th { 163 | border-bottom:1px dotted; 164 | height: 15px; 165 | font-weight: bold; 166 | padding: 2px 0px 2px 0px; 167 | vertical-align: top; 168 | } 169 | table.legend-column td { 170 | border-bottom:1px dotted; 171 | padding: 2px 0px 2px 0px; 172 | vertical-align: top; 173 | } 174 | 175 | .first-column-table-row 176 | { 177 | float: left; 178 | } 179 | 180 | .legend-section 181 | { 182 | float: left; 183 | } 184 | 185 | .legend-column 186 | { 187 | width : 240px; 188 | display: inline-block; 189 | margin-right: 20px; 190 | margin-bottom: 20px; 191 | vertical-align: top; 192 | } 193 | 194 | .legend-column p { 195 | margin: 5px 0 10px 0; 196 | } 197 | 198 | .legend-column-header 199 | { 200 | width : 100%; 201 | height: 20px; 202 | font-weight: bold; 203 | text-decoration: underline; 204 | margin-bottom: 5px; 205 | } 206 | 207 | .legend-control-column 208 | { 209 | width : 90px; 210 | font-weight: bold; 211 | } 212 | 213 | .legend-explanation-column 214 | { 215 | width : 150px; 216 | } 217 | 218 | .hidden { 219 | display: none; 220 | } 221 | -------------------------------------------------------------------------------- /12Step_Bitwig/Bitwig Clip Launching.twelvesteppreset: -------------------------------------------------------------------------------- 1 | { 2 | "key01_note1": 0, 3 | "key01_note2": -1, 4 | "key01_note3": -1, 5 | "key01_note4": -1, 6 | "key01_note5": -1, 7 | "key02_note1": 8, 8 | "key02_note2": -1, 9 | "key02_note3": -1, 10 | "key02_note4": -1, 11 | "key02_note5": -1, 12 | "key03_note1": 1, 13 | "key03_note2": -1, 14 | "key03_note3": -1, 15 | "key03_note4": -1, 16 | "key03_note5": -1, 17 | "key04_note1": 9, 18 | "key04_note2": -1, 19 | "key04_note3": -1, 20 | "key04_note4": -1, 21 | "key04_note5": -1, 22 | "key05_note1": 2, 23 | "key05_note2": -1, 24 | "key05_note3": -1, 25 | "key05_note4": -1, 26 | "key05_note5": -1, 27 | "key06_note1": 3, 28 | "key06_note2": -1, 29 | "key06_note3": -1, 30 | "key06_note4": -1, 31 | "key06_note5": -1, 32 | "key07_note1": 10, 33 | "key07_note2": -1, 34 | "key07_note3": -1, 35 | "key07_note4": -1, 36 | "key07_note5": -1, 37 | "key08_note1": 4, 38 | "key08_note2": -1, 39 | "key08_note3": -1, 40 | "key08_note4": -1, 41 | "key08_note5": -1, 42 | "key09_note1": 11, 43 | "key09_note2": -1, 44 | "key09_note3": -1, 45 | "key09_note4": -1, 46 | "key09_note5": -1, 47 | "key10_note1": 5, 48 | "key10_note2": -1, 49 | "key10_note3": -1, 50 | "key10_note4": -1, 51 | "key10_note5": -1, 52 | "key11_note1": 12, 53 | "key11_note2": -1, 54 | "key11_note3": -1, 55 | "key11_note4": -1, 56 | "key11_note5": -1, 57 | "key12_note1": 6, 58 | "key12_note2": -1, 59 | "key12_note3": -1, 60 | "key12_note4": -1, 61 | "key12_note5": -1, 62 | "key13_note1": 7, 63 | "key13_note2": -1, 64 | "key13_note3": -1, 65 | "key13_note4": -1, 66 | "key13_note5": -1, 67 | "modline1_cc_number": -1, 68 | "modline1_destination": "Note", 69 | "modline1_gain": 1, 70 | "modline1_max": 127, 71 | "modline1_min": 0, 72 | "modline1_offset": 0, 73 | "modline1_smooth": 0, 74 | "modline1_source_a": "Velocity", 75 | "modline1_source_b": "Off", 76 | "modline1_table": "Linear", 77 | "modline2_cc_number": 7, 78 | "modline2_destination": "CC", 79 | "modline2_gain": 1, 80 | "modline2_max": 127, 81 | "modline2_min": 0, 82 | "modline2_offset": 0, 83 | "modline2_smooth": 0, 84 | "modline2_source_a": "Pedal", 85 | "modline2_source_b": "Off", 86 | "modline2_table": "Linear", 87 | "modline3_cc_number": 7, 88 | "modline3_destination": "Off", 89 | "modline3_gain": 1, 90 | "modline3_max": 127, 91 | "modline3_min": 0, 92 | "modline3_offset": 0, 93 | "modline3_smooth": 0, 94 | "modline3_source_a": "Off", 95 | "modline3_source_b": "Off", 96 | "modline3_table": "Linear", 97 | "modline4_cc_number": 21, 98 | "modline4_destination": "Off", 99 | "modline4_gain": 1, 100 | "modline4_max": 127, 101 | "modline4_min": 0, 102 | "modline4_offset": 0, 103 | "modline4_smooth": 0, 104 | "modline4_source_a": "Off", 105 | "modline4_source_b": "Off", 106 | "modline4_table": "Linear", 107 | "modline5_cc_number": 0, 108 | "modline5_destination": "Off", 109 | "modline5_gain": 1, 110 | "modline5_max": 127, 111 | "modline5_min": 0, 112 | "modline5_offset": 0, 113 | "modline5_smooth": 0, 114 | "modline5_source_a": "Off", 115 | "modline5_source_b": "Off", 116 | "modline5_table": "Linear", 117 | "modline6_cc_number": 0, 118 | "modline6_destination": "Off", 119 | "modline6_gain": 1, 120 | "modline6_max": 127, 121 | "modline6_min": 0, 122 | "modline6_offset": 0, 123 | "modline6_smooth": 0, 124 | "modline6_source_a": "Off", 125 | "modline6_source_b": "Off", 126 | "modline6_table": "Linear", 127 | "preset_displayname_1": "C", 128 | "preset_displayname_2": "L", 129 | "preset_displayname_3": "I", 130 | "preset_displayname_4": "P", 131 | "preset_name": "Bitwig Clip Launching", 132 | "settings_key_safety_mode": "SingleKey", 133 | "settings_note_mode": "Normal", 134 | "voice_a_bank": 0, 135 | "voice_a_bend_range": 2, 136 | "voice_a_channel": 3, 137 | "voice_a_programchange": -1, 138 | "voice_a_transpose": 0, 139 | "voice_b_bank": 0, 140 | "voice_b_bend_range": 2, 141 | "voice_b_channel": 0, 142 | "voice_b_programchange": -1, 143 | "voice_b_transpose": 0 144 | } 145 | -------------------------------------------------------------------------------- /12Step_Bitwig/README.md: -------------------------------------------------------------------------------- 1 | 12Step_Bitwig 2 | ============= 3 | 4 | Bitwig Script for the KMI 12Step 5 | -------------------------------------------------------------------------------- /K-Board/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataf1ow/KMI_Bitwig_Scripts/ea709ada6dafe49fcb4e516ceb5e4a0472be687e/K-Board/.DS_Store -------------------------------------------------------------------------------- /K-Board/K-Board/KBoard.control.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright 2014 Evan Bogunia_____evanbeta@keithmcmillen.com 4 | 5 | 6 | */ 7 | 8 | 9 | 10 | //Load the bitwig API, obviously. 11 | loadAPI(1); 12 | 13 | //Define/set our controller properties [ company, device, version, uuid ] 14 | host.defineController("Keith McMillen Instruments", "K-Board", "1.0", "8A016650-586B-11E4-8ED6-0800200C9A66"); 15 | host.defineMidiPorts(1, 1); 16 | 17 | //Define/set input/output port names (both i/o are the same) 18 | var portNames = ["K-Board"]; 19 | host.addDeviceNameBasedDiscoveryPair(portNames, portNames); 20 | 21 | //Define/set sysex call/response (deprecated, included for good measure) 22 | host.defineSysexDiscovery("F0 7E 7F 06 01 F7", "F0 7E 00 06 02 00 01 5F 19 00 00 00 ?? ?? ?? ?? ?? ?? F7"); 23 | 24 | //Declare some global vars for a few of the interface types defined in the API 25 | var application, arranger, mixer, transport; 26 | var HIGHEST_CC = 119; 27 | var LOWEST_CC = 1; 28 | //------------------------------------ Init -----------------------------------// 29 | function init() 30 | { 31 | //-------- Set MIDI callbacks / port 32 | host.getMidiInPort(0).setMidiCallback(onMidiPort1); 33 | 34 | 35 | //-------- Note Inputs (see REF below for argument details 36 | noteIn = host.getMidiInPort(0).createNoteInput("K-Board"); 37 | noteIn.setShouldConsumeEvents(false); 38 | 39 | 40 | userControls = host.createUserControlsSection(HIGHEST_CC - LOWEST_CC + 1); 41 | 42 | for(var i=LOWEST_CC; i<=HIGHEST_CC; i++) 43 | { 44 | userControls.getControl(i - LOWEST_CC).setLabel("CC" + i); 45 | } 46 | 47 | //-------- Initialize bitwig interfaces 48 | //application = host.createApplication(); 49 | //arranger = host.createArranger(0); 50 | //mixer = host.createMixer("perspective?",0); 51 | transport = host.createTransport(); 52 | println("This is the K-Board Script") 53 | } 54 | 55 | //--------------------------- MIDI Callbacks / Port ---------------------------// 56 | function onMidiPort1(status, data1, data2) 57 | { 58 | //println("Port 1 [status, data1, data2]: " + status + ", " + data1 + ", " + data2); 59 | 60 | 61 | if(status == 233) 62 | { 63 | println("pitchBend" + " " + data1 + " " + data2) 64 | 65 | }else if(status == 153){ 66 | 67 | println("Notes" + " " + data1 + " " + data2) 68 | 69 | }else if (status == 185){ 70 | 71 | println("CC" + " " + data1 + " " + data2) 72 | sendMidi(status, data1, data2) 73 | } 74 | 75 | 76 | if (isChannelController(status)) 77 | { 78 | if (data1 >= LOWEST_CC && data1 <= HIGHEST_CC) 79 | { 80 | var index = data1 - LOWEST_CC; 81 | userControls.getControl(index).set(data2, 128); 82 | } 83 | } 84 | 85 | 86 | } 87 | 88 | function onMidiPort2(status, data1, data2) 89 | { 90 | println("Port 2 [status, data1, data2]: " + status + ", " + data1 + ", " + data2); 91 | } 92 | 93 | function onMidiPort3(status, data1, data2) 94 | { 95 | println("Port 3 [status, data1, data2]: " + status + ", " + data1 + ", " + data2); 96 | } 97 | 98 | function onSysexPort1(data) 99 | { 100 | println("Port 1 [sysex data]: " + data); 101 | } 102 | 103 | function onSysexPort2(data) 104 | { 105 | println("Port 2 [sysex data]: " + data); 106 | } 107 | 108 | function onSysexPort3(data) 109 | { 110 | println("Port 3 [sysex data]: " + data); 111 | } 112 | 113 | function exit() 114 | { 115 | println("exit."); 116 | } 117 | 118 | //--------------------------------- Interfaces --------------------------------// 119 | 120 | 121 | 122 | 123 | 124 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 125 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 126 | //////////////////////////////////////////////////////////////// REF //////////////////////////////////////////////////////////////// 127 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 128 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 129 | 130 | //--------------------- Note Input Filters 131 | 132 | // These filters args are used in the createNoteInput method/function for a midi input port [ see init() ]. 133 | 134 | // See http://www.midi.org/techspecs/midimessages.php for midi message types. 135 | 136 | // Studying up on hexadecimal could be helpful also if it's new to you. 137 | 138 | 139 | //---- Note Off 140 | // "80????" - Sees all note offs on channel 1 141 | // "8?????" - Sees all note offs on any channel 142 | 143 | //---- Note On 144 | // "90????" - Sees all note ons on channel 1 145 | // "9?????" - Sees all note offs on any channel 146 | // "90607F" - Sees all note number 60s with a velocity of 127 (this is a very specific filter) 147 | 148 | //---- Polyphonic Aftertouch 149 | // "A0????" - Sees all note ons on channel 1 150 | // "A?????" - Sees all note offs on any channel 151 | 152 | //---- Controller Messages 153 | // "B0????" - Sees all cc messages on channel 1 154 | // "B?????" - Sees all cc messages on all channels 155 | 156 | //---- Program Changes 157 | // "C0????" - Sees all pgm changes on channel 1 158 | // "C?????" - Sees all pgm changes on all channels 159 | 160 | //---- Channel Aftertouch 161 | // "D0????" - Sees all ch. aftertouch on channel 1 162 | // "D?????" - Sees all ch. aftertouch on all channels 163 | 164 | //---- Pitch Wheel 165 | // "E0????" - Sees all ch. aftertouch on channel 1 166 | // "E?????" - Sees all ch. aftertouch on all channels 167 | // "E???00" - Sees all ch. aftertouch on all channels with an MSB of zero 168 | // "E?00??" - Sees all ch. aftertouch on all channels with an LSB of zero 169 | 170 | //---- SysEx start/end, esoteric MIDI mysticism (wouldn't use these filters unless your traversing some kind of musical 3-byte worm hole) 171 | //---- For sysex, just use the callbacks defined above 172 | // "F0????" - Sees all ch. aftertouch on channel 1 173 | // "D?????" - Sees all ch. aftertouch on all channels 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | -------------------------------------------------------------------------------- /K-Board/README.md: -------------------------------------------------------------------------------- 1 | K-Board 2 | ======= 3 | 4 | Bitwig script for the KMI K-Board 5 | -------------------------------------------------------------------------------- /K-Board_Scales/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataf1ow/KMI_Bitwig_Scripts/ea709ada6dafe49fcb4e516ceb5e4a0472be687e/K-Board_Scales/.DS_Store -------------------------------------------------------------------------------- /K-Board_Scales/KBoard_Scales.control.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright 2014 Evan Bogunia_____evanbeta@keithmcmillen.com 4 | 5 | 6 | */ 7 | 8 | 9 | 10 | //Load the bitwig API, obviously. 11 | loadAPI(1); 12 | 13 | //Define/set our controller properties [ company, device, version, uuid ] 14 | host.defineController("Keith McMillen Instruments", "K-BoardScales", "1.0", "138433C0-5B06-11E4-8ED6-0800200C9A66"); 15 | host.defineMidiPorts(1, 1); 16 | 17 | //Define/set input/output port names (both i/o are the same) 18 | var portNames = ["K-Board"]; 19 | host.addDeviceNameBasedDiscoveryPair(portNames, portNames); 20 | 21 | //Define/set sysex call/response (deprecated, included for good measure) 22 | host.defineSysexDiscovery("F0 7E 7F 06 01 F7", "F0 7E 00 06 02 00 01 5F 19 00 00 00 ?? ?? ?? ?? ?? ?? F7"); 23 | 24 | load ("KBoard_Scales.js") 25 | 26 | var HIGHEST_CC = 119; 27 | var LOWEST_CC = 1; 28 | var selectMode = false; 29 | var translationTable = initArray(-1, 128) 30 | var noteOffTable = initArray(-1, 128) 31 | 32 | 33 | 34 | //------------------------------------ Init -----------------------------------// 35 | function init() 36 | { 37 | //-------- Set MIDI callbacks / port 38 | host.getMidiInPort(0).setMidiCallback(onMidi); 39 | 40 | 41 | //-------- Note Inputs (see REF below for argument details 42 | noteIn = host.getMidiInPort(0).createNoteInput("K-Board", "80????", "90????"); 43 | noteIn.setShouldConsumeEvents(false); 44 | updateTranslationTable() 45 | noteIn.setKeyTranslationTable(translationTable); 46 | 47 | userControls = host.createUserControlsSection(HIGHEST_CC - LOWEST_CC + 1); 48 | 49 | for(var i=LOWEST_CC; i<=HIGHEST_CC; i++) 50 | { 51 | userControls.getControl(i - LOWEST_CC).setLabel("CC" + i); 52 | } 53 | 54 | 55 | notif = host.getNotificationSettings(); 56 | 57 | notif.setShouldShowChannelSelectionNotifications(true); 58 | notif.setShouldShowDeviceLayerSelectionNotifications(true); 59 | notif.setShouldShowDeviceSelectionNotifications(true); 60 | notif.setShouldShowMappingNotifications(false); 61 | notif.setShouldShowPresetNotifications(true); 62 | notif.setShouldShowSelectionNotifications(true); 63 | notif.setShouldShowTrackSelectionNotifications(true); 64 | notif.setShouldShowValueNotifications(false); 65 | 66 | 67 | //println("This is the K-Board_SCales Script") 68 | lights() 69 | } 70 | 71 | //--------------------------- MIDI Callbacks / Port ---------------------------// 72 | function onMidi(status, data1, data2) 73 | { 74 | //println(status, data2) 75 | if(status == 224) 76 | { 77 | //println("pitchBend" + " " + data1 + " " + data2) 78 | if(data2 != 64){ 79 | for (i = 0; i < 24; i ++){ 80 | sendMidi(144, i, 16) 81 | } 82 | selectMode = true 83 | noteIn.setKeyTranslationTable(noteOffTable) 84 | }else if(data2 == 64){ 85 | for (i = 0 ;i < 26; i ++){ 86 | sendMidi(144, i, 0) 87 | } 88 | selectMode = false 89 | lights() 90 | host.showPopupNotification("Root = " + root + " : Scale =" + scaleName) 91 | noteIn.setKeyTranslationTable(translationTable) 92 | 93 | } 94 | 95 | } 96 | 97 | 98 | if(status == 144){ 99 | //println(data1, data2) 100 | if (selectMode == true) 101 | { 102 | selector = data1 % 24 103 | if (selector < 12){ 104 | scaleSelect(selector) 105 | host.showPopupNotification("Scale =" + scaleName) 106 | }else if(selector>=12){ 107 | rootSelect(selector - 12) 108 | host.showPopupNotification("Root = " + root) 109 | } 110 | } 111 | } 112 | 113 | if(status == 128) 114 | { 115 | lights() 116 | } 117 | 118 | if (isChannelController(status)) 119 | { 120 | if (data1 >= LOWEST_CC && data1 <= HIGHEST_CC) 121 | { 122 | var index = data1 - LOWEST_CC; 123 | userControls.getControl(index).set(data2, 128); 124 | } 125 | } 126 | 127 | 128 | } 129 | 130 | function lights() 131 | { 132 | for (i = 0 ; i < scale.length ; i ++) 133 | { 134 | if(scale[i] + offset == 24){ 135 | sendMidi(144, 24, 16) 136 | sendMidi(144, 0, 16) 137 | }else if (scale[i] + offset > 24) 138 | { 139 | sendMidi(144, (scale[i] + offset) - 24, 16) 140 | //println ((scale[i] + offset) - 25) 141 | }else{ 142 | sendMidi(144, scale[i] + offset, 16) 143 | //println (scale[i] + offset) 144 | } 145 | 146 | } 147 | 148 | } 149 | 150 | function updateTranslationTable() 151 | { 152 | for (i = 0; i < 128; i ++) 153 | { 154 | translationTable[i] = i 155 | } 156 | } 157 | 158 | 159 | function exit() 160 | { 161 | println("exit."); 162 | } 163 | 164 | 165 | 166 | 167 | 168 | -------------------------------------------------------------------------------- /K-Board_Scales/KBoard_Scales.js: -------------------------------------------------------------------------------- 1 | //KBoard Scale Definitions 2 | 3 | 4 | var major = [0, 2, 4, 5, 7, 9, 11, 12, 14, 16, 17, 19, 21, 23, 24]; 5 | var minor = [0, 2, 3, 5, 7, 8, 10, 12, 14, 15, 17, 19, 20, 22, 24]; 6 | var dorian = [0, 2, 3, 5, 7, 9, 10, 12, 14, 15, 17, 19, 21, 22, 24]; 7 | var phrygian = [0, 1, 3, 5, 7, 8, 10, 12, 13, 15, 17, 19, 20, 22, 24]; 8 | var lydian = [0, 2, 4, 6, 7, 9, 11, 12, 14, 16, 18, 19, 21, 23, 24]; 9 | var mixolydian = [0, 2, 4, 5, 7, 9, 10, 12, 14, 16, 17, 19, 21, 22, 24]; 10 | var locrian = [0, 1, 3, 4, 6, 8, 10, 12, 13, 15, 16, 18, 20, 22, 24]; 11 | var pentatonicMajor = [0, 2, 4, 7, 9, 12, 14, 16, 19, 21, 24]; 12 | var pentatonicMinor = [0, 3, 5, 7, 10, 12, 15, 17, 19, 22, 24]; 13 | var wholetone = [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24]; 14 | var halfdiminished = [0, 2, 3, 5, 6, 8, 10, 12, 14, 15, 17, 18, 20, 22, 24]; 15 | //var diminishedwhole = [0, 2, 3, 5, 6, 8, 9, 11, 12, 14, 15, 17, 18, 20, 21, 23, 24]; 16 | var octatonic = [0, 1, 3, 4, 6, 7, 9, 10, 12, 13, 15, 16, 18, 19, 21, 22, 24]; 17 | var scale = major 18 | var scaleName = "Major" 19 | var offset = 0 20 | root = "C" 21 | 22 | 23 | function scaleSelect(x){ 24 | switch(x){ 25 | case 0: 26 | scale = major 27 | scaleName = "Major" 28 | break; 29 | case 1: 30 | scale = pentatonicMajor 31 | scaleName = "Pentatonic Major" 32 | break; 33 | case 2: 34 | scale = dorian 35 | scaleName = "Dorian" 36 | break; 37 | case 3: 38 | scale = pentatonicMinor 39 | scaleName ="Pentatonic Minor" 40 | break; 41 | case 4: 42 | scale = phrygian 43 | scaleName = "Phrygian" 44 | break; 45 | case 5: 46 | scale = lydian 47 | scaleName = "Lydian" 48 | break; 49 | case 6: 50 | scale = wholetone 51 | scaleName ="Whole Tone" 52 | break; 53 | case 7: 54 | scale = mixolydian 55 | scaleName = "Mixolydian" 56 | break; 57 | case 8: 58 | scale = halfdiminished 59 | scaleName = "Half Diminished" 60 | break; 61 | case 9: 62 | scale = minor 63 | scaleName = "Minor" 64 | break; 65 | case 10: 66 | scale = octatonic 67 | scaleName = "Octatonic" 68 | break; 69 | case 11: 70 | scale = locrian 71 | scaleName = "Locrian" 72 | break; 73 | } 74 | 75 | } 76 | 77 | function rootSelect(x){ 78 | switch(x){ 79 | case 0: 80 | offset = x 81 | root = 'C' 82 | break; 83 | case 1: 84 | offset = x 85 | root = "C#/Db" 86 | break; 87 | case 2: 88 | offset = x 89 | root = "D" 90 | break; 91 | case 3: 92 | offset = x 93 | root = "D#/Eb" 94 | break; 95 | case 4: 96 | offset = x 97 | root = "E" 98 | break; 99 | case 5: 100 | offset = x 101 | root = "F" 102 | break; 103 | case 6: 104 | offset = x 105 | root = "F#/Gb" 106 | break; 107 | case 7: 108 | offset = x 109 | root = "G" 110 | break; 111 | case 8: 112 | offset = x 113 | root = "G#/Ab" 114 | break; 115 | case 9: 116 | offset = x 117 | root = "A" 118 | break; 119 | case 10: 120 | offset = x 121 | root = "A#/Bb" 122 | break; 123 | case 11: 124 | offset = x 125 | root = "B" 126 | break; 127 | } 128 | 129 | } -------------------------------------------------------------------------------- /K-Board_Scales/README.md: -------------------------------------------------------------------------------- 1 | K-Board_Scales 2 | ============== 3 | 4 | Bitwig script for displaying scales on the K-Board 5 | -------------------------------------------------------------------------------- /QUNEO/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataf1ow/KMI_Bitwig_Scripts/ea709ada6dafe49fcb4e516ceb5e4a0472be687e/QUNEO/.DS_Store -------------------------------------------------------------------------------- /QUNEO/Documentation/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataf1ow/KMI_Bitwig_Scripts/ea709ada6dafe49fcb4e516ceb5e4a0472be687e/QUNEO/Documentation/.DS_Store -------------------------------------------------------------------------------- /QUNEO/Documentation/Instructions_versionNotes.txt: -------------------------------------------------------------------------------- 1 | 2 | This is the KMI bigwig script for the QuNeo controller 3 | 4 | Import the QuNeo preset to your QuNeo using the editor. I recommend using slot 16 (the upper right corner. I have included a syses callback that restore all the LED feedback when returning to slot 16. If you use a different slot, and change presets, or accidentally hit the blue preset selection button in the upper left, the LED feedback will not be visible until you interact with the device. 5 | 6 | Drop The 'QUNEO_Script'folder into the 'ControlSurfaceScripts' folder in the User Control script folder: 7 | 8 | Mac and Linux: ~/Documents/Bitwig Studio/Controller Scripts/ 9 | On Windows: %USERPROFILE%\Documents\Bitwig Studio\Controller Scripts\ 10 | 11 | Documentation on the layout is included in the KMI_BitwigScripts Folder. 12 | 13 | Ver 0.1 - Basic parameter control, transport control, track select, 14 | send levels and note input. 15 | 16 | Ver 0.2 - Added scales, root offset, and scale scrolling. 17 | Added macro/parameter control switching 18 | 19 | Ver 0.3 - Added in key scales. Control surface .html File, and documentation 20 | 21 | Ver 1.0 - Added Clip Launching Mode. 22 | 23 | This is a first version! Please email me at evanbeta@keithmcmillen.com for bug reporting, feature requests, fan mail etc. 24 | -------------------------------------------------------------------------------- /QUNEO/Documentation/QuNeo.Bitwig.quneopreset: -------------------------------------------------------------------------------- 1 | { "ComponentSettings" : { "HSliders" : { "HSlider0" : { "hB1Channel" : 0, "hB1inLocation" : 0, "hB1outLocPassThruRange" : 127, "hB1outLocation" : 8, "hB1outNote" : -1, "hB1outNotePressMode" : 0, "hB1outPress" : -1, "hB1outPressValue" : -1, "hB1outVelocityValue" : 127, "hB2Channel" : 0, "hB2inLocation" : -1, "hB2outLocPassThruRange" : 127, "hB2outLocation" : -1, "hB2outNote" : -1, "hB2outNotePressMode" : 0, "hB2outPress" : -1, "hB2outPressValue" : -1, "hB2outVelocityValue" : 127, "hB3Channel" : 0, "hB3inLocation" : -1, "hB3outLocPassThruRange" : 127, "hB3outLocation" : -1, "hB3outNote" : -1, "hB3outNotePressMode" : 0, "hB3outPress" : -1, "hB3outPressValue" : -1, "hB3outVelocityValue" : 127, "hB4Channel" : 0, "hB4inLocation" : -1, "hB4outLocPassThruRange" : 127, "hB4outLocation" : -1, "hB4outNote" : -1, "hB4outNotePressMode" : 0, "hB4outPress" : -1, "hB4outPressValue" : -1, "hB4outVelocityValue" : 127 }, "HSlider1" : { "hB1Channel" : 0, "hB1inLocation" : 0, "hB1outLocPassThruRange" : 127, "hB1outLocation" : 7, "hB1outNote" : -1, "hB1outNotePressMode" : 0, "hB1outPress" : -1, "hB1outPressValue" : -1, "hB1outVelocityValue" : 127, "hB2Channel" : 0, "hB2inLocation" : -1, "hB2outLocPassThruRange" : 127, "hB2outLocation" : -1, "hB2outNote" : -1, "hB2outNotePressMode" : 0, "hB2outPress" : -1, "hB2outPressValue" : -1, "hB2outVelocityValue" : 127, "hB3Channel" : 0, "hB3inLocation" : -1, "hB3outLocPassThruRange" : 127, "hB3outLocation" : -1, "hB3outNote" : -1, "hB3outNotePressMode" : 0, "hB3outPress" : -1, "hB3outPressValue" : -1, "hB3outVelocityValue" : 127, "hB4Channel" : 0, "hB4inLocation" : -1, "hB4outLocPassThruRange" : 127, "hB4outLocation" : -1, "hB4outNote" : -1, "hB4outNotePressMode" : 0, "hB4outPress" : -1, "hB4outPressValue" : -1, "hB4outVelocityValue" : 127 }, "HSlider2" : { "hB1Channel" : 0, "hB1inLocation" : 0, "hB1outLocPassThruRange" : 127, "hB1outLocation" : 6, "hB1outNote" : -1, "hB1outNotePressMode" : 0, "hB1outPress" : -1, "hB1outPressValue" : -1, "hB1outVelocityValue" : 127, "hB2Channel" : 0, "hB2inLocation" : -1, "hB2outLocPassThruRange" : 127, "hB2outLocation" : -1, "hB2outNote" : -1, "hB2outNotePressMode" : 0, "hB2outPress" : -1, "hB2outPressValue" : -1, "hB2outVelocityValue" : 127, "hB3Channel" : 0, "hB3inLocation" : -1, "hB3outLocPassThruRange" : 127, "hB3outLocation" : -1, "hB3outNote" : -1, "hB3outNotePressMode" : 0, "hB3outPress" : -1, "hB3outPressValue" : -1, "hB3outVelocityValue" : 127, "hB4Channel" : 0, "hB4inLocation" : -1, "hB4outLocPassThruRange" : 127, "hB4outLocation" : -1, "hB4outNote" : -1, "hB4outNotePressMode" : 0, "hB4outPress" : -1, "hB4outPressValue" : -1, "hB4outVelocityValue" : 127 }, "HSlider3" : { "hB1Channel" : 0, "hB1inLocation" : 0, "hB1outLocPassThruRange" : 127, "hB1outLocation" : 5, "hB1outNote" : -1, "hB1outNotePressMode" : 0, "hB1outPress" : -1, "hB1outPressValue" : -1, "hB1outVelocityValue" : 127, "hB2Channel" : 0, "hB2inLocation" : -1, "hB2outLocPassThruRange" : 127, "hB2outLocation" : -1, "hB2outNote" : -1, "hB2outNotePressMode" : 0, "hB2outPress" : -1, "hB2outPressValue" : -1, "hB2outVelocityValue" : 127, "hB3Channel" : 0, "hB3inLocation" : -1, "hB3outLocPassThruRange" : 127, "hB3outLocation" : -1, "hB3outNote" : -1, "hB3outNotePressMode" : 0, "hB3outPress" : -1, "hB3outPressValue" : -1, "hB3outVelocityValue" : 127, "hB4Channel" : 0, "hB4inLocation" : -1, "hB4outLocPassThruRange" : 127, "hB4outLocation" : -1, "hB4outNote" : -1, "hB4outNotePressMode" : 0, "hB4outPress" : -1, "hB4outPressValue" : -1, "hB4outVelocityValue" : 127 }, "hSliderInChannel" : 0, "hSliderLocalLEDControl" : 0, "hSliderOffThreshold" : 5, "hSliderOnThreshold" : 10, "hSliderSensitivity" : 100 }, "LeftRightButtons" : { "LeftRightButton0" : { "leftrightChannel" : 1, "leftrightEnableSwitch" : 0, "leftrightLInNote" : 0, "leftrightLOutNote" : 19, "leftrightLOutNotePressMode" : 0, "leftrightLOutPress" : -1, "leftrightLOutPressValue" : -1, "leftrightLOutVelocityValue" : 127, "leftrightRInNote" : 0, "leftrightROutNote" : 20, "leftrightROutNotePressMode" : 0, "leftrightROutPress" : -1, "leftrightROutPressValue" : -1, "leftrightROutVelocityValue" : 127 }, "LeftRightButton1" : { "leftrightChannel" : 1, "leftrightEnableSwitch" : 0, "leftrightLInNote" : 0, "leftrightLOutNote" : 21, "leftrightLOutNotePressMode" : 0, "leftrightLOutPress" : -1, "leftrightLOutPressValue" : -1, "leftrightLOutVelocityValue" : 127, "leftrightRInNote" : 0, "leftrightROutNote" : 22, "leftrightROutNotePressMode" : 0, "leftrightROutPress" : -1, "leftrightROutPressValue" : -1, "leftrightROutVelocityValue" : 127 }, "LeftRightButton2" : { "leftrightChannel" : 1, "leftrightEnableSwitch" : 0, "leftrightLInNote" : 0, "leftrightLOutNote" : 23, "leftrightLOutNotePressMode" : 0, "leftrightLOutPress" : -1, "leftrightLOutPressValue" : -1, "leftrightLOutVelocityValue" : 127, "leftrightRInNote" : 0, "leftrightROutNote" : 24, "leftrightROutNotePressMode" : 0, "leftrightROutPress" : -1, "leftrightROutPressValue" : -1, "leftrightROutVelocityValue" : 127 }, "LeftRightButton3" : { "leftrightChannel" : 1, "leftrightEnableSwitch" : 0, "leftrightLInNote" : 0, "leftrightLOutNote" : 17, "leftrightLOutNotePressMode" : 0, "leftrightLOutPress" : -1, "leftrightLOutPressValue" : -1, "leftrightLOutVelocityValue" : 127, "leftrightRInNote" : 0, "leftrightROutNote" : 18, "leftrightROutNotePressMode" : 0, "leftrightROutPress" : -1, "leftrightROutPressValue" : -1, "leftrightROutVelocityValue" : 127 }, "leftrightInChannel" : 0, "leftrightLocalLEDControl" : 0, "leftrightOffThreshold" : 5, "leftrightOnThreshold" : 10, "leftrightSensitivity" : 66 }, "LongSliders" : { "LongSlider0" : { "lB1Channel" : 1, "lB1inLocation" : 0, "lB1inWidth" : -1, "lB1outLocPassThruRange" : 127, "lB1outLocation" : 11, "lB1outNote" : -1, "lB1outNotePressMode" : 0, "lB1outPress" : -1, "lB1outPressValue" : -1, "lB1outVelocityValue" : 127, "lB1outWidth" : -1, "lB2Channel" : 0, "lB2inLocation" : -1, "lB2inWidth" : -1, "lB2outLocPassThruRange" : 127, "lB2outLocation" : -1, "lB2outNote" : -1, "lB2outNotePressMode" : 0, "lB2outPress" : -1, "lB2outPressValue" : -1, "lB2outVelocityValue" : 127, "lB2outWidth" : -1, "lB3Channel" : 0, "lB3inLocation" : -1, "lB3inWidth" : -1, "lB3outLocPassThruRange" : 127, "lB3outLocation" : -1, "lB3outNote" : -1, "lB3outNotePressMode" : 0, "lB3outPress" : -1, "lB3outPressValue" : -1, "lB3outVelocityValue" : 127, "lB3outWidth" : -1, "lB4Channel" : 0, "lB4inLocation" : -1, "lB4inWidth" : -1, "lB4outLocPassThruRange" : 127, "lB4outLocation" : -1, "lB4outNote" : -1, "lB4outNotePressMode" : 0, "lB4outPress" : -1, "lB4outPressValue" : -1, "lB4outVelocityValue" : 127, "lB4outWidth" : -1 }, "lSliderInChannel" : 0, "lSliderLocalLEDControl" : 0, "lSliderOffThreshold" : 5, "lSliderOnThreshold" : 10, "lSliderSensitivity" : 100 }, "ModeButtons" : { "ModeButton0" : { "modeChannel" : 0, "modeEnableSwitch" : 0, "modeInNote" : -1, "modeOutNote" : -1, "modeOutPress" : -1, "modeOutVelocityValue" : 127 }, "modeLocalLEDControl" : 2, "modeOffThreshold" : 5, "modeOnThreshold" : 10, "modeSensitivity" : 66 }, "Pads" : { "Pad0" : { "enableGrid" : 0, "inDmNoteG" : 0, "inDmNoteR" : 0, "inGmNoteGNE" : -1, "inGmNoteGNW" : -1, "inGmNoteGSE" : -1, "inGmNoteGSW" : -1, "inGmNoteRNE" : -1, "inGmNoteRNW" : -1, "inGmNoteRSE" : -1, "inGmNoteRSW" : -1, "outDmNote" : 0, "outDmNotePressMode" : 0, "outDmPress" : 40, "outDmPressValue" : -1, "outDmVelocityValue" : -1, "outDmXCC" : 60, "outDmXReturn" : 63, "outDmXYReturn" : 63, "outDmYCC" : 61, "outDmYReturn" : 63, "outGmNoteNE" : -1, "outGmNoteNW" : -1, "outGmNotePressModeNE" : 0, "outGmNotePressModeNW" : 0, "outGmNotePressModeSE" : 0, "outGmNotePressModeSW" : 0, "outGmNoteSE" : -1, "outGmNoteSW" : -1, "outGmPressNE" : 5, "outGmPressNW" : -1, "outGmPressSE" : -1, "outGmPressSW" : -1, "outGmPressValueNE" : -1, "outGmPressValueNW" : -1, "outGmPressValueSE" : -1, "outGmPressValueSW" : -1, "outGmVelocityValueNE" : 127, "outGmVelocityValueNW" : 127, "outGmVelocityValueSE" : 127, "outGmVelocityValueSW" : 127, "padChannel" : 2, "padSensitivityPerPad" : 119, "padSensitivityPerPadUI" : 0 }, "Pad1" : { "enableGrid" : 0, "inDmNoteG" : 0, "inDmNoteR" : 0, "inGmNoteGNE" : -1, "inGmNoteGNW" : -1, "inGmNoteGSE" : -1, "inGmNoteGSW" : -1, "inGmNoteRNE" : -1, "inGmNoteRNW" : -1, "inGmNoteRSE" : -1, "inGmNoteRSW" : -1, "outDmNote" : 1, "outDmNotePressMode" : 0, "outDmPress" : 40, "outDmPressValue" : -1, "outDmVelocityValue" : -1, "outDmXCC" : 60, "outDmXReturn" : 0, "outDmXYReturn" : 63, "outDmYCC" : 61, "outDmYReturn" : 63, "outGmNoteNE" : -1, "outGmNoteNW" : -1, "outGmNotePressModeNE" : 0, "outGmNotePressModeNW" : 0, "outGmNotePressModeSE" : 0, "outGmNotePressModeSW" : 0, "outGmNoteSE" : -1, "outGmNoteSW" : -1, "outGmPressNE" : -1, "outGmPressNW" : -1, "outGmPressSE" : -1, "outGmPressSW" : -1, "outGmPressValueNE" : -1, "outGmPressValueNW" : -1, "outGmPressValueSE" : -1, "outGmPressValueSW" : -1, "outGmVelocityValueNE" : 127, "outGmVelocityValueNW" : 127, "outGmVelocityValueSE" : 127, "outGmVelocityValueSW" : 127, "padChannel" : 2, "padSensitivityPerPad" : 119, "padSensitivityPerPadUI" : 0 }, "Pad10" : { "enableGrid" : 0, "inDmNoteG" : 0, "inDmNoteR" : 0, "inGmNoteGNE" : -1, "inGmNoteGNW" : -1, "inGmNoteGSE" : -1, "inGmNoteGSW" : -1, "inGmNoteRNE" : -1, "inGmNoteRNW" : -1, "inGmNoteRSE" : -1, "inGmNoteRSW" : -1, "outDmNote" : 10, "outDmNotePressMode" : 0, "outDmPress" : 40, "outDmPressValue" : -1, "outDmVelocityValue" : -1, "outDmXCC" : 60, "outDmXReturn" : 63, "outDmXYReturn" : 63, "outDmYCC" : 61, "outDmYReturn" : 63, "outGmNoteNE" : -1, "outGmNoteNW" : -1, "outGmNotePressModeNE" : 0, "outGmNotePressModeNW" : 0, "outGmNotePressModeSE" : 0, "outGmNotePressModeSW" : 0, "outGmNoteSE" : -1, "outGmNoteSW" : -1, "outGmPressNE" : -1, "outGmPressNW" : -1, "outGmPressSE" : -1, "outGmPressSW" : -1, "outGmPressValueNE" : -1, "outGmPressValueNW" : -1, "outGmPressValueSE" : -1, "outGmPressValueSW" : -1, "outGmVelocityValueNE" : 127, "outGmVelocityValueNW" : 127, "outGmVelocityValueSE" : 127, "outGmVelocityValueSW" : 127, "padChannel" : 2, "padSensitivityPerPad" : 119, "padSensitivityPerPadUI" : 0 }, "Pad11" : { "enableGrid" : 0, "inDmNoteG" : 0, "inDmNoteR" : 0, "inGmNoteGNE" : -1, "inGmNoteGNW" : -1, "inGmNoteGSE" : -1, "inGmNoteGSW" : -1, "inGmNoteRNE" : -1, "inGmNoteRNW" : -1, "inGmNoteRSE" : -1, "inGmNoteRSW" : -1, "outDmNote" : 11, "outDmNotePressMode" : 0, "outDmPress" : 40, "outDmPressValue" : -1, "outDmVelocityValue" : -1, "outDmXCC" : 60, "outDmXReturn" : 63, "outDmXYReturn" : 63, "outDmYCC" : 61, "outDmYReturn" : 63, "outGmNoteNE" : -1, "outGmNoteNW" : -1, "outGmNotePressModeNE" : 0, "outGmNotePressModeNW" : 0, "outGmNotePressModeSE" : 0, "outGmNotePressModeSW" : 0, "outGmNoteSE" : -1, "outGmNoteSW" : -1, "outGmPressNE" : -1, "outGmPressNW" : -1, "outGmPressSE" : -1, "outGmPressSW" : -1, "outGmPressValueNE" : -1, "outGmPressValueNW" : -1, "outGmPressValueSE" : -1, "outGmPressValueSW" : -1, "outGmVelocityValueNE" : 127, "outGmVelocityValueNW" : 127, "outGmVelocityValueSE" : 127, "outGmVelocityValueSW" : 127, "padChannel" : 2, "padSensitivityPerPad" : 119, "padSensitivityPerPadUI" : 0 }, "Pad12" : { "enableGrid" : 0, "inDmNoteG" : 0, "inDmNoteR" : 0, "inGmNoteGNE" : -1, "inGmNoteGNW" : -1, "inGmNoteGSE" : -1, "inGmNoteGSW" : -1, "inGmNoteRNE" : -1, "inGmNoteRNW" : -1, "inGmNoteRSE" : -1, "inGmNoteRSW" : -1, "outDmNote" : 12, "outDmNotePressMode" : 0, "outDmPress" : 40, "outDmPressValue" : -1, "outDmVelocityValue" : -1, "outDmXCC" : 60, "outDmXReturn" : 63, "outDmXYReturn" : 63, "outDmYCC" : 61, "outDmYReturn" : 63, "outGmNoteNE" : -1, "outGmNoteNW" : -1, "outGmNotePressModeNE" : 0, "outGmNotePressModeNW" : 0, "outGmNotePressModeSE" : 0, "outGmNotePressModeSW" : 0, "outGmNoteSE" : -1, "outGmNoteSW" : -1, "outGmPressNE" : -1, "outGmPressNW" : -1, "outGmPressSE" : -1, "outGmPressSW" : -1, "outGmPressValueNE" : -1, "outGmPressValueNW" : -1, "outGmPressValueSE" : -1, "outGmPressValueSW" : -1, "outGmVelocityValueNE" : 127, "outGmVelocityValueNW" : 127, "outGmVelocityValueSE" : 127, "outGmVelocityValueSW" : 127, "padChannel" : 2, "padSensitivityPerPad" : 119, "padSensitivityPerPadUI" : 0 }, "Pad13" : { "enableGrid" : 0, "inDmNoteG" : 0, "inDmNoteR" : 0, "inGmNoteGNE" : -1, "inGmNoteGNW" : -1, "inGmNoteGSE" : -1, "inGmNoteGSW" : -1, "inGmNoteRNE" : -1, "inGmNoteRNW" : -1, "inGmNoteRSE" : -1, "inGmNoteRSW" : -1, "outDmNote" : 13, "outDmNotePressMode" : 0, "outDmPress" : 40, "outDmPressValue" : -1, "outDmVelocityValue" : -1, "outDmXCC" : 60, "outDmXReturn" : 63, "outDmXYReturn" : 63, "outDmYCC" : 61, "outDmYReturn" : 63, "outGmNoteNE" : -1, "outGmNoteNW" : -1, "outGmNotePressModeNE" : 0, "outGmNotePressModeNW" : 0, "outGmNotePressModeSE" : 0, "outGmNotePressModeSW" : 0, "outGmNoteSE" : -1, "outGmNoteSW" : -1, "outGmPressNE" : -1, "outGmPressNW" : -1, "outGmPressSE" : -1, "outGmPressSW" : -1, "outGmPressValueNE" : -1, "outGmPressValueNW" : -1, "outGmPressValueSE" : -1, "outGmPressValueSW" : -1, "outGmVelocityValueNE" : 127, "outGmVelocityValueNW" : 127, "outGmVelocityValueSE" : 127, "outGmVelocityValueSW" : 127, "padChannel" : 2, "padSensitivityPerPad" : 119, "padSensitivityPerPadUI" : 0 }, "Pad14" : { "enableGrid" : 0, "inDmNoteG" : 0, "inDmNoteR" : 0, "inGmNoteGNE" : -1, "inGmNoteGNW" : -1, "inGmNoteGSE" : -1, "inGmNoteGSW" : -1, "inGmNoteRNE" : -1, "inGmNoteRNW" : -1, "inGmNoteRSE" : -1, "inGmNoteRSW" : -1, "outDmNote" : 14, "outDmNotePressMode" : 0, "outDmPress" : 40, "outDmPressValue" : -1, "outDmVelocityValue" : -1, "outDmXCC" : 60, "outDmXReturn" : 63, "outDmXYReturn" : 63, "outDmYCC" : 61, "outDmYReturn" : 63, "outGmNoteNE" : -1, "outGmNoteNW" : -1, "outGmNotePressModeNE" : 0, "outGmNotePressModeNW" : 0, "outGmNotePressModeSE" : 0, "outGmNotePressModeSW" : 0, "outGmNoteSE" : -1, "outGmNoteSW" : -1, "outGmPressNE" : -1, "outGmPressNW" : -1, "outGmPressSE" : -1, "outGmPressSW" : -1, "outGmPressValueNE" : -1, "outGmPressValueNW" : -1, "outGmPressValueSE" : -1, "outGmPressValueSW" : -1, "outGmVelocityValueNE" : 127, "outGmVelocityValueNW" : 127, "outGmVelocityValueSE" : 127, "outGmVelocityValueSW" : 127, "padChannel" : 2, "padSensitivityPerPad" : 119, "padSensitivityPerPadUI" : 0 }, "Pad15" : { "enableGrid" : 0, "inDmNoteG" : 0, "inDmNoteR" : 0, "inGmNoteGNE" : -1, "inGmNoteGNW" : -1, "inGmNoteGSE" : -1, "inGmNoteGSW" : -1, "inGmNoteRNE" : -1, "inGmNoteRNW" : -1, "inGmNoteRSE" : -1, "inGmNoteRSW" : -1, "outDmNote" : 15, "outDmNotePressMode" : 0, "outDmPress" : 40, "outDmPressValue" : -1, "outDmVelocityValue" : -1, "outDmXCC" : 60, "outDmXReturn" : 63, "outDmXYReturn" : 63, "outDmYCC" : 61, "outDmYReturn" : 63, "outGmNoteNE" : -1, "outGmNoteNW" : -1, "outGmNotePressModeNE" : 0, "outGmNotePressModeNW" : 0, "outGmNotePressModeSE" : 0, "outGmNotePressModeSW" : 0, "outGmNoteSE" : -1, "outGmNoteSW" : -1, "outGmPressNE" : -1, "outGmPressNW" : -1, "outGmPressSE" : -1, "outGmPressSW" : -1, "outGmPressValueNE" : -1, "outGmPressValueNW" : -1, "outGmPressValueSE" : -1, "outGmPressValueSW" : -1, "outGmVelocityValueNE" : 127, "outGmVelocityValueNW" : 127, "outGmVelocityValueSE" : 127, "outGmVelocityValueSW" : 127, "padChannel" : 2, "padSensitivityPerPad" : 119, "padSensitivityPerPadUI" : 0 }, "Pad2" : { "enableGrid" : 0, "inDmNoteG" : 0, "inDmNoteR" : 0, "inGmNoteGNE" : -1, "inGmNoteGNW" : -1, "inGmNoteGSE" : -1, "inGmNoteGSW" : -1, "inGmNoteRNE" : -1, "inGmNoteRNW" : -1, "inGmNoteRSE" : -1, "inGmNoteRSW" : -1, "outDmNote" : 2, "outDmNotePressMode" : 0, "outDmPress" : 40, "outDmPressValue" : -1, "outDmVelocityValue" : -1, "outDmXCC" : 60, "outDmXReturn" : 0, "outDmXYReturn" : 63, "outDmYCC" : 61, "outDmYReturn" : 63, "outGmNoteNE" : -1, "outGmNoteNW" : -1, "outGmNotePressModeNE" : 0, "outGmNotePressModeNW" : 0, "outGmNotePressModeSE" : 0, "outGmNotePressModeSW" : 0, "outGmNoteSE" : -1, "outGmNoteSW" : -1, "outGmPressNE" : -1, "outGmPressNW" : -1, "outGmPressSE" : -1, "outGmPressSW" : -1, "outGmPressValueNE" : -1, "outGmPressValueNW" : -1, "outGmPressValueSE" : -1, "outGmPressValueSW" : -1, "outGmVelocityValueNE" : 127, "outGmVelocityValueNW" : 127, "outGmVelocityValueSE" : 127, "outGmVelocityValueSW" : 127, "padChannel" : 2, "padSensitivityPerPad" : 119, "padSensitivityPerPadUI" : 0 }, "Pad3" : { "enableGrid" : 0, "inDmNoteG" : 0, "inDmNoteR" : 0, "inGmNoteGNE" : -1, "inGmNoteGNW" : -1, "inGmNoteGSE" : -1, "inGmNoteGSW" : -1, "inGmNoteRNE" : -1, "inGmNoteRNW" : -1, "inGmNoteRSE" : -1, "inGmNoteRSW" : -1, "outDmNote" : 3, "outDmNotePressMode" : 0, "outDmPress" : 40, "outDmPressValue" : -1, "outDmVelocityValue" : -1, "outDmXCC" : 60, "outDmXReturn" : 63, "outDmXYReturn" : 63, "outDmYCC" : 61, "outDmYReturn" : 63, "outGmNoteNE" : -1, "outGmNoteNW" : -1, "outGmNotePressModeNE" : 0, "outGmNotePressModeNW" : 0, "outGmNotePressModeSE" : 0, "outGmNotePressModeSW" : 0, "outGmNoteSE" : -1, "outGmNoteSW" : -1, "outGmPressNE" : -1, "outGmPressNW" : -1, "outGmPressSE" : -1, "outGmPressSW" : -1, "outGmPressValueNE" : -1, "outGmPressValueNW" : -1, "outGmPressValueSE" : -1, "outGmPressValueSW" : -1, "outGmVelocityValueNE" : 127, "outGmVelocityValueNW" : 127, "outGmVelocityValueSE" : 127, "outGmVelocityValueSW" : 127, "padChannel" : 2, "padSensitivityPerPad" : 119, "padSensitivityPerPadUI" : 0 }, "Pad4" : { "enableGrid" : 0, "inDmNoteG" : 0, "inDmNoteR" : 0, "inGmNoteGNE" : -1, "inGmNoteGNW" : -1, "inGmNoteGSE" : -1, "inGmNoteGSW" : -1, "inGmNoteRNE" : -1, "inGmNoteRNW" : -1, "inGmNoteRSE" : -1, "inGmNoteRSW" : -1, "outDmNote" : 4, "outDmNotePressMode" : 0, "outDmPress" : 40, "outDmPressValue" : -1, "outDmVelocityValue" : -1, "outDmXCC" : 60, "outDmXReturn" : 63, "outDmXYReturn" : 63, "outDmYCC" : 61, "outDmYReturn" : 63, "outGmNoteNE" : -1, "outGmNoteNW" : -1, "outGmNotePressModeNE" : 0, "outGmNotePressModeNW" : 0, "outGmNotePressModeSE" : 0, "outGmNotePressModeSW" : 0, "outGmNoteSE" : -1, "outGmNoteSW" : -1, "outGmPressNE" : -1, "outGmPressNW" : -1, "outGmPressSE" : -1, "outGmPressSW" : -1, "outGmPressValueNE" : -1, "outGmPressValueNW" : -1, "outGmPressValueSE" : -1, "outGmPressValueSW" : -1, "outGmVelocityValueNE" : 127, "outGmVelocityValueNW" : 127, "outGmVelocityValueSE" : 127, "outGmVelocityValueSW" : 127, "padChannel" : 2, "padSensitivityPerPad" : 119, "padSensitivityPerPadUI" : 0 }, "Pad5" : { "enableGrid" : 0, "inDmNoteG" : 0, "inDmNoteR" : 0, "inGmNoteGNE" : -1, "inGmNoteGNW" : -1, "inGmNoteGSE" : -1, "inGmNoteGSW" : -1, "inGmNoteRNE" : -1, "inGmNoteRNW" : -1, "inGmNoteRSE" : -1, "inGmNoteRSW" : -1, "outDmNote" : 5, "outDmNotePressMode" : 0, "outDmPress" : 40, "outDmPressValue" : -1, "outDmVelocityValue" : -1, "outDmXCC" : 60, "outDmXReturn" : 63, "outDmXYReturn" : 63, "outDmYCC" : 61, "outDmYReturn" : 63, "outGmNoteNE" : -1, "outGmNoteNW" : -1, "outGmNotePressModeNE" : 0, "outGmNotePressModeNW" : 0, "outGmNotePressModeSE" : 0, "outGmNotePressModeSW" : 0, "outGmNoteSE" : -1, "outGmNoteSW" : -1, "outGmPressNE" : -1, "outGmPressNW" : -1, "outGmPressSE" : -1, "outGmPressSW" : -1, "outGmPressValueNE" : -1, "outGmPressValueNW" : -1, "outGmPressValueSE" : -1, "outGmPressValueSW" : -1, "outGmVelocityValueNE" : 127, "outGmVelocityValueNW" : 127, "outGmVelocityValueSE" : 127, "outGmVelocityValueSW" : 127, "padChannel" : 2, "padSensitivityPerPad" : 119, "padSensitivityPerPadUI" : 0 }, "Pad6" : { "enableGrid" : 0, "inDmNoteG" : 0, "inDmNoteR" : 0, "inGmNoteGNE" : -1, "inGmNoteGNW" : -1, "inGmNoteGSE" : -1, "inGmNoteGSW" : -1, "inGmNoteRNE" : -1, "inGmNoteRNW" : -1, "inGmNoteRSE" : -1, "inGmNoteRSW" : -1, "outDmNote" : 6, "outDmNotePressMode" : 0, "outDmPress" : 40, "outDmPressValue" : -1, "outDmVelocityValue" : -1, "outDmXCC" : 60, "outDmXReturn" : 63, "outDmXYReturn" : 63, "outDmYCC" : 61, "outDmYReturn" : 63, "outGmNoteNE" : -1, "outGmNoteNW" : -1, "outGmNotePressModeNE" : 0, "outGmNotePressModeNW" : 0, "outGmNotePressModeSE" : 0, "outGmNotePressModeSW" : 0, "outGmNoteSE" : -1, "outGmNoteSW" : -1, "outGmPressNE" : -1, "outGmPressNW" : -1, "outGmPressSE" : -1, "outGmPressSW" : -1, "outGmPressValueNE" : -1, "outGmPressValueNW" : -1, "outGmPressValueSE" : -1, "outGmPressValueSW" : -1, "outGmVelocityValueNE" : 127, "outGmVelocityValueNW" : 127, "outGmVelocityValueSE" : 127, "outGmVelocityValueSW" : 127, "padChannel" : 2, "padSensitivityPerPad" : 119, "padSensitivityPerPadUI" : 0 }, "Pad7" : { "enableGrid" : 0, "inDmNoteG" : 0, "inDmNoteR" : 0, "inGmNoteGNE" : -1, "inGmNoteGNW" : -1, "inGmNoteGSE" : -1, "inGmNoteGSW" : -1, "inGmNoteRNE" : -1, "inGmNoteRNW" : -1, "inGmNoteRSE" : -1, "inGmNoteRSW" : -1, "outDmNote" : 7, "outDmNotePressMode" : 0, "outDmPress" : 40, "outDmPressValue" : -1, "outDmVelocityValue" : -1, "outDmXCC" : 60, "outDmXReturn" : 63, "outDmXYReturn" : 63, "outDmYCC" : 61, "outDmYReturn" : 63, "outGmNoteNE" : -1, "outGmNoteNW" : -1, "outGmNotePressModeNE" : 0, "outGmNotePressModeNW" : 0, "outGmNotePressModeSE" : 0, "outGmNotePressModeSW" : 0, "outGmNoteSE" : -1, "outGmNoteSW" : -1, "outGmPressNE" : -1, "outGmPressNW" : -1, "outGmPressSE" : -1, "outGmPressSW" : -1, "outGmPressValueNE" : -1, "outGmPressValueNW" : -1, "outGmPressValueSE" : -1, "outGmPressValueSW" : -1, "outGmVelocityValueNE" : 127, "outGmVelocityValueNW" : 127, "outGmVelocityValueSE" : 127, "outGmVelocityValueSW" : 127, "padChannel" : 2, "padSensitivityPerPad" : 119, "padSensitivityPerPadUI" : 0 }, "Pad8" : { "enableGrid" : 0, "inDmNoteG" : 0, "inDmNoteR" : 0, "inGmNoteGNE" : -1, "inGmNoteGNW" : -1, "inGmNoteGSE" : -1, "inGmNoteGSW" : -1, "inGmNoteRNE" : -1, "inGmNoteRNW" : -1, "inGmNoteRSE" : -1, "inGmNoteRSW" : -1, "outDmNote" : 8, "outDmNotePressMode" : 0, "outDmPress" : 40, "outDmPressValue" : -1, "outDmVelocityValue" : -1, "outDmXCC" : 60, "outDmXReturn" : 63, "outDmXYReturn" : 63, "outDmYCC" : 61, "outDmYReturn" : 63, "outGmNoteNE" : -1, "outGmNoteNW" : -1, "outGmNotePressModeNE" : 0, "outGmNotePressModeNW" : 0, "outGmNotePressModeSE" : 0, "outGmNotePressModeSW" : 0, "outGmNoteSE" : -1, "outGmNoteSW" : -1, "outGmPressNE" : -1, "outGmPressNW" : -1, "outGmPressSE" : -1, "outGmPressSW" : -1, "outGmPressValueNE" : -1, "outGmPressValueNW" : -1, "outGmPressValueSE" : -1, "outGmPressValueSW" : -1, "outGmVelocityValueNE" : 127, "outGmVelocityValueNW" : 127, "outGmVelocityValueSE" : 127, "outGmVelocityValueSW" : 127, "padChannel" : 2, "padSensitivityPerPad" : 119, "padSensitivityPerPadUI" : 0 }, "Pad9" : { "enableGrid" : 0, "inDmNoteG" : 0, "inDmNoteR" : 0, "inGmNoteGNE" : -1, "inGmNoteGNW" : -1, "inGmNoteGSE" : -1, "inGmNoteGSW" : -1, "inGmNoteRNE" : -1, "inGmNoteRNW" : -1, "inGmNoteRSE" : -1, "inGmNoteRSW" : -1, "outDmNote" : 9, "outDmNotePressMode" : 0, "outDmPress" : 40, "outDmPressValue" : -1, "outDmVelocityValue" : -1, "outDmXCC" : 60, "outDmXReturn" : 63, "outDmXYReturn" : 63, "outDmYCC" : 61, "outDmYReturn" : 63, "outGmNoteNE" : -1, "outGmNoteNW" : -1, "outGmNotePressModeNE" : 0, "outGmNotePressModeNW" : 0, "outGmNotePressModeSE" : 0, "outGmNotePressModeSW" : 0, "outGmNoteSE" : -1, "outGmNoteSW" : -1, "outGmPressNE" : -1, "outGmPressNW" : -1, "outGmPressSE" : -1, "outGmPressSW" : -1, "outGmPressValueNE" : -1, "outGmPressValueNW" : -1, "outGmPressValueSE" : -1, "outGmPressValueSW" : -1, "outGmVelocityValueNE" : 127, "outGmVelocityValueNW" : 127, "outGmVelocityValueSE" : 127, "outGmVelocityValueSW" : 127, "padChannel" : 2, "padSensitivityPerPad" : 119, "padSensitivityPerPadUI" : 0 }, "bank1TransposeInterval" : 0, "bank2TransposeInterval" : 16, "bank3TransposeInterval" : 32, "bank4TransposeInterval" : 48, "cornerIsolation" : 80, "localLEDControl" : 0, "padBankChangeMode" : 1, "padDrumInChannel" : 0, "padGridDiscreteInChannel" : 1, "padGridDualInChannel" : 2, "padOffThreshold" : 5, "padOffset" : 0, "padOnThreshold" : 25, "padSensitivity" : 88, "padVelocityTable" : [ 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 12, 12, 13, 13, 14, 15, 16, 16, 17, 18, 19, 19, 20, 21, 22, 23, 24, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 47, 48, 49, 50, 52, 53, 54, 55, 57, 58, 60, 61, 62, 64, 65, 67, 68, 70, 71, 73, 74, 76, 77, 79, 80, 82, 84, 85, 87, 89, 90, 92, 94, 96, 97, 99, 101, 103, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 125, 127 ], "padVelocityTableID" : "Medium" }, "RhombusButtons" : { "RhombusButton0" : { "rhombusBankControl" : 0, "rhombusChannel" : 1, "rhombusEnableSwitch" : 0, "rhombusInNoteG" : 0, "rhombusInNoteR" : 0, "rhombusOutNote" : 32, "rhombusOutNotePressMode" : 0, "rhombusOutPress" : -1, "rhombusOutPressValue" : -1, "rhombusOutVelocityValue" : 127 }, "rhombusInChannel" : 0, "rhombusLocalLEDControl" : 2, "rhombusOffThreshold" : 5, "rhombusOnThreshold" : 10, "rhombusSensitivity" : 66 }, "Rotaries" : { "Rotary0" : { "rB1Channel" : 0, "rB1DirStorage" : 4, "rB1LocStorage" : -1, "rB1inLocation" : 0, "rB1outDirection" : 0, "rB1outDirectionEnable" : 0, "rB1outLocPassThruRange" : 115, "rB1outLocation" : 9, "rB1outNote" : -1, "rB1outNotePressMode" : 0, "rB1outPress" : -1, "rB1outPressValue" : -1, "rB1outSpeed" : 5, "rB1outVelocityValue" : 127, "rB2Channel" : 0, "rB2DirStorage" : -1, "rB2LocStorage" : -1, "rB2inLocation" : -1, "rB2outDirection" : -1, "rB2outDirectionEnable" : 0, "rB2outLocPassThruRange" : 127, "rB2outLocation" : -1, "rB2outNote" : -1, "rB2outNotePressMode" : 0, "rB2outPress" : -1, "rB2outPressValue" : -1, "rB2outSpeed" : 5, "rB2outVelocityValue" : 127, "rB3Channel" : 0, "rB3DirStorage" : -1, "rB3LocStorage" : -1, "rB3inLocation" : -1, "rB3outDirection" : -1, "rB3outDirectionEnable" : 0, "rB3outLocPassThruRange" : 127, "rB3outLocation" : -1, "rB3outNote" : -1, "rB3outNotePressMode" : 0, "rB3outPress" : -1, "rB3outPressValue" : -1, "rB3outSpeed" : 5, "rB3outVelocityValue" : 127, "rB4Channel" : 0, "rB4DirStorage" : -1, "rB4LocStorage" : -1, "rB4inLocation" : -1, "rB4outDirection" : -1, "rB4outDirectionEnable" : 0, "rB4outLocPassThruRange" : 127, "rB4outLocation" : -1, "rB4outNote" : -1, "rB4outNotePressMode" : 0, "rB4outPress" : -1, "rB4outPressValue" : -1, "rB4outSpeed" : 5, "rB4outVelocityValue" : 127 }, "Rotary1" : { "rB1Channel" : 0, "rB1DirStorage" : 5, "rB1LocStorage" : -1, "rB1inLocation" : 0, "rB1outDirection" : 0, "rB1outDirectionEnable" : 0, "rB1outLocPassThruRange" : 127, "rB1outLocation" : 10, "rB1outNote" : -1, "rB1outNotePressMode" : 0, "rB1outPress" : -1, "rB1outPressValue" : -1, "rB1outSpeed" : 5, "rB1outVelocityValue" : 127, "rB2Channel" : 0, "rB2DirStorage" : -1, "rB2LocStorage" : -1, "rB2inLocation" : -1, "rB2outDirection" : -1, "rB2outDirectionEnable" : 0, "rB2outLocPassThruRange" : 127, "rB2outLocation" : -1, "rB2outNote" : -1, "rB2outNotePressMode" : 0, "rB2outPress" : -1, "rB2outPressValue" : -1, "rB2outSpeed" : 5, "rB2outVelocityValue" : 127, "rB3Channel" : 0, "rB3DirStorage" : -1, "rB3LocStorage" : -1, "rB3inLocation" : -1, "rB3outDirection" : -1, "rB3outDirectionEnable" : 0, "rB3outLocPassThruRange" : 127, "rB3outLocation" : -1, "rB3outNote" : -1, "rB3outNotePressMode" : 0, "rB3outPress" : -1, "rB3outPressValue" : -1, "rB3outSpeed" : 5, "rB3outVelocityValue" : 127, "rB4Channel" : 0, "rB4DirStorage" : -1, "rB4LocStorage" : -1, "rB4inLocation" : -1, "rB4outDirection" : -1, "rB4outDirectionEnable" : 0, "rB4outLocPassThruRange" : 127, "rB4outLocation" : -1, "rB4outNote" : -1, "rB4outNotePressMode" : 0, "rB4outPress" : -1, "rB4outPressValue" : -1, "rB4outSpeed" : 5, "rB4outVelocityValue" : 127 }, "rotaryInChannel" : 0, "rotaryLocalLEDControl" : 0, "rotaryOffThreshold" : 5, "rotaryOnThreshold" : 10, "rotarySensitivity" : 100 }, "TransportButtons" : { "TransportButton0" : { "transportChannel" : 1, "transportInNote" : 0, "transportOutNote" : 29, "transportOutNotePressMode" : 0, "transportOutPress" : -1, "transportOutPressValue" : 1, "transportOutVelocityValue" : 127 }, "TransportButton1" : { "transportChannel" : 1, "transportInNote" : 0, "transportOutNote" : 30, "transportOutNotePressMode" : 0, "transportOutPress" : -1, "transportOutPressValue" : 1, "transportOutVelocityValue" : 127 }, "TransportButton2" : { "transportChannel" : 1, "transportInNote" : 0, "transportOutNote" : 31, "transportOutNotePressMode" : 0, "transportOutPress" : -1, "transportOutPressValue" : 1, "transportOutVelocityValue" : 127 }, "transportInChannel" : 0, "transportLocalLEDControl" : 0, "transportOffThreshold" : 5, "transportOnThreshold" : 10, "transportSensitivity" : 66 }, "UpDownButtons" : { "UpDownButton0" : { "updownBankControl" : 3, "updownChannel" : 1, "updownDInNote" : 0, "updownDOutNote" : 26, "updownDOutNotePressMode" : 0, "updownDOutPress" : -1, "updownDOutPressValue" : -1, "updownDOutVelocityValue" : 127, "updownEnableSwitch" : 0, "updownUInNote" : 0, "updownUOutNote" : 25, "updownUOutNotePressMode" : 0, "updownUOutPress" : -1, "updownUOutPressValue" : -1, "updownUOutVelocityValue" : 127 }, "UpDownButton1" : { "updownBankControl" : 3, "updownChannel" : 1, "updownDInNote" : 0, "updownDOutNote" : 28, "updownDOutNotePressMode" : 0, "updownDOutPress" : -1, "updownDOutPressValue" : -1, "updownDOutVelocityValue" : 127, "updownEnableSwitch" : 0, "updownUInNote" : 0, "updownUOutNote" : 27, "updownUOutNotePressMode" : 0, "updownUOutPress" : -1, "updownUOutPressValue" : -1, "updownUOutVelocityValue" : 127 }, "updownInChannel" : 0, "updownLocalLEDControl" : 2, "updownOffThreshold" : 5, "updownOnThreshold" : 10, "updownSensitivity" : 66 }, "VSliders" : { "VSlider0" : { "vB1Channel" : 0, "vB1inLocation" : 0, "vB1outLocPassThruRange" : 127, "vB1outLocation" : 1, "vB1outNote" : -1, "vB1outNotePressMode" : 0, "vB1outPress" : -1, "vB1outPressValue" : -1, "vB1outVelocityValue" : 127, "vB2Channel" : 0, "vB2inLocation" : -1, "vB2outLocPassThruRange" : 127, "vB2outLocation" : -1, "vB2outNote" : -1, "vB2outNotePressMode" : 0, "vB2outPress" : -1, "vB2outPressValue" : -1, "vB2outVelocityValue" : 127, "vB3Channel" : 0, "vB3inLocation" : -1, "vB3outLocPassThruRange" : 127, "vB3outLocation" : -1, "vB3outNote" : -1, "vB3outNotePressMode" : 0, "vB3outPress" : -1, "vB3outPressValue" : -1, "vB3outVelocityValue" : 127, "vB4Channel" : 0, "vB4inLocation" : -1, "vB4outLocPassThruRange" : 127, "vB4outLocation" : -1, "vB4outNote" : -1, "vB4outNotePressMode" : 0, "vB4outPress" : -1, "vB4outPressValue" : -1, "vB4outVelocityValue" : 127 }, "VSlider1" : { "vB1Channel" : 0, "vB1inLocation" : 0, "vB1outLocPassThruRange" : 127, "vB1outLocation" : 2, "vB1outNote" : -1, "vB1outNotePressMode" : 0, "vB1outPress" : -1, "vB1outPressValue" : -1, "vB1outVelocityValue" : 127, "vB2Channel" : 0, "vB2inLocation" : -1, "vB2outLocPassThruRange" : 127, "vB2outLocation" : -1, "vB2outNote" : -1, "vB2outNotePressMode" : 0, "vB2outPress" : -1, "vB2outPressValue" : -1, "vB2outVelocityValue" : 127, "vB3Channel" : 0, "vB3inLocation" : -1, "vB3outLocPassThruRange" : 127, "vB3outLocation" : -1, "vB3outNote" : -1, "vB3outNotePressMode" : 0, "vB3outPress" : -1, "vB3outPressValue" : -1, "vB3outVelocityValue" : 127, "vB4Channel" : 0, "vB4inLocation" : -1, "vB4outLocPassThruRange" : 127, "vB4outLocation" : -1, "vB4outNote" : -1, "vB4outNotePressMode" : 0, "vB4outPress" : -1, "vB4outPressValue" : -1, "vB4outVelocityValue" : 127 }, "VSlider2" : { "vB1Channel" : 0, "vB1inLocation" : 0, "vB1outLocPassThruRange" : 127, "vB1outLocation" : 3, "vB1outNote" : -1, "vB1outNotePressMode" : 0, "vB1outPress" : -1, "vB1outPressValue" : -1, "vB1outVelocityValue" : 127, "vB2Channel" : 0, "vB2inLocation" : -1, "vB2outLocPassThruRange" : 127, "vB2outLocation" : -1, "vB2outNote" : -1, "vB2outNotePressMode" : 0, "vB2outPress" : -1, "vB2outPressValue" : -1, "vB2outVelocityValue" : 127, "vB3Channel" : 0, "vB3inLocation" : -1, "vB3outLocPassThruRange" : 127, "vB3outLocation" : -1, "vB3outNote" : -1, "vB3outNotePressMode" : 0, "vB3outPress" : -1, "vB3outPressValue" : -1, "vB3outVelocityValue" : 127, "vB4Channel" : 0, "vB4inLocation" : -1, "vB4outLocPassThruRange" : 127, "vB4outLocation" : -1, "vB4outNote" : -1, "vB4outNotePressMode" : 0, "vB4outPress" : -1, "vB4outPressValue" : -1, "vB4outVelocityValue" : 127 }, "VSlider3" : { "vB1Channel" : 0, "vB1inLocation" : 0, "vB1outLocPassThruRange" : 127, "vB1outLocation" : 4, "vB1outNote" : -1, "vB1outNotePressMode" : 0, "vB1outPress" : -1, "vB1outPressValue" : -1, "vB1outVelocityValue" : 127, "vB2Channel" : 0, "vB2inLocation" : -1, "vB2outLocPassThruRange" : 127, "vB2outLocation" : -1, "vB2outNote" : -1, "vB2outNotePressMode" : 0, "vB2outPress" : -1, "vB2outPressValue" : -1, "vB2outVelocityValue" : 127, "vB3Channel" : 0, "vB3inLocation" : -1, "vB3outLocPassThruRange" : 127, "vB3outLocation" : -1, "vB3outNote" : -1, "vB3outNotePressMode" : 0, "vB3outPress" : -1, "vB3outPressValue" : -1, "vB3outVelocityValue" : 127, "vB4Channel" : 0, "vB4inLocation" : -1, "vB4outLocPassThruRange" : 127, "vB4outLocation" : -1, "vB4outNote" : -1, "vB4outNotePressMode" : 0, "vB4outPress" : -1, "vB4outPressValue" : -1, "vB4outVelocityValue" : 127 }, "vSliderInChannel" : 0, "vSliderLocalLEDControl" : 0, "vSliderOffThreshold" : 5, "vSliderOnThreshold" : 10, "vSliderSensitivity" : 100 } }, "presetName" : "Bitwig Script Preset", "revisionNumber" : 576 } -------------------------------------------------------------------------------- /QUNEO/Documentation/QuNeo_Bitwig_Documentation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataf1ow/KMI_Bitwig_Scripts/ea709ada6dafe49fcb4e516ceb5e4a0472be687e/QUNEO/Documentation/QuNeo_Bitwig_Documentation.pdf -------------------------------------------------------------------------------- /QUNEO/Documentation/QuNeo_Bitwig_Layout.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataf1ow/KMI_Bitwig_Scripts/ea709ada6dafe49fcb4e516ceb5e4a0472be687e/QUNEO/Documentation/QuNeo_Bitwig_Layout.pdf -------------------------------------------------------------------------------- /QUNEO/QUNEO_Script/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataf1ow/KMI_Bitwig_Scripts/ea709ada6dafe49fcb4e516ceb5e4a0472be687e/QUNEO/QUNEO_Script/.DS_Store -------------------------------------------------------------------------------- /QUNEO/QUNEO_Script/QUNEO.control.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright 2014 Evan Bogunia_____evanbeta@keithmcmillen.com 4 | 5 | 6 | */ 7 | 8 | 9 | 10 | //Load the bitwig API, obviously. 11 | loadAPI(1); 12 | 13 | //Define/set our controller properties [ company, device, version, uuid ] 14 | host.defineController("Keith McMillen Instruments", "QUNEO", "1.0", "A323D780-5AF5-11E4-8ED6-0800200C9A66"); 15 | host.defineMidiPorts(1, 1); 16 | 17 | //Define/set input/output port names (both i/o are the same) 18 | var portNames = ["QUNEO"]; 19 | host.addDeviceNameBasedDiscoveryPair(portNames, portNames); 20 | //host.addDeviceNameBasedDiscoveryPair(["QUNEO MIDI 1"], ["QUNEO MIDI 1"]); 21 | 22 | /////Loading external Files 23 | load("QUNEO_functions.js") 24 | load("QUNEO_pages.js") 25 | load("QUNEO_parameterPage.js") 26 | load("QUNEO_notes.js") 27 | load("QUNEO_clips.js") 28 | 29 | ////Defining Variables 30 | 31 | var on = true; 32 | var initialize = 0; 33 | var paramPage = 1; 34 | var pageNames = [8]; 35 | var isMacroMapping = []; 36 | var transportPlay = 0 37 | var transportRec = 0 38 | var masterValue = 0; 39 | var sendValues = [0,0] 40 | var paramValues = initArray(0, 8); 41 | var macroValues = initArray(0, 8); 42 | var trackName = "tracks"; 43 | var activePage = parameterPage; 44 | var translationTable = initArray(60, 128); 45 | var noteOffTable = initArray(-1, 128); 46 | var selectionTable = initArray(60,128) 47 | var translate = new Object(); 48 | var padPage = notePage; 49 | var pageIndex = pageNames.length 50 | var modeSelect = false; 51 | var trackHasChanged = 0; 52 | var parameterHasChanged = 0; 53 | var hasContent = initArray(0, 16); 54 | var isPlaying = initArray(0, 16); 55 | var isRecording = initArray(0, 16); 56 | var isQueued = initArray(0, 16); 57 | var pendingLEDs = initArray(0, 15); 58 | var currentLEDs = initArray(0,15); 59 | var HIGHEST_CC = 119; 60 | var LOWEST_CC = 12; 61 | 62 | 63 | function init() 64 | { 65 | host.getMidiInPort(0).setMidiCallback(onMidi); 66 | host.getMidiInPort(0).setSysexCallback(onSysex); 67 | noteIn = host.getMidiInPort(0).createNoteInput("QUNEO", "82????", "92????") 68 | noteIn.setShouldConsumeEvents(false); 69 | //println("These ARE the pads you're looking....guy") 70 | sendMidi(144, 36, 127); 71 | sendMidi(144, 37, 127); 72 | sendMidi(144, 38, 127); 73 | sendMidi(144, 39, 127); 74 | sendMidi(144, 42, 127); 75 | sendMidi(144, 43, 127); 76 | 77 | updateTranslationTable(); 78 | noteIn.setKeyTranslationTable(translationTable); 79 | 80 | //standardVelocity(); 81 | // 82 | notif = host.getNotificationSettings(); 83 | 84 | notif.setShouldShowChannelSelectionNotifications(true); 85 | notif.setShouldShowDeviceLayerSelectionNotifications(true); 86 | notif.setShouldShowDeviceSelectionNotifications(true); 87 | notif.setShouldShowMappingNotifications(true); 88 | notif.setShouldShowPresetNotifications(false); 89 | notif.setShouldShowSelectionNotifications(true); 90 | notif.setShouldShowTrackSelectionNotifications(true); 91 | notif.setShouldShowValueNotifications(false); 92 | 93 | //////User Control Settings 94 | 95 | userControls = host.createUserControlsSection(HIGHEST_CC - LOWEST_CC + 1); 96 | for(var i=LOWEST_CC; i<=HIGHEST_CC; i++) 97 | { 98 | userControls.getControl(i - LOWEST_CC).setLabel("CC" + i); 99 | } 100 | ////////Views 101 | 102 | transport = host.createTransport(); 103 | application = host.createApplication(); 104 | trackBank = host.createTrackBank(4, 2, 4); 105 | cursorTrack = host.createCursorTrack(2, 0); 106 | //cursorDevice = host.createCursorDeviceSection(8); 107 | primaryDevice = cursorTrack.getPrimaryDevice(); 108 | primaryInstrument = cursorTrack.getPrimaryInstrument(); 109 | arranger = host.createArranger(0); 110 | master = host.createMasterTrack(8); 111 | 112 | //Observers 113 | 114 | master.getVolume().addValueObserver(128, function(value) 115 | { 116 | sendMidi(176, 5, value) 117 | masterValue = value 118 | 119 | }) 120 | 121 | cursorTrack.addTrackTypeObserver(10, "track", function(name) 122 | { 123 | if (name == "Effect" || name == "Master"){ 124 | sendMidi(176, 6, 0) 125 | sendMidi(176, 7, 0) 126 | 127 | } 128 | }) 129 | 130 | cursorTrack.getSend(0).addValueObserver(128 ,function(value) 131 | { 132 | display = (value + 64) % 128 133 | if (display > 63 && display < 72){ 134 | display = 72 135 | } 136 | sendMidi(176, 6, display) 137 | sendValues[0] = value 138 | 139 | }) 140 | 141 | cursorTrack.getSend(1).addValueObserver(128 ,function(value) 142 | { 143 | display = (value + 64) % 128 144 | if (display > 63 && display < 72){ 145 | display = 72 146 | } 147 | sendMidi(176, 7, display) 148 | sendValues[1] = value 149 | }) 150 | 151 | transport.addIsPlayingObserver(function(on) 152 | { 153 | playObserver(on); 154 | 155 | }) 156 | 157 | transport.addIsRecordingObserver(function(on) 158 | { 159 | recObserver(on); 160 | }); 161 | 162 | 163 | ///////DEPRECATED_ All is handled by Bitwig. 164 | /*primaryDevice.addPageNamesObserver(function(names) 165 | { 166 | pageNames = arguments; 167 | 168 | }); 169 | 170 | primaryDevice.addSelectedPageObserver(8, function(page) 171 | { 172 | 173 | paramPage = page; 174 | /*if (parameterHasChanged == 1){ 175 | if (pageNames[paramPage] != undefined){ 176 | host.showPopupNotification("Parameter Page = " + pageNames[paramPage]); 177 | } 178 | parameterHasChanged = 0; 179 | } 180 | })*/ 181 | 182 | 183 | 184 | //Parameters 185 | 186 | for ( var p = 0; p < 8; p++) 187 | { 188 | 189 | var parameter = primaryDevice.getParameter(p); 190 | parameter.addValueObserver(128, makeIndexedFunction(p, function(index, value) 191 | { 192 | paramValues[index] = value; 193 | if (activePage == parameterPage) 194 | { 195 | paramLED(index, value); 196 | 197 | } 198 | 199 | })); 200 | } 201 | 202 | for (var p = 0; p < 8; p++) 203 | { 204 | 205 | var macro = primaryDevice.getMacro(p).getAmount(); 206 | macro.addValueObserver(128, makeIndexedFunction(p, function(index, value) 207 | { 208 | 209 | macroValues[index] = value; 210 | if (activePage == macroPage) 211 | { 212 | macroLED(index, value); 213 | } 214 | })); 215 | 216 | for (var t = 0; t < 4; t++) 217 | { 218 | var track = trackBank.getTrack(t); 219 | var clipLauncher = track.getClipLauncher(); 220 | clipLauncher.setIndication(true); 221 | 222 | clipLauncher.addHasContentObserver(getGridObserverFunc(t, hasContent)); 223 | clipLauncher.addIsPlayingObserver(getGridObserverFunc(t, isPlaying)); 224 | clipLauncher.addIsRecordingObserver(getGridObserverFunc(t, isRecording)); 225 | clipLauncher.addIsQueuedObserver(getGridObserverFunc(t, isQueued)); 226 | { 227 | 228 | }; 229 | 230 | 231 | 232 | } 233 | 234 | 235 | 236 | } 237 | 238 | 239 | 240 | devicePage.updateIndications(); 241 | 242 | if (initialize == 0){ 243 | padLED(); 244 | initialize = 1 245 | } 246 | padPage = notePage 247 | } 248 | /////Functions! 249 | 250 | 251 | function makeIndexedFunction(index, f) 252 | { 253 | return function(value) 254 | { 255 | f[index] = value; 256 | }; 257 | } 258 | 259 | function getGridObserverFunc(track, varToStore) 260 | { 261 | return function(scene, value) 262 | { 263 | varToStore[scene*4 + track] = value; 264 | if (padPage == clipPage){ 265 | clipLED(); 266 | } 267 | } 268 | } 269 | 270 | var devicePage = new Object{}; 271 | 272 | devicePage.updateIndications = function() 273 | { 274 | for ( var p = 0; p < 8; p++) 275 | { 276 | macro = primaryDevice.getMacro(p).getAmount(); 277 | parameter = primaryDevice.getParameter(p); 278 | track = trackBank.getTrack(p); 279 | //parameter.setIndication(false);///Tells Bitwig to delete previous color association. 280 | parameter.setIndication(true);///Tells BitWig to associate the color with the parameters. 281 | macro.setIndication(true); 282 | //track.getVolume().setIndication(false); 283 | //track.getPan().setIndication(false); 284 | } 285 | } 286 | 287 | 288 | function onMidi(status, data1, data2) 289 | { 290 | 291 | //printMidi(status, data1, data2) 292 | 293 | if (isChannelController(status)) 294 | { 295 | if (data1 <= 8) 296 | { 297 | if (activePage == parameterPage) 298 | { 299 | paramControl(data1, data2) 300 | } 301 | if (activePage == macroPage) 302 | { 303 | macroControl(data1,data2) 304 | } 305 | }else if (data1 > 8 && data1 < 11) 306 | { if (data1 == 9) 307 | { 308 | cursorTrack.getSend(0).set((data2 + 64) % 128,128); 309 | }else 310 | { 311 | cursorTrack.getSend(1).set((data2 + 64) % 128, 128); 312 | } 313 | }else if (data1 == 11){ 314 | master.getVolume().set(data2, 128) 315 | } 316 | 317 | if (data1 >= LOWEST_CC && data1 <= HIGHEST_CC) 318 | { 319 | var index = data1 - LOWEST_CC; 320 | userControls.getControl(index).set(data2, 128); 321 | } 322 | 323 | }else{ 324 | 325 | rootOffsetIndex(data1, data2) 326 | scaleTypeScroll(data1, data2); 327 | scaleIndexScroll(data1, data2); 328 | transportControl(status, data1, data2); 329 | parameterSelect(data1, data2); 330 | trackSelect(data1, data2); 331 | pageSelect(data1, data2); 332 | clipLaunching(data1, data2) 333 | clipScroll(data1, data2) 334 | 335 | if (modeSelect == true && data1 < 8) 336 | { 337 | 338 | padPage = notePage 339 | 340 | }else if (modeSelect == true && data1 > 7 && data1 < 16 ) 341 | { 342 | padPage = clipPage 343 | 344 | } 345 | 346 | 347 | if (data1 == 32 && data2 == 127) 348 | { 349 | println(padPage) 350 | noteIn.setKeyTranslationTable(noteOffTable) 351 | for (var i = 0; i < 32; i ++) 352 | { 353 | sendMidi(144, i, 0); //clear all Pads 354 | } 355 | for (var i = 0; i < 16; i +=2 ) 356 | { 357 | sendMidi(144, i, 127) 358 | } 359 | for (var i = 17; i < 32; i +=2 ) 360 | { 361 | sendMidi(144, i, 127) 362 | } 363 | 364 | modeSelect = true; 365 | 366 | 367 | //println(modeSelect) 368 | } 369 | 370 | 371 | if (data1 == 32 && data2 == 0) 372 | { 373 | for (var i = 0; i < 32; i ++) 374 | { 375 | sendMidi(144, i, 0); //clear all Pads 376 | } 377 | modeSelect = false 378 | if (padPage == notePage) 379 | { 380 | padLED(); 381 | noteIn.setKeyTranslationTable(translationTable); 382 | }else if(padPage == clipPage) 383 | { 384 | 385 | clipLED(); 386 | for (i = 0; i <16 ;i ++){ 387 | sendClipLEDs(i) 388 | } 389 | noteIn.setKeyTranslationTable(noteOffTable); 390 | } 391 | 392 | } 393 | 394 | } 395 | 396 | } 397 | 398 | function onSysex(data) 399 | { 400 | if (String(data) == "f07e00060300015f1e0000001e12000ff7") 401 | { 402 | 403 | sendMidi(144, 36, 127); 404 | sendMidi(144, 37, 127); 405 | sendMidi(144, 38, 127); 406 | sendMidi(144, 39, 127); 407 | sendMidi(144, 42, 127); 408 | sendMidi(144, 43, 127); 409 | if (padPage == notePage) 410 | { 411 | padLED(); 412 | 413 | } 414 | 415 | if(padPage == clipPage) 416 | { 417 | clipLED(); 418 | for (i = 0; i <16 ;i ++){ 419 | sendClipLEDs(i) 420 | } 421 | } 422 | 423 | if (activePage == parameterPage){ 424 | host.scheduleTask(function() 425 | {restoreParameters() 426 | },null,30) 427 | } 428 | if (activePage == macroPage){ 429 | host.scheduleTask(function() 430 | {restoreMacros() 431 | },null,30) 432 | } 433 | sendMidi(176, 5, masterValue) 434 | restoreTransport() 435 | restoreSends() 436 | } 437 | 438 | } 439 | 440 | 441 | 442 | function exit() 443 | { 444 | for (var i = 0; i < 32; i ++) 445 | { 446 | sendMidi(144, i, 0); //clear all Pads 447 | } 448 | 449 | } 450 | 451 | -------------------------------------------------------------------------------- /QUNEO/QUNEO_Script/QUNEO.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Bitwig Studio | KMI QuNeo 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 24 |
25 | QUNEO 26 |
27 |
28 |
29 |
NOTE INPUTS
30 |
31 |

The Note Input section is used to (you guessed it!) input notes into BitWigs built in instruments or VSTs on an midi or hybrid track.

32 |

On load the QuNeo will display the major scale, orange pads indicate the root, and green pads indicate notes in the key. scrolling up using the bottom right arrows will then display a minor scale, followed by major and minor in key modes. Orange still indicates roots. You can change your root note with the pair of arrows second from the top on the left.

33 |
34 |
35 |

You can scroll the playable notes by using the arrows on the bottom left. While in normal scale display, the pattern will shift by one row, making the roots appear in different places on the grid. While using in key scales, the notes will shift by an octave, maintaining the same display regardless of position.

36 |

To Change to Clip Launching Mode, hold the rhombus button. The grid will split in half, and hitting any pad in the top half (red) will switch to clip launching mode, and hitting any pad in the lower half (green) will switch back to Note input. While in this mode the two pair of arrows next to the long slider will move around the clip launcher. The left pair will scroll vertically and the right pair will scroll horizontally.

37 | 38 |
39 |
40 |
41 |
PARAMETER/MACRO sliders
42 |
43 |

The sliders on the QuNeo automatically map to the primary device in the selected track. You can navigate through your sessions track using the top pair of the arrows on the left. You can select whether you want to grab the parameter pages, or the macros, using the third pair of arrows on the left. When in parameter mode, you can scroll through the eight parameter pages using the bottom pair of arrows.

44 |

The two rotaries control the send amount for the selected track.

45 |
46 |
47 |
48 |
TRANSPORT
49 |
50 |

The transport section is pretty self explanatory. These buttons are used to play, stop, and record arm your session

51 |

The long slider on the bottom is a Master Volume Control.

52 | 53 |
54 |
55 | 61 |
62 | 63 | 64 | -------------------------------------------------------------------------------- /QUNEO/QUNEO_Script/QUNEO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataf1ow/KMI_Bitwig_Scripts/ea709ada6dafe49fcb4e516ceb5e4a0472be687e/QUNEO/QUNEO_Script/QUNEO.png -------------------------------------------------------------------------------- /QUNEO/QUNEO_Script/QUNEO_clips.js: -------------------------------------------------------------------------------- 1 | //Clip Launching Mode 2 | 3 | function GREEN(pad){ 4 | sendMidi(144, pad * 2, 127) 5 | sendMidi(144, pad * 2 + 1, 0) 6 | } 7 | 8 | function RED(pad){ 9 | sendMidi(144, pad * 2, 0) 10 | sendMidi(144, pad * 2 + 1, 127) 11 | } 12 | 13 | function YELLOW1(pad){ 14 | sendMidi(144, pad * 2, 50) 15 | sendMidi(144, pad * 2 + 1, 5) 16 | } 17 | 18 | function OFF(pad){ 19 | sendMidi(144, pad * 2, 0) 20 | sendMidi(144, pad * 2 + 1, 0) 21 | } 22 | 23 | function clipLED() 24 | { 25 | contentLED(); 26 | playingLED(); 27 | recordingLED(); 28 | clipUpdate(); 29 | 30 | } 31 | 32 | 33 | function clipScroll(data1, data2) 34 | { 35 | if (padPage == clipPage){ 36 | if(data1 == 25 && data2 == 127){ 37 | trackBank.scrollScenesUp() 38 | 39 | }else if(data1 == 26 && data2 == 127){ 40 | trackBank.scrollScenesDown() 41 | 42 | }else if(data1 == 28 && data2 == 127){ 43 | trackBank.scrollTracksDown() 44 | 45 | } else if(data1 == 27 && data2 == 127){ 46 | trackBank.scrollTracksUp() 47 | 48 | } 49 | } 50 | 51 | 52 | 53 | 54 | 55 | } 56 | 57 | 58 | 59 | 60 | function clipLaunching(data1, data2) 61 | { 62 | if (padPage == clipPage && modeSelect == false){ 63 | if((data1 % 4 == 0) && (data2 > 0)){ 64 | trackBank.getTrack(0).getClipLauncher().launch(3 - (data1/4)) 65 | }else if ((data1 % 4 == 1) && (data2 > 0)){ 66 | trackBank.getTrack(1).getClipLauncher().launch(3 - ((data1 - 1)/4)) 67 | }else if ((data1 % 4 == 2) && (data2 > 0)){ 68 | trackBank.getTrack(2).getClipLauncher().launch(3 - ((data1 - 2)/4)) 69 | }else if ((data1 % 4 == 3) && (data2 > 0)){ 70 | trackBank.getTrack(3).getClipLauncher().launch(3 - ((data1 - 3)/4)) 71 | } 72 | 73 | 74 | 75 | } 76 | 77 | 78 | } 79 | 80 | function contentLED() 81 | { 82 | for(i = 0; i < 16; i++){ 83 | if (hasContent[i] == true){ 84 | pendingLEDs[i] = 1 85 | }else if (hasContent[i] == false){ 86 | pendingLEDs[i] = 0 87 | } 88 | } 89 | 90 | } 91 | 92 | 93 | function playingLED() 94 | { 95 | for(i = 0; i < 16; i++){ 96 | if (isPlaying[i] == true){ 97 | pendingLEDs[i] = 2 98 | } 99 | } 100 | } 101 | 102 | function recordingLED() 103 | { 104 | for (i = 0 ; i <16; i ++){ 105 | if (isRecording[i] == true){ 106 | pendingLEDs[i] = 3 107 | } 108 | } 109 | 110 | } 111 | 112 | 113 | function clipUpdate() 114 | { 115 | for(i = 0; i < 16; i ++){ 116 | if (pendingLEDs[i] != currentLEDs[i]){ 117 | currentLEDs[i] = pendingLEDs[i] 118 | sendClipLEDs(i) 119 | 120 | } 121 | 122 | 123 | 124 | } 125 | 126 | } 127 | 128 | function sendClipLEDs(index){ 129 | switch(index){ 130 | case 0: 131 | if(currentLEDs[index] == 0){ 132 | OFF(12) 133 | 134 | }else if (currentLEDs[index] == 1){ 135 | YELLOW1(12) 136 | 137 | }else if (currentLEDs[index] == 2){ 138 | GREEN(12) 139 | }else if (currentLEDs[index] == 3){ 140 | RED(12) 141 | } 142 | break; 143 | case 1: 144 | if(currentLEDs[index] == 0){ 145 | OFF(13) 146 | 147 | }else if (currentLEDs[index] == 1){ 148 | YELLOW1(13) 149 | 150 | }else if (currentLEDs[index] == 2){ 151 | GREEN(13) 152 | }else if (currentLEDs[index] == 3){ 153 | RED(13) 154 | } 155 | break; 156 | case 2: 157 | if(currentLEDs[index] == 0){ 158 | OFF(14) 159 | 160 | }else if (currentLEDs[index] == 1){ 161 | YELLOW1(14) 162 | 163 | }else if (currentLEDs[index] == 2){ 164 | GREEN(14) 165 | }else if (currentLEDs[index] == 3){ 166 | RED(14) 167 | } 168 | break; 169 | case 3: 170 | if(currentLEDs[index] == 0){ 171 | OFF(15) 172 | 173 | }else if (currentLEDs[index] == 1){ 174 | YELLOW1(15) 175 | 176 | }else if (currentLEDs[index] == 2){ 177 | GREEN(15) 178 | 179 | }else if (currentLEDs[index] == 3){ 180 | RED(15) 181 | } 182 | break; 183 | case 4: 184 | if(currentLEDs[index] == 0){ 185 | OFF(8) 186 | 187 | }else if (currentLEDs[index] == 1){ 188 | YELLOW1(8) 189 | 190 | }else if (currentLEDs[index] == 2){ 191 | GREEN(8) 192 | 193 | }else if (currentLEDs[index] == 3){ 194 | RED(8) 195 | } 196 | break; 197 | case 5: 198 | if(currentLEDs[index] == 0){ 199 | OFF(9) 200 | 201 | }else if (currentLEDs[index] == 1){ 202 | YELLOW1(9) 203 | 204 | }else if (currentLEDs[index] == 2){ 205 | GREEN(9) 206 | 207 | }else if (currentLEDs[index] == 3){ 208 | RED(9) 209 | } 210 | break; 211 | case 6: 212 | if(currentLEDs[index] == 0){ 213 | OFF(10) 214 | 215 | }else if (currentLEDs[index] == 1){ 216 | YELLOW1(10) 217 | 218 | }else if (currentLEDs[index] == 2){ 219 | GREEN(10) 220 | 221 | }else if (currentLEDs[index] == 3){ 222 | RED(10) 223 | } 224 | break; 225 | case 7: 226 | if(currentLEDs[index] == 0){ 227 | OFF(11) 228 | 229 | }else if (currentLEDs[index] == 1){ 230 | YELLOW1(11) 231 | 232 | }else if (currentLEDs[index] == 2){ 233 | GREEN(11) 234 | 235 | }else if (currentLEDs[index] == 3){ 236 | RED(11) 237 | } 238 | break; 239 | case 8: 240 | if(currentLEDs[index] == 0){ 241 | OFF(4) 242 | 243 | }else if (currentLEDs[index] == 1){ 244 | YELLOW1(4) 245 | 246 | }else if (currentLEDs[index] == 2){ 247 | GREEN(4) 248 | 249 | }else if (currentLEDs[index] == 3){ 250 | RED(4) 251 | } 252 | break; 253 | case 9: 254 | if(currentLEDs[index] == 0){ 255 | OFF(5) 256 | 257 | }else if (currentLEDs[index] == 1){ 258 | YELLOW1(5) 259 | 260 | }else if (currentLEDs[index] == 2){ 261 | GREEN(5) 262 | 263 | }else if (currentLEDs[index] == 3){ 264 | RED(5) 265 | } 266 | break; 267 | case 10: 268 | if(currentLEDs[index] == 0){ 269 | OFF(6) 270 | 271 | }else if (currentLEDs[index] == 1){ 272 | YELLOW1(6) 273 | 274 | }else if (currentLEDs[index] == 2){ 275 | GREEN(6) 276 | 277 | }else if (currentLEDs[index] == 3){ 278 | RED(6) 279 | } 280 | break; 281 | case 11: 282 | if(currentLEDs[index] == 0){ 283 | OFF(7) 284 | 285 | }else if (currentLEDs[index] == 1){ 286 | YELLOW1(7) 287 | 288 | }else if (currentLEDs[index] == 2){ 289 | GREEN(7) 290 | 291 | }else if (currentLEDs[index] == 3){ 292 | RED(7) 293 | } 294 | break; 295 | case 12: 296 | if(currentLEDs[index] == 0){ 297 | OFF(0) 298 | 299 | }else if (currentLEDs[index] == 1){ 300 | YELLOW1(0) 301 | 302 | }else if (currentLEDs[index] == 2){ 303 | GREEN(0) 304 | 305 | }else if (currentLEDs[index] == 3){ 306 | RED(0) 307 | } 308 | break; 309 | case 13: 310 | if(currentLEDs[index] == 0){ 311 | OFF(1) 312 | 313 | }else if (currentLEDs[index] == 1){ 314 | YELLOW1(1) 315 | 316 | }else if (currentLEDs[index] == 2){ 317 | GREEN(1) 318 | 319 | }else if (currentLEDs[index] == 3){ 320 | RED(1) 321 | } 322 | break; 323 | case 14: 324 | if(currentLEDs[index] == 0){ 325 | OFF(2) 326 | 327 | }else if (currentLEDs[index] == 1){ 328 | YELLOW1(2) 329 | 330 | }else if (currentLEDs[index] == 2){ 331 | GREEN(2) 332 | 333 | }else if (currentLEDs[index] == 3){ 334 | RED(2) 335 | } 336 | break; 337 | case 15: 338 | if(currentLEDs[index] == 0){ 339 | OFF(3) 340 | 341 | }else if (currentLEDs[index] == 1){ 342 | YELLOW1(3) 343 | 344 | }else if (currentLEDs[index] == 2){ 345 | GREEN(3) 346 | 347 | }else if (currentLEDs[index] == 3){ 348 | RED(3) 349 | } 350 | break; 351 | } 352 | 353 | 354 | 355 | 356 | } 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | -------------------------------------------------------------------------------- /QUNEO/QUNEO_Script/QUNEO_functions.js: -------------------------------------------------------------------------------- 1 | function transportControl(status, data1, data2){ 2 | if (data1 == 29 && data2 == 127){ 3 | transport.record(); 4 | }else if (data1 == 30 && data2 == 127){ 5 | transport.stop(); 6 | }else if (data1 == 31 && data2 == 127){ 7 | transport.play(); 8 | } 9 | }; 10 | 11 | function restoreTransport() 12 | { 13 | if (transportPlay) 14 | { 15 | sendMidi(144, 35, 127); 16 | sendMidi(144, 34, 0); 17 | 18 | }else 19 | { 20 | sendMidi(144, 35, 0); 21 | sendMidi(144, 34, 127) 22 | 23 | } 24 | 25 | if (transportRec) 26 | { 27 | sendMidi(144, 33, 127); 28 | }else 29 | { 30 | sendMidi(144, 33, 0); 31 | } 32 | } 33 | 34 | function restoreMaster() 35 | { 36 | 37 | } 38 | 39 | function restoreSends() 40 | { 41 | sendMidi(176, 6, sendValues[0]); 42 | sendMidi(176, 7, sendValues[1]); 43 | } 44 | 45 | function playObserver(on) 46 | { 47 | transportPlay = on; 48 | if (on == true){ 49 | sendMidi(144, 35, 127); 50 | sendMidi(144, 34, 0); 51 | }else{ 52 | sendMidi(144, 35, 0); 53 | sendMidi(144, 34, 127) 54 | } 55 | }; 56 | 57 | function recObserver(on) 58 | { 59 | transportRec = on; 60 | if (on == true){ 61 | sendMidi(144, 33, 127); 62 | }else{ 63 | sendMidi(144, 33, 0); 64 | } 65 | }; 66 | 67 | function trackSelect(data1, data2) 68 | { 69 | if(data1 == 19 && data2 != 0) 70 | { 71 | trackHasChanged = 1; 72 | parameterHasChanged = 0; 73 | cursorTrack.selectPrevious(); 74 | 75 | if (trackName == "Master") 76 | { 77 | sendMidi(144, 37, 0) 78 | }else{ 79 | sendMidi(144,37,127) 80 | } 81 | 82 | } else if(data1 == 20 && data2 != 0) 83 | { 84 | trackHasChanged = 1; 85 | parameterHasChanged = 0; 86 | cursorTrack.selectNext(); 87 | 88 | if (trackName == "Master") 89 | { 90 | sendMidi(144, 37, 0) 91 | }else{ 92 | sendMidi(144,37,127) 93 | } 94 | 95 | } 96 | } 97 | 98 | 99 | 100 | 101 | 102 | 103 | function parameterSelect(data1, data2) 104 | { 105 | if (activePage == parameterPage){ 106 | if(data1 == 18 && data2 != 0) 107 | { 108 | parameterHasChanged = 1; 109 | for ( var p = 0; p < 8; p++) 110 | { 111 | 112 | parameter = primaryDevice.getParameter(p); 113 | track = trackBank.getTrack(p); 114 | parameter.setIndication(false);///Tells Bitwig to delete previous color association. 115 | 116 | } 117 | primaryDevice.nextParameterPage(); 118 | devicePage.updateIndications(); 119 | if (pageNames[paramPage] == undefined){ 120 | parameterHasChanged = 0; 121 | } 122 | 123 | }else if(data1 == 17 && data2 != 0) 124 | { 125 | parameterHasChanged = 1; 126 | primaryDevice.previousParameterPage(); 127 | devicePage.updateIndications(); 128 | if (pageNames[paramPage] == undefined){ 129 | parameterHasChanged = 0; 130 | } 131 | 132 | } 133 | } 134 | }; 135 | 136 | function paramControl(data1, data2) 137 | { 138 | primaryDevice.getParameter(data1 - 1).set(data2,128); 139 | }; 140 | 141 | function macroControl(data1, data2) 142 | { 143 | primaryDevice.getMacro(data1 - 1).getAmount().set(data2,128); 144 | }; 145 | 146 | function paramLED(index, value) 147 | { 148 | if(activePage == parameterPage) 149 | { 150 | if (index == 0) 151 | { sendMidi(176, 1, value) 152 | 153 | }else if (index == 1) 154 | { 155 | sendMidi(176, 2, value) 156 | 157 | }else if (index == 2) 158 | { 159 | sendMidi(176, 3, value) 160 | 161 | }else if (index == 3) 162 | { 163 | sendMidi(176, 4, value) 164 | 165 | }else if (index == 4) 166 | { 167 | sendMidi(176, 8, value) 168 | 169 | }else if (index == 5) 170 | { 171 | sendMidi(176, 9, value) 172 | 173 | }else if (index == 6) 174 | { 175 | sendMidi(176, 10, value) 176 | 177 | }else if (index == 7) 178 | { 179 | sendMidi(176,11, value) 180 | } 181 | } 182 | } 183 | 184 | function macroLED(index, value) 185 | { 186 | if (activePage == macroPage) 187 | { 188 | if (index == 0) 189 | { sendMidi(176, 1, value) 190 | 191 | }else if (index == 1) 192 | { 193 | sendMidi(176, 2, value) 194 | 195 | }else if (index == 2) 196 | { 197 | sendMidi(176, 3, value) 198 | 199 | }else if (index == 3) 200 | { 201 | sendMidi(176, 4, value) 202 | 203 | }else if (index == 4) 204 | { 205 | sendMidi(176, 8, value) 206 | 207 | }else if (index == 5) 208 | { 209 | sendMidi(176, 9, value) 210 | 211 | }else if (index == 6) 212 | { 213 | sendMidi(176, 10, value) 214 | 215 | }else if (index == 7) 216 | { 217 | sendMidi(176,11, value) 218 | } 219 | } 220 | } 221 | 222 | function pageSelect(data1, data2) 223 | { 224 | if (data1 == 23) 225 | { 226 | 227 | activePage = parameterPage 228 | for (var p = 1; p < 5; p ++) 229 | for (var p = 8; p < 12; p ++) 230 | { 231 | sendMidi(176, p, 0) 232 | } 233 | restoreParameters(); 234 | host.showPopupNotification("Parameter Page"); 235 | 236 | 237 | sendMidi(144, 40, 127) 238 | sendMidi(144, 41, 0) 239 | sendMidi(144, 42, 127) 240 | sendMidi(144, 43, 127) 241 | 242 | 243 | 244 | }else if (data1 == 24) 245 | { 246 | activePage = macroPage 247 | for (var p = 1; p < 5; p ++) 248 | for (var p = 8; p < 12; p ++) 249 | { 250 | sendMidi(176, p, 0) 251 | } 252 | restoreMacros(); 253 | host.showPopupNotification("Macro Page"); 254 | sendMidi(144, 40, 0) 255 | sendMidi(144, 41, 127) 256 | sendMidi(144, 42, 0) 257 | sendMidi(144, 43, 0) 258 | } 259 | 260 | 261 | 262 | 263 | }; 264 | 265 | function restoreParameters() 266 | { 267 | sendMidi(176, 1, paramValues[0]); 268 | sendMidi(176, 2, paramValues[1]); 269 | sendMidi(176, 3, paramValues[2]); 270 | sendMidi(176, 4, paramValues[3]); 271 | sendMidi(176, 8, paramValues[4]); 272 | sendMidi(176, 9, paramValues[5]); 273 | sendMidi(176, 10, paramValues[6]); 274 | sendMidi(176, 11, paramValues[7]); 275 | } 276 | 277 | function restoreMacros() 278 | { 279 | sendMidi(176, 1, macroValues[0]); 280 | sendMidi(176, 2, macroValues[1]); 281 | sendMidi(176, 3, macroValues[2]); 282 | sendMidi(176, 4, macroValues[3]); 283 | sendMidi(176, 8, macroValues[4]); 284 | sendMidi(176, 9, macroValues[5]); 285 | sendMidi(176, 10, macroValues[6]); 286 | sendMidi(176, 11, macroValues[7]); 287 | } -------------------------------------------------------------------------------- /QUNEO/QUNEO_Script/QUNEO_notes.js: -------------------------------------------------------------------------------- 1 | //Notes 2 | 3 | 4 | var majorScaleOne = [0, 2, 4, 5, 7, 9, 11, 12, 14]; 5 | var majorScaleTwo = [0, 1, 3, 5, 7, 8, 10, 12, 13, 15]; 6 | var majorScaleThree = [1, 3, 4, 6, 8, 9, 11, 13, 15]; 7 | 8 | var minorScaleOne = [0, 2, 3, 5, 7, 8, 10, 12, 14, 15]; 9 | var minorScaleTwo = [1, 3, 4, 6, 8, 10, 11, 13, 15]; 10 | var minorScaleThree = [0, 2, 4, 6, 7, 9, 11, 12, 14]; 11 | 12 | var majorScaleInKey = [0, 2, 4, 5, 7, 9, 11, 12, 14, 16, 17, 19, 21, 23, 24, 26] 13 | var minorScaleInKey = [0, 2, 3, 5, 7, 8, 10, 12, 14, 15, 17, 19, 20, 22, 24, 26] 14 | var scaleInKey = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 15 | 16 | var majorScales = 17 | { 18 | one: majorScaleOne, 19 | two: majorScaleTwo, 20 | three: majorScaleThree, 21 | }; 22 | 23 | var minorScales = 24 | { 25 | one: minorScaleOne, 26 | two: minorScaleTwo, 27 | three: minorScaleThree, 28 | }; 29 | 30 | var scaleName = ["Major", "Minor", "Major In Key", "Minor In Key"]; 31 | var scaleTypeIndex = 0 32 | var scaleLength = 9; 33 | var scale = majorScales.one; 34 | var GREEN_LEDS = [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30]; 35 | var RED_LEDS = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31]; 36 | var scaleRoot = (scaleIndex % 3) * 4; 37 | var scaleIndex = 9; 38 | var scaleIndexInKey = 3; 39 | var rootOffset = 60; 40 | var roots = ["C", "C#/Db", "D", "D#/Eb", "E","F", "F#/Gb", "G", "G#/Ab", "A", "A#/Bb", "B"]; 41 | 42 | function scaleScroll(){ 43 | if (scaleTypeIndex == 0) 44 | { 45 | if (scaleIndex % 3 == 0) 46 | { 47 | scale = majorScales.one 48 | }else if(scaleIndex % 3 == 1) 49 | { 50 | scale = majorScales.two 51 | }else if(scaleIndex % 3 == 2) 52 | { 53 | scale = majorScales.three 54 | } 55 | scaleLength = scale.length 56 | }else if (scaleTypeIndex == 1) 57 | { 58 | if (scaleIndex % 3 == 0) 59 | { 60 | scale = minorScales.one 61 | }else if(scaleIndex % 3 == 1) 62 | { 63 | scale = minorScales.two 64 | }else if(scaleIndex % 3 == 2) 65 | { 66 | scale = minorScales.three 67 | } 68 | scaleLength = scale.length 69 | }else if (scaleTypeIndex > 1) 70 | { 71 | 72 | scale = scaleInKey 73 | 74 | } 75 | } 76 | 77 | 78 | function octaveNotification() 79 | { 80 | switch (scaleIndex / 3) 81 | { 82 | case 0: 83 | host.showPopupNotification("Octave -2") 84 | break; 85 | 86 | case 1: 87 | host.showPopupNotification("Octave -1") 88 | break; 89 | 90 | case 2: 91 | host.showPopupNotification("Octave 0") 92 | break; 93 | 94 | case 3: 95 | host.showPopupNotification("Octave 1") 96 | break; 97 | 98 | case 4: 99 | host.showPopupNotification("Octave 2") 100 | break; 101 | 102 | case 5: 103 | host.showPopupNotification("Octave 3") 104 | break; 105 | 106 | case 6: 107 | host.showPopupNotification("Octave 4") 108 | break; 109 | 110 | case 7: 111 | host.showPopupNotification("Octave 5") 112 | break; 113 | 114 | case 8: 115 | host.showPopupNotification("Octave 6") 116 | break; 117 | 118 | case 9: 119 | host.showPopupNotification("Octave 7") 120 | break; 121 | 122 | case 10: 123 | host.showPopupNotification("Octave 8") 124 | break; 125 | } 126 | }; 127 | 128 | function padLED () 129 | { 130 | for (var i = 0; i < 32; i ++) 131 | { 132 | sendMidi(144, i, 0); //clear all Pads 133 | }; 134 | 135 | 136 | if (scaleTypeIndex == 0 || scaleTypeIndex == 1) 137 | { 138 | scaleScroll(); 139 | for (var i = 0 ; i < scale.length ; i++) 140 | { 141 | sendMidi(144 , GREEN_LEDS[scale[i]], 127) 142 | if (scaleIndex % 3 == 0) 143 | { 144 | if ( i % 7 == 0) 145 | { 146 | sendMidi(144 , (RED_LEDS[scale[i]]), 80) 147 | } 148 | }else if (scaleIndex %3 == 1) 149 | { 150 | if (scaleTypeIndex == 0) 151 | {sendMidi(144 , (RED_LEDS[scale[5]]), 80) 152 | }else if (scaleTypeIndex == 1) 153 | {sendMidi(144 , (RED_LEDS[scale[4]]), 80)} 154 | }else if (scaleIndex % 3 == 2) 155 | { 156 | sendMidi(144 , (RED_LEDS[scale[2]]), 80) 157 | } 158 | } 159 | }else if (scaleTypeIndex == 2 || scaleTypeIndex == 3) 160 | { 161 | for (var i = 0; i < 16; i++) 162 | { 163 | sendMidi(144, GREEN_LEDS[i], 127) 164 | if(i % 7 == 0) 165 | { 166 | sendMidi(144, RED_LEDS[i], 127) 167 | } 168 | } 169 | } 170 | } 171 | 172 | function scaleIndexScroll(data1, data2) 173 | { 174 | if (padPage == notePage) 175 | { 176 | if (scaleTypeIndex == 0 || scaleTypeIndex == 1) 177 | { 178 | if (data1 == 25 && data2 == 127) 179 | { 180 | if (scaleIndex == 32){ 181 | scaleIndex == 32 182 | }else{ 183 | scaleIndex ++; 184 | } 185 | padLED(); 186 | updateTranslationTable(); 187 | octaveNotification(); 188 | } 189 | 190 | if (data1 == 26 && data2 == 127) 191 | { 192 | if (scaleIndex == 0){ 193 | scaleIndex == 0 194 | }else{ 195 | scaleIndex --; 196 | } 197 | padLED(); 198 | updateTranslationTable(); 199 | octaveNotification(); 200 | 201 | } 202 | 203 | 204 | }else if (scaleTypeIndex == 2 || scaleTypeIndex == 3) 205 | { 206 | if (data1 == 25 && data2 == 127) 207 | { 208 | if (scaleIndex >= 30){ 209 | scaleIndex == 30 210 | }else{ 211 | scaleIndex += 3; 212 | } 213 | 214 | updateTranslationTable(); 215 | octaveNotification(); 216 | 217 | } 218 | 219 | if (data1 == 26 && data2 == 127) 220 | { 221 | if (scaleIndex == 0){ 222 | scaleIndex == 0 223 | }else{ 224 | scaleIndex -= 3; 225 | } 226 | 227 | updateTranslationTable(); 228 | octaveNotification(); 229 | } 230 | 231 | } 232 | } 233 | } 234 | 235 | function scaleNotifications (){ 236 | if (scaleTypeIndex == 0) 237 | { 238 | host.showPopupNotification("Major") 239 | }else if (scaleTypeIndex == 1) 240 | { 241 | host.showPopupNotification("Minor") 242 | }else if (scaleTypeIndex == 2) 243 | { 244 | host.showPopupNotification("Major In Key") 245 | }else if (scaleTypeIndex == 3) 246 | host.showPopupNotification("Minor In Key") 247 | } 248 | 249 | function scaleTypeScroll(data1, data2) 250 | { 251 | if (padPage == notePage) 252 | { 253 | if (data1 == 27 && data2 == 127) 254 | { 255 | if (scaleTypeIndex == 3) 256 | {scaleTypeIndex = 3 257 | }else 258 | { 259 | scaleTypeIndex ++; 260 | } 261 | 262 | padLED(); 263 | scaleNotifications(); 264 | if (scaleTypeIndex > 1) 265 | updateTranslationTable(); 266 | 267 | 268 | } 269 | 270 | if (data1 == 28 && data2 ==127) 271 | { 272 | if (scaleTypeIndex == 0) 273 | {scaleTypeIndex = 0 274 | }else 275 | { 276 | scaleTypeIndex --; 277 | } 278 | 279 | padLED(); 280 | scaleNotifications(); 281 | updateTranslationTable(); 282 | } 283 | } 284 | } 285 | 286 | 287 | function updateTranslationTable () 288 | { 289 | if (scaleTypeIndex < 2) 290 | { 291 | 292 | for (var i = 0; i < 127; i ++) 293 | { 294 | var offset = (i + scaleIndex * 4) + (rootOffset % 12); 295 | if (offset >= 127) 296 | { 297 | offset = 127 298 | } 299 | 300 | translationTable[i] = offset; 301 | } 302 | }else 303 | { 304 | if (scaleTypeIndex > 1) 305 | { 306 | 307 | if (scaleIndex % 3 == 0) 308 | { 309 | scaleIndex = scaleIndex; 310 | }else if(scaleIndex % 3 == 1) 311 | { 312 | scaleIndex = (scaleIndex - 1); 313 | }else if(scaleIndex % 3 == 2) 314 | { 315 | scaleIndex = (scaleIndex + 1); 316 | } 317 | } 318 | } 319 | 320 | if (scaleTypeIndex == 2) 321 | { 322 | for (var i = 0; i < 16; i ++) 323 | { 324 | var offset = (majorScaleInKey[i] + scaleIndex * 4) + (rootOffset % 12); 325 | if (offset >= 127) 326 | { 327 | offset = 127 328 | } 329 | translationTable[i] = offset; 330 | } 331 | }else if (scaleTypeIndex == 3) 332 | { 333 | for (var i = 0; i < 127; i ++) 334 | { 335 | var offset = (minorScaleInKey[i] + scaleIndex * 4) + (rootOffset % 12); 336 | if (offset >= 127) 337 | { 338 | offset = 127 339 | } 340 | translationTable[i] = offset; 341 | 342 | } 343 | 344 | } 345 | noteIn.setKeyTranslationTable(translationTable); 346 | //noteIn.setShouldConsumeEvents(true); 347 | 348 | } 349 | 350 | 351 | function rootOffsetIndex(data1, data2) 352 | { 353 | if (data1 == 22 && data2 == 127) 354 | { 355 | rootOffset ++ ; 356 | host.showPopupNotification("Root = " + roots[rootOffset % 12]) 357 | updateTranslationTable(); 358 | 359 | }else if (data1 == 21 && data2 == 127) 360 | { 361 | rootOffset -- ; 362 | host.showPopupNotification("Root = " + roots[rootOffset % 12]) 363 | updateTranslationTable(); 364 | } 365 | } 366 | 367 | 368 | 369 | 370 | -------------------------------------------------------------------------------- /QUNEO/QUNEO_Script/QUNEO_pages.js: -------------------------------------------------------------------------------- 1 | function Page() 2 | { 3 | 4 | } 5 | 6 | var parameterPage = new Page(); 7 | var macroPage = new Page(); 8 | var userPage = new Page(); 9 | var notePage = new Page(); 10 | var clipPage = new Page(); 11 | var pageIndex = 0 12 | 13 | function standardVelocity () 14 | { 15 | for (var i = 0 ; i < 128; i ++) 16 | { 17 | velocityTable[i] = i 18 | noteIn.setVelocityTranslationTable(velocityTable); 19 | } 20 | } 21 | 22 | function zeroVeloicty () 23 | { 24 | for (var i = 0; i < 128; i ++) 25 | { 26 | velocityTable[i] = 0 27 | noteIn.setVelocityTranslationTable(velocityTable); 28 | } 29 | } -------------------------------------------------------------------------------- /QUNEO/QUNEO_Script/QUNEO_parameterPage.js: -------------------------------------------------------------------------------- 1 | 2 | var parameterPage = new Page(); -------------------------------------------------------------------------------- /QUNEO/QUNEO_Script/bitwig.css: -------------------------------------------------------------------------------- 1 | #page-container { 2 | width: 100%; 3 | margin: 0; 4 | } 5 | 6 | #header { 7 | height: 43px; 8 | padding-left: 20px; 9 | padding-right: 20px; 10 | color: white; 11 | background: #000000; 12 | } 13 | 14 | #footer { 15 | clear: both; 16 | height: 30px; 17 | margin-top: 30px; 18 | padding-top: 3px; 19 | margin-left: 20px; 20 | margin-right: 20px; 21 | border-top: 1px solid #000000; 22 | font: 10px "Lucida Grande", Lucida, Verdana, sans-serif; 23 | color: #505050; 24 | } 25 | 26 | #footer a { 27 | color: #505050; 28 | text-decoration: none; 29 | } 30 | 31 | #illustration { 32 | margin-top: 5px; 33 | margin-left: 0px; 34 | margin-right: 20px; 35 | margin-bottom: 20px; 36 | float: left; 37 | } 38 | 39 | #introduction { 40 | margin-top: 5px; 41 | margin-left: 20px; 42 | margin-right: 20px; 43 | margin-bottom: 20px; 44 | float: left; 45 | } 46 | 47 | #illustration-text { 48 | width: 200px; 49 | margin-top: 30px; 50 | margin-right: 20px; 51 | margin-bottom: 30px; 52 | padding-left: 25px; 53 | float: right; 54 | background-image: url("important.png"); 55 | background-repeat: no-repeat; 56 | background-position: left 0 top 3px; 57 | } 58 | 59 | #sticker { 60 | width: 400px; 61 | margin-top: 30px; 62 | margin-right: 20px; 63 | margin-bottom: 30px; 64 | padding-left: 25px; 65 | float: right; 66 | } 67 | 68 | #legend { 69 | clear: both; 70 | padding-top: 30px; 71 | margin: 0 20px 30px 20px; 72 | margin-top: 0px; 73 | border-top: 1px solid #000000; 74 | } 75 | 76 | #legend h2{ 77 | font-weight: bold; 78 | font-size: 12px; 79 | text-decoration: underline; 80 | margin: 20px 0 10px 0; 81 | } 82 | 83 | #legend h3{ 84 | font-weight: bold; 85 | font-size: 12px; 86 | margin: 10px 0 0 0; 87 | } 88 | 89 | #legend p{ 90 | margin: 0 0 10px 0; 91 | } 92 | 93 | #logo { 94 | width: 170px; 95 | height: 20px; 96 | background-image: url("logo.png"); 97 | background-repeat: no-repeat; 98 | display: inline-block; 99 | float: left; 100 | margin-top: 12px; 101 | margin-right: 20px; 102 | vertical-align: middle; 103 | } 104 | 105 | #title { 106 | display: inline-block; 107 | float: left; 108 | margin-top: 7px; 109 | margin-left: 20px; 110 | vertical-align: text-bottom; 111 | } 112 | 113 | html, body { 114 | margin: 0; 115 | padding: 0; 116 | background-color: white; 117 | color: black; 118 | font: 12px "Lucida Grande", Lucida, Verdana, sans-serif; 119 | } 120 | 121 | h1 { 122 | margin: 0; 123 | padding: 0; 124 | font: 26px Helvetica, Arial, sans-serif; 125 | font-weight: bold; 126 | } 127 | 128 | a { 129 | color: #ee7700; 130 | } 131 | 132 | ul { 133 | list-style-type: disc; 134 | list-style-position: outside; 135 | margin: 0 0 10px 0; 136 | padding: 0 0 10px 0; 137 | } 138 | 139 | li { 140 | /*position: relative;*/ 141 | margin-left: 15px; 142 | margin-bottom: 10px; 143 | padding-left: 0px; 144 | } 145 | 146 | li span { 147 | /*position: absolute;*/ 148 | left: -5px; 149 | } 150 | 151 | 152 | table.legend-column { 153 | border-width: 0px; 154 | border: none; 155 | border-collapse: collapse; 156 | text-align: left; 157 | vertical-align: top; 158 | background-color: #ffffff; 159 | border-color: #000000; 160 | margin-bottom: 15px; 161 | } 162 | table.legend-column th { 163 | border-bottom:1px dotted; 164 | height: 15px; 165 | font-weight: bold; 166 | padding: 2px 0px 2px 0px; 167 | vertical-align: top; 168 | } 169 | table.legend-column td { 170 | border-bottom:1px dotted; 171 | padding: 2px 0px 2px 0px; 172 | vertical-align: top; 173 | } 174 | 175 | .first-column-table-row 176 | { 177 | float: left; 178 | } 179 | 180 | .legend-section 181 | { 182 | float: left; 183 | } 184 | 185 | .legend-column 186 | { 187 | width : 240px; 188 | display: inline-block; 189 | margin-right: 20px; 190 | margin-bottom: 20px; 191 | vertical-align: top; 192 | } 193 | 194 | .legend-column p { 195 | margin: 5px 0 10px 0; 196 | } 197 | 198 | .legend-column-header 199 | { 200 | width : 100%; 201 | height: 20px; 202 | font-weight: bold; 203 | text-decoration: underline; 204 | margin-bottom: 5px; 205 | } 206 | 207 | .legend-control-column 208 | { 209 | width : 90px; 210 | font-weight: bold; 211 | } 212 | 213 | .legend-explanation-column 214 | { 215 | width : 150px; 216 | } 217 | 218 | .hidden { 219 | display: none; 220 | } 221 | -------------------------------------------------------------------------------- /QUNEO/README.md: -------------------------------------------------------------------------------- 1 | QUNEO 2 | ===== 3 | 4 | QUNEO bitwig script from KMI 5 | -------------------------------------------------------------------------------- /QuNexus/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataf1ow/KMI_Bitwig_Scripts/ea709ada6dafe49fcb4e516ceb5e4a0472be687e/QuNexus/.DS_Store -------------------------------------------------------------------------------- /QuNexus/qunexus.control.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright 2014 Evan Bogunia_____evanbeta@keithmcmillen.com 4 | 5 | 6 | */ 7 | 8 | 9 | 10 | //Load the bitwig API, obviously. 11 | loadAPI(1); 12 | 13 | //Define/set our controller properties [ company, device, version, uuid ] 14 | host.defineController("Keith McMillen Instruments", "QuNexus", "1.0", "860FA290-9111-11E3-BAA8-0800200C9A66"); 15 | host.defineMidiPorts(3, 3); 16 | 17 | //Define/set input/output port names (both i/o are the same) 18 | var portNames = ["QuNexus Port 1", "QuNexus Port 2", "QuNexus Port 3"]; 19 | host.addDeviceNameBasedDiscoveryPair(portNames, portNames); 20 | 21 | //Define/set sysex call/response (deprecated, included for good measure) 22 | host.defineSysexDiscovery("F0 7E 7F 06 01 F7", "F0 7E 00 06 02 00 01 5F 19 00 00 00 ?? ?? ?? ?? ?? ?? F7"); 23 | 24 | //Declare some global vars for a few of the interface types defined in the API 25 | var application, arranger, mixer, transport; 26 | var HIGHEST_CC = 119; 27 | var LOWEST_CC = 1; 28 | //------------------------------------ Init -----------------------------------// 29 | function init() 30 | { 31 | //-------- Set MIDI callbacks / port 32 | host.getMidiInPort(0).setMidiCallback(onMidiPort1); 33 | host.getMidiInPort(1).setMidiCallback(onMidiPort2); 34 | host.getMidiInPort(2).setMidiCallback(onMidiPort3); 35 | host.getMidiInPort(0).setSysexCallback(onSysexPort1); 36 | host.getMidiInPort(1).setSysexCallback(onSysexPort2); 37 | host.getMidiInPort(2).setSysexCallback(onSysexPort3); 38 | 39 | //-------- Note Inputs (see REF below for argument details 40 | noteIn = host.getMidiInPort(0).createNoteInput("QuNexus Port 1"); 41 | noteIn.setShouldConsumeEvents(false); 42 | noteIn2 = host.getMidiInPort(1).createNoteInput("QuNexus Port 2", "80????", "90????"); 43 | noteIn3 = host.getMidiInPort(2).createNoteInput("QuNexus Port 3", "80????", "90????"); 44 | 45 | userControls = host.createUserControlsSection(HIGHEST_CC - LOWEST_CC + 1); 46 | 47 | for(var i=LOWEST_CC; i<=HIGHEST_CC; i++) 48 | { 49 | userControls.getControl(i - LOWEST_CC).setLabel("CC" + i); 50 | } 51 | 52 | //-------- Initialize bitwig interfaces 53 | //application = host.createApplication(); 54 | //arranger = host.createArranger(0); 55 | //mixer = host.createMixer("perspective?",0); 56 | transport = host.createTransport(); 57 | println("This is the QuNexus Script") 58 | } 59 | 60 | //--------------------------- MIDI Callbacks / Port ---------------------------// 61 | function onMidiPort1(status, data1, data2) 62 | { 63 | //println("Port 1 [status, data1, data2]: " + status + ", " + data1 + ", " + data2); 64 | 65 | 66 | if(status == 233) 67 | { 68 | println("pitchBend" + " " + data1 + " " + data2) 69 | 70 | }else if(status == 153){ 71 | 72 | println("Notes" + " " + data1 + " " + data2) 73 | 74 | }else if (status == 185){ 75 | 76 | println("CC" + " " + data1 + " " + data2) 77 | sendMidi(status, data1, data2) 78 | } 79 | 80 | 81 | if (isChannelController(status)) 82 | { 83 | if (data1 >= LOWEST_CC && data1 <= HIGHEST_CC) 84 | { 85 | var index = data1 - LOWEST_CC; 86 | userControls.getControl(index).set(data2, 128); 87 | } 88 | } 89 | 90 | 91 | } 92 | 93 | function onMidiPort2(status, data1, data2) 94 | { 95 | println("Port 2 [status, data1, data2]: " + status + ", " + data1 + ", " + data2); 96 | } 97 | 98 | function onMidiPort3(status, data1, data2) 99 | { 100 | println("Port 3 [status, data1, data2]: " + status + ", " + data1 + ", " + data2); 101 | } 102 | 103 | function onSysexPort1(data) 104 | { 105 | println("Port 1 [sysex data]: " + data); 106 | } 107 | 108 | function onSysexPort2(data) 109 | { 110 | println("Port 2 [sysex data]: " + data); 111 | } 112 | 113 | function onSysexPort3(data) 114 | { 115 | println("Port 3 [sysex data]: " + data); 116 | } 117 | 118 | function exit() 119 | { 120 | println("exit."); 121 | } 122 | 123 | //--------------------------------- Interfaces --------------------------------// 124 | 125 | 126 | 127 | 128 | 129 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 130 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 131 | //////////////////////////////////////////////////////////////// REF //////////////////////////////////////////////////////////////// 132 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 133 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 134 | 135 | //--------------------- Note Input Filters 136 | 137 | // These filters args are used in the createNoteInput method/function for a midi input port [ see init() ]. 138 | 139 | // See http://www.midi.org/techspecs/midimessages.php for midi message types. 140 | 141 | // Studying up on hexadecimal could be helpful also if it's new to you. 142 | 143 | 144 | //---- Note Off 145 | // "80????" - Sees all note offs on channel 1 146 | // "8?????" - Sees all note offs on any channel 147 | 148 | //---- Note On 149 | // "90????" - Sees all note ons on channel 1 150 | // "9?????" - Sees all note offs on any channel 151 | // "90607F" - Sees all note number 60s with a velocity of 127 (this is a very specific filter) 152 | 153 | //---- Polyphonic Aftertouch 154 | // "A0????" - Sees all note ons on channel 1 155 | // "A?????" - Sees all note offs on any channel 156 | 157 | //---- Controller Messages 158 | // "B0????" - Sees all cc messages on channel 1 159 | // "B?????" - Sees all cc messages on all channels 160 | 161 | //---- Program Changes 162 | // "C0????" - Sees all pgm changes on channel 1 163 | // "C?????" - Sees all pgm changes on all channels 164 | 165 | //---- Channel Aftertouch 166 | // "D0????" - Sees all ch. aftertouch on channel 1 167 | // "D?????" - Sees all ch. aftertouch on all channels 168 | 169 | //---- Pitch Wheel 170 | // "E0????" - Sees all ch. aftertouch on channel 1 171 | // "E?????" - Sees all ch. aftertouch on all channels 172 | // "E???00" - Sees all ch. aftertouch on all channels with an MSB of zero 173 | // "E?00??" - Sees all ch. aftertouch on all channels with an LSB of zero 174 | 175 | //---- SysEx start/end, esoteric MIDI mysticism (wouldn't use these filters unless your traversing some kind of musical 3-byte worm hole) 176 | //---- For sysex, just use the callbacks defined above 177 | // "F0????" - Sees all ch. aftertouch on channel 1 178 | // "D?????" - Sees all ch. aftertouch on all channels 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # KMI_Bitwig_Scripts 2 | This is a collection of Bitwig Scripts for KMI gear 3 | -------------------------------------------------------------------------------- /SoftStep_Bitwig/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataf1ow/KMI_Bitwig_Scripts/ea709ada6dafe49fcb4e516ceb5e4a0472be687e/SoftStep_Bitwig/.DS_Store -------------------------------------------------------------------------------- /SoftStep_Bitwig/Bitwig_Clips.softsteppreset: -------------------------------------------------------------------------------- 1 | { "10_key_displaymode" : "Always", "10_key_name" : "ScUp", "10_key_prefix" : "", "1_key_displaymode" : "Always", "1_key_name" : "CL_5", "1_key_prefix" : "", "2_key_displaymode" : "Always", "2_key_name" : "CL_6", "2_key_prefix" : "", "3_key_displaymode" : "Always", "3_key_name" : "CL_7", "3_key_prefix" : "", "4_key_displaymode" : "Always", "4_key_name" : "CL_8", "4_key_prefix" : "", "5_key_displaymode" : "Always", "5_key_name" : "ScDN", "5_key_prefix" : "", "6_key_displaymode" : "Always", "6_key_name" : "CL_1", "6_key_prefix" : "", "7_key_displaymode" : "Always", "7_key_name" : "CL_2", "7_key_prefix" : "", "8_key_displaymode" : "Always", "8_key_name" : "CL_3", "8_key_prefix" : "", "9_key_displaymode" : "Always", "9_key_name" : "CL_4", "9_key_prefix" : "", "key10_modline1_bankmsb" : 0, "key10_modline1_cc" : 119, "key10_modline1_channel" : 2, "key10_modline1_destination" : "Note Set", "key10_modline1_device" : "SSCOM Port 1", "key10_modline1_displaylinked" : false, "key10_modline1_enable" : true, "key10_modline1_gain" : 1.0, "key10_modline1_ledgreen" : "None", "key10_modline1_ledred" : "None", "key10_modline1_max" : 127, "key10_modline1_min" : 0, "key10_modline1_mmcfunction" : "Stop", "key10_modline1_mmcid" : 1, "key10_modline1_note" : 24, "key10_modline1_offset" : 0, "key10_modline1_oscroute" : "None", "key10_modline1_slew" : 0, "key10_modline1_source" : "Foot On", "key10_modline1_table" : "Linear", "key10_modline1_velocity" : 127, "key10_modline2_bankmsb" : 0, "key10_modline2_cc" : 75, "key10_modline2_channel" : 2, "key10_modline2_destination" : "Note Set", "key10_modline2_device" : "SSCOM Port 1", "key10_modline2_displaylinked" : 0, "key10_modline2_enable" : true, "key10_modline2_gain" : 1.0, "key10_modline2_ledgreen" : "None", "key10_modline2_ledred" : "None", "key10_modline2_max" : 127, "key10_modline2_min" : 0, "key10_modline2_mmcfunction" : "Stop", "key10_modline2_mmcid" : 1, "key10_modline2_note" : 26, "key10_modline2_offset" : 0, "key10_modline2_oscroute" : "None", "key10_modline2_slew" : 0, "key10_modline2_source" : "Long Trig", "key10_modline2_table" : "Linear", "key10_modline2_velocity" : 127, "key10_modline3_bankmsb" : 0, "key10_modline3_cc" : 70, "key10_modline3_channel" : 9, "key10_modline3_destination" : "None", "key10_modline3_device" : "SSCOM Port 1", "key10_modline3_displaylinked" : true, "key10_modline3_enable" : false, "key10_modline3_gain" : 1.0, "key10_modline3_ledgreen" : "True", "key10_modline3_ledred" : "None", "key10_modline3_max" : 127, "key10_modline3_min" : 0, "key10_modline3_mmcfunction" : "Stop", "key10_modline3_mmcid" : 1, "key10_modline3_note" : 60, "key10_modline3_offset" : 0, "key10_modline3_oscroute" : "None", "key10_modline3_slew" : 0, "key10_modline3_source" : "None", "key10_modline3_table" : "Linear", "key10_modline3_velocity" : 127, "key10_modline4_bankmsb" : 0, "key10_modline4_cc" : 0, "key10_modline4_channel" : 1, "key10_modline4_destination" : "None", "key10_modline4_device" : "SSCOM Port 1", "key10_modline4_displaylinked" : 0, "key10_modline4_enable" : 0, "key10_modline4_gain" : 1.0, "key10_modline4_ledgreen" : "None", "key10_modline4_ledred" : "None", "key10_modline4_max" : 127, "key10_modline4_min" : 0, "key10_modline4_mmcfunction" : "Stop", "key10_modline4_mmcid" : 1, "key10_modline4_note" : 60, "key10_modline4_offset" : 0, "key10_modline4_oscroute" : "None", "key10_modline4_slew" : 0, "key10_modline4_source" : "None", "key10_modline4_table" : "Linear", "key10_modline4_velocity" : 127, "key10_modline5_bankmsb" : 0, "key10_modline5_cc" : 0, "key10_modline5_channel" : 1, "key10_modline5_destination" : "None", "key10_modline5_device" : "SSCOM Port 1", "key10_modline5_displaylinked" : 0, "key10_modline5_enable" : 0, "key10_modline5_gain" : 1.0, "key10_modline5_ledgreen" : "None", "key10_modline5_ledred" : "None", "key10_modline5_max" : 127, "key10_modline5_min" : 0, "key10_modline5_mmcfunction" : "Stop", "key10_modline5_mmcid" : 1, "key10_modline5_note" : 60, "key10_modline5_offset" : 0, "key10_modline5_oscroute" : "None", "key10_modline5_slew" : 0, "key10_modline5_source" : "None", "key10_modline5_table" : "Linear", "key10_modline5_velocity" : 127, "key10_modline6_bankmsb" : 0, "key10_modline6_cc" : 0, "key10_modline6_channel" : 1, "key10_modline6_destination" : "None", "key10_modline6_device" : "SSCOM Port 1", "key10_modline6_displaylinked" : 0, "key10_modline6_enable" : 0, "key10_modline6_gain" : 1.0, "key10_modline6_ledgreen" : "None", "key10_modline6_ledred" : "None", "key10_modline6_max" : 127, "key10_modline6_min" : 0, "key10_modline6_mmcfunction" : "Stop", "key10_modline6_mmcid" : 1, "key10_modline6_note" : 60, "key10_modline6_offset" : 0, "key10_modline6_oscroute" : "None", "key10_modline6_slew" : 0, "key10_modline6_source" : "None", "key10_modline6_table" : "Linear", "key10_modline6_velocity" : 127, "key1_modline1_bankmsb" : 0, "key1_modline1_cc" : 115, "key1_modline1_channel" : 2, "key1_modline1_destination" : "Note Set", "key1_modline1_device" : "SSCOM Port 1", "key1_modline1_displaylinked" : 1, "key1_modline1_enable" : true, "key1_modline1_gain" : 1.0, "key1_modline1_ledgreen" : "None", "key1_modline1_ledred" : "None", "key1_modline1_max" : 127, "key1_modline1_min" : 0, "key1_modline1_mmcfunction" : "Stop", "key1_modline1_mmcid" : 1, "key1_modline1_note" : 0, "key1_modline1_offset" : 0, "key1_modline1_oscroute" : "None", "key1_modline1_slew" : 0, "key1_modline1_source" : "Foot On", "key1_modline1_table" : "Linear", "key1_modline1_velocity" : 127, "key1_modline2_bankmsb" : 0, "key1_modline2_cc" : 0, "key1_modline2_channel" : 2, "key1_modline2_destination" : "Note Set", "key1_modline2_device" : "SSCOM Port 1", "key1_modline2_displaylinked" : 0, "key1_modline2_enable" : true, "key1_modline2_gain" : 1.0, "key1_modline2_ledgreen" : "None", "key1_modline2_ledred" : "None", "key1_modline2_max" : 127, "key1_modline2_min" : 0, "key1_modline2_mmcfunction" : "Stop", "key1_modline2_mmcid" : 1, "key1_modline2_note" : 8, "key1_modline2_offset" : 0, "key1_modline2_oscroute" : "None", "key1_modline2_slew" : 0, "key1_modline2_source" : "Long Trig", "key1_modline2_table" : "Linear", "key1_modline2_velocity" : 127, "key1_modline3_bankmsb" : 0, "key1_modline3_cc" : 0, "key1_modline3_channel" : 2, "key1_modline3_destination" : "Note Set", "key1_modline3_device" : "SSCOM Port 1", "key1_modline3_displaylinked" : 0, "key1_modline3_enable" : true, "key1_modline3_gain" : 1.0, "key1_modline3_ledgreen" : "None", "key1_modline3_ledred" : "None", "key1_modline3_max" : 127, "key1_modline3_min" : 127, "key1_modline3_mmcfunction" : "Stop", "key1_modline3_mmcid" : 1, "key1_modline3_note" : 16, "key1_modline3_offset" : 0, "key1_modline3_oscroute" : "None", "key1_modline3_slew" : 0, "key1_modline3_source" : "Dbl Trig", "key1_modline3_table" : "Linear", "key1_modline3_velocity" : 127, "key1_modline4_bankmsb" : 0, "key1_modline4_cc" : 0, "key1_modline4_channel" : 1, "key1_modline4_destination" : "None", "key1_modline4_device" : "SSCOM Port 1", "key1_modline4_displaylinked" : 0, "key1_modline4_enable" : 0, "key1_modline4_gain" : 1.0, "key1_modline4_ledgreen" : "None", "key1_modline4_ledred" : "None", "key1_modline4_max" : 127, "key1_modline4_min" : 0, "key1_modline4_mmcfunction" : "Stop", "key1_modline4_mmcid" : 1, "key1_modline4_note" : 60, "key1_modline4_offset" : 0, "key1_modline4_oscroute" : "None", "key1_modline4_slew" : 0, "key1_modline4_source" : "None", "key1_modline4_table" : "Linear", "key1_modline4_velocity" : 127, "key1_modline5_bankmsb" : 0, "key1_modline5_cc" : 0, "key1_modline5_channel" : 1, "key1_modline5_destination" : "None", "key1_modline5_device" : "SSCOM Port 1", "key1_modline5_displaylinked" : 0, "key1_modline5_enable" : 0, "key1_modline5_gain" : 1.0, "key1_modline5_ledgreen" : "None", "key1_modline5_ledred" : "None", "key1_modline5_max" : 127, "key1_modline5_min" : 0, "key1_modline5_mmcfunction" : "Stop", "key1_modline5_mmcid" : 1, "key1_modline5_note" : 60, "key1_modline5_offset" : 0, "key1_modline5_oscroute" : "None", "key1_modline5_slew" : 0, "key1_modline5_source" : "None", "key1_modline5_table" : "Linear", "key1_modline5_velocity" : 127, "key1_modline6_bankmsb" : 0, "key1_modline6_cc" : 0, "key1_modline6_channel" : 1, "key1_modline6_destination" : "None", "key1_modline6_device" : "SSCOM Port 1", "key1_modline6_displaylinked" : 0, "key1_modline6_enable" : 0, "key1_modline6_gain" : 1.0, "key1_modline6_ledgreen" : "None", "key1_modline6_ledred" : "None", "key1_modline6_max" : 127, "key1_modline6_min" : 0, "key1_modline6_mmcfunction" : "Stop", "key1_modline6_mmcid" : 1, "key1_modline6_note" : 60, "key1_modline6_offset" : 0, "key1_modline6_oscroute" : "None", "key1_modline6_slew" : 0, "key1_modline6_source" : "None", "key1_modline6_table" : "Linear", "key1_modline6_velocity" : 127, "key2_modline1_bankmsb" : 0, "key2_modline1_cc" : 115, "key2_modline1_channel" : 2, "key2_modline1_destination" : "Note Set", "key2_modline1_device" : "SSCOM Port 1", "key2_modline1_displaylinked" : 1, "key2_modline1_enable" : true, "key2_modline1_gain" : 1.0, "key2_modline1_ledgreen" : "None", "key2_modline1_ledred" : "None", "key2_modline1_max" : 127, "key2_modline1_min" : 0, "key2_modline1_mmcfunction" : "Stop", "key2_modline1_mmcid" : 1, "key2_modline1_note" : 2, "key2_modline1_offset" : 0, "key2_modline1_oscroute" : "None", "key2_modline1_slew" : 0, "key2_modline1_source" : "Foot On", "key2_modline1_table" : "Linear", "key2_modline1_velocity" : 127, "key2_modline2_bankmsb" : 0, "key2_modline2_cc" : 0, "key2_modline2_channel" : 2, "key2_modline2_destination" : "Note Set", "key2_modline2_device" : "SSCOM Port 1", "key2_modline2_displaylinked" : 0, "key2_modline2_enable" : true, "key2_modline2_gain" : 1.0, "key2_modline2_ledgreen" : "None", "key2_modline2_ledred" : "None", "key2_modline2_max" : 127, "key2_modline2_min" : 0, "key2_modline2_mmcfunction" : "Stop", "key2_modline2_mmcid" : 1, "key2_modline2_note" : 10, "key2_modline2_offset" : 0, "key2_modline2_oscroute" : "None", "key2_modline2_slew" : 0, "key2_modline2_source" : "Long Trig", "key2_modline2_table" : "Linear", "key2_modline2_velocity" : 127, "key2_modline3_bankmsb" : 0, "key2_modline3_cc" : 0, "key2_modline3_channel" : 2, "key2_modline3_destination" : "Note Set", "key2_modline3_device" : "SSCOM Port 1", "key2_modline3_displaylinked" : 0, "key2_modline3_enable" : true, "key2_modline3_gain" : 1.0, "key2_modline3_ledgreen" : "None", "key2_modline3_ledred" : "None", "key2_modline3_max" : 127, "key2_modline3_min" : 0, "key2_modline3_mmcfunction" : "Stop", "key2_modline3_mmcid" : 1, "key2_modline3_note" : 18, "key2_modline3_offset" : 0, "key2_modline3_oscroute" : "None", "key2_modline3_slew" : 0, "key2_modline3_source" : "Dbl Trig", "key2_modline3_table" : "Linear", "key2_modline3_velocity" : 127, "key2_modline4_bankmsb" : 0, "key2_modline4_cc" : 0, "key2_modline4_channel" : 1, "key2_modline4_destination" : "None", "key2_modline4_device" : "SSCOM Port 1", "key2_modline4_displaylinked" : 0, "key2_modline4_enable" : 0, "key2_modline4_gain" : 1.0, "key2_modline4_ledgreen" : "None", "key2_modline4_ledred" : "None", "key2_modline4_max" : 127, "key2_modline4_min" : 0, "key2_modline4_mmcfunction" : "Stop", "key2_modline4_mmcid" : 1, "key2_modline4_note" : 60, "key2_modline4_offset" : 0, "key2_modline4_oscroute" : "None", "key2_modline4_slew" : 0, "key2_modline4_source" : "None", "key2_modline4_table" : "Linear", "key2_modline4_velocity" : 127, "key2_modline5_bankmsb" : 0, "key2_modline5_cc" : 0, "key2_modline5_channel" : 1, "key2_modline5_destination" : "None", "key2_modline5_device" : "SSCOM Port 1", "key2_modline5_displaylinked" : 0, "key2_modline5_enable" : 0, "key2_modline5_gain" : 1.0, "key2_modline5_ledgreen" : "None", "key2_modline5_ledred" : "None", "key2_modline5_max" : 127, "key2_modline5_min" : 0, "key2_modline5_mmcfunction" : "Stop", "key2_modline5_mmcid" : 1, "key2_modline5_note" : 60, "key2_modline5_offset" : 0, "key2_modline5_oscroute" : "None", "key2_modline5_slew" : 0, "key2_modline5_source" : "None", "key2_modline5_table" : "Linear", "key2_modline5_velocity" : 127, "key2_modline6_bankmsb" : 0, "key2_modline6_cc" : 0, "key2_modline6_channel" : 1, "key2_modline6_destination" : "None", "key2_modline6_device" : "SSCOM Port 1", "key2_modline6_displaylinked" : 0, "key2_modline6_enable" : 0, "key2_modline6_gain" : 1.0, "key2_modline6_ledgreen" : "None", "key2_modline6_ledred" : "None", "key2_modline6_max" : 127, "key2_modline6_min" : 0, "key2_modline6_mmcfunction" : "Stop", "key2_modline6_mmcid" : 1, "key2_modline6_note" : 60, "key2_modline6_offset" : 0, "key2_modline6_oscroute" : "None", "key2_modline6_slew" : 0, "key2_modline6_source" : "None", "key2_modline6_table" : "Linear", "key2_modline6_velocity" : 127, "key3_modline1_bankmsb" : 0, "key3_modline1_cc" : 115, "key3_modline1_channel" : 2, "key3_modline1_destination" : "Note Set", "key3_modline1_device" : "SSCOM Port 1", "key3_modline1_displaylinked" : 1, "key3_modline1_enable" : true, "key3_modline1_gain" : 1.0, "key3_modline1_ledgreen" : "None", "key3_modline1_ledred" : "None", "key3_modline1_max" : 127, "key3_modline1_min" : 0, "key3_modline1_mmcfunction" : "Stop", "key3_modline1_mmcid" : 1, "key3_modline1_note" : 4, "key3_modline1_offset" : 0, "key3_modline1_oscroute" : "None", "key3_modline1_slew" : 0, "key3_modline1_source" : "Foot On", "key3_modline1_table" : "Linear", "key3_modline1_velocity" : 127, "key3_modline2_bankmsb" : 0, "key3_modline2_cc" : 0, "key3_modline2_channel" : 2, "key3_modline2_destination" : "Note Set", "key3_modline2_device" : "SSCOM Port 1", "key3_modline2_displaylinked" : 0, "key3_modline2_enable" : true, "key3_modline2_gain" : 1.0, "key3_modline2_ledgreen" : "None", "key3_modline2_ledred" : "None", "key3_modline2_max" : 127, "key3_modline2_min" : 0, "key3_modline2_mmcfunction" : "Stop", "key3_modline2_mmcid" : 1, "key3_modline2_note" : 12, "key3_modline2_offset" : 0, "key3_modline2_oscroute" : "None", "key3_modline2_slew" : 0, "key3_modline2_source" : "Long Trig", "key3_modline2_table" : "Linear", "key3_modline2_velocity" : 127, "key3_modline3_bankmsb" : 0, "key3_modline3_cc" : 0, "key3_modline3_channel" : 2, "key3_modline3_destination" : "Note Set", "key3_modline3_device" : "SSCOM Port 1", "key3_modline3_displaylinked" : 0, "key3_modline3_enable" : true, "key3_modline3_gain" : 1.0, "key3_modline3_ledgreen" : "None", "key3_modline3_ledred" : "None", "key3_modline3_max" : 127, "key3_modline3_min" : 0, "key3_modline3_mmcfunction" : "Stop", "key3_modline3_mmcid" : 1, "key3_modline3_note" : 20, "key3_modline3_offset" : 0, "key3_modline3_oscroute" : "None", "key3_modline3_slew" : 0, "key3_modline3_source" : "Dbl Trig", "key3_modline3_table" : "Linear", "key3_modline3_velocity" : 127, "key3_modline4_bankmsb" : 0, "key3_modline4_cc" : 0, "key3_modline4_channel" : 1, "key3_modline4_destination" : "None", "key3_modline4_device" : "SSCOM Port 1", "key3_modline4_displaylinked" : 0, "key3_modline4_enable" : 0, "key3_modline4_gain" : 1.0, "key3_modline4_ledgreen" : "None", "key3_modline4_ledred" : "None", "key3_modline4_max" : 127, "key3_modline4_min" : 0, "key3_modline4_mmcfunction" : "Stop", "key3_modline4_mmcid" : 1, "key3_modline4_note" : 60, "key3_modline4_offset" : 0, "key3_modline4_oscroute" : "None", "key3_modline4_slew" : 0, "key3_modline4_source" : "None", "key3_modline4_table" : "Linear", "key3_modline4_velocity" : 127, "key3_modline5_bankmsb" : 0, "key3_modline5_cc" : 0, "key3_modline5_channel" : 1, "key3_modline5_destination" : "None", "key3_modline5_device" : "SSCOM Port 1", "key3_modline5_displaylinked" : 0, "key3_modline5_enable" : 0, "key3_modline5_gain" : 1.0, "key3_modline5_ledgreen" : "None", "key3_modline5_ledred" : "None", "key3_modline5_max" : 127, "key3_modline5_min" : 0, "key3_modline5_mmcfunction" : "Stop", "key3_modline5_mmcid" : 1, "key3_modline5_note" : 60, "key3_modline5_offset" : 0, "key3_modline5_oscroute" : "None", "key3_modline5_slew" : 0, "key3_modline5_source" : "None", "key3_modline5_table" : "Linear", "key3_modline5_velocity" : 127, "key3_modline6_bankmsb" : 0, "key3_modline6_cc" : 0, "key3_modline6_channel" : 1, "key3_modline6_destination" : "None", "key3_modline6_device" : "SSCOM Port 1", "key3_modline6_displaylinked" : 0, "key3_modline6_enable" : 0, "key3_modline6_gain" : 1.0, "key3_modline6_ledgreen" : "None", "key3_modline6_ledred" : "None", "key3_modline6_max" : 127, "key3_modline6_min" : 0, "key3_modline6_mmcfunction" : "Stop", "key3_modline6_mmcid" : 1, "key3_modline6_note" : 60, "key3_modline6_offset" : 0, "key3_modline6_oscroute" : "None", "key3_modline6_slew" : 0, "key3_modline6_source" : "None", "key3_modline6_table" : "Linear", "key3_modline6_velocity" : 127, "key4_modline1_bankmsb" : 0, "key4_modline1_cc" : 115, "key4_modline1_channel" : 2, "key4_modline1_destination" : "Note Set", "key4_modline1_device" : "SSCOM Port 1", "key4_modline1_displaylinked" : 1, "key4_modline1_enable" : true, "key4_modline1_gain" : 1.0, "key4_modline1_ledgreen" : "None", "key4_modline1_ledred" : "None", "key4_modline1_max" : 127, "key4_modline1_min" : 0, "key4_modline1_mmcfunction" : "Stop", "key4_modline1_mmcid" : 1, "key4_modline1_note" : 6, "key4_modline1_offset" : 0, "key4_modline1_oscroute" : "None", "key4_modline1_slew" : 0, "key4_modline1_source" : "Foot On", "key4_modline1_table" : "Linear", "key4_modline1_velocity" : 127, "key4_modline2_bankmsb" : 0, "key4_modline2_cc" : 0, "key4_modline2_channel" : 2, "key4_modline2_destination" : "Note Set", "key4_modline2_device" : "SSCOM Port 1", "key4_modline2_displaylinked" : 0, "key4_modline2_enable" : true, "key4_modline2_gain" : 1.0, "key4_modline2_ledgreen" : "None", "key4_modline2_ledred" : "None", "key4_modline2_max" : 127, "key4_modline2_min" : 0, "key4_modline2_mmcfunction" : "Stop", "key4_modline2_mmcid" : 1, "key4_modline2_note" : 14, "key4_modline2_offset" : 0, "key4_modline2_oscroute" : "None", "key4_modline2_slew" : 0, "key4_modline2_source" : "Long Trig", "key4_modline2_table" : "Linear", "key4_modline2_velocity" : 127, "key4_modline3_bankmsb" : 0, "key4_modline3_cc" : 0, "key4_modline3_channel" : 2, "key4_modline3_destination" : "Note Set", "key4_modline3_device" : "SSCOM Port 1", "key4_modline3_displaylinked" : 0, "key4_modline3_enable" : true, "key4_modline3_gain" : 1.0, "key4_modline3_ledgreen" : "None", "key4_modline3_ledred" : "None", "key4_modline3_max" : 127, "key4_modline3_min" : 0, "key4_modline3_mmcfunction" : "Stop", "key4_modline3_mmcid" : 1, "key4_modline3_note" : 22, "key4_modline3_offset" : 0, "key4_modline3_oscroute" : "None", "key4_modline3_slew" : 0, "key4_modline3_source" : "Dbl Trig", "key4_modline3_table" : "Linear", "key4_modline3_velocity" : 127, "key4_modline4_bankmsb" : 0, "key4_modline4_cc" : 0, "key4_modline4_channel" : 1, "key4_modline4_destination" : "None", "key4_modline4_device" : "SSCOM Port 1", "key4_modline4_displaylinked" : 0, "key4_modline4_enable" : 0, "key4_modline4_gain" : 1.0, "key4_modline4_ledgreen" : "None", "key4_modline4_ledred" : "None", "key4_modline4_max" : 127, "key4_modline4_min" : 0, "key4_modline4_mmcfunction" : "Stop", "key4_modline4_mmcid" : 1, "key4_modline4_note" : 60, "key4_modline4_offset" : 0, "key4_modline4_oscroute" : "None", "key4_modline4_slew" : 0, "key4_modline4_source" : "None", "key4_modline4_table" : "Linear", "key4_modline4_velocity" : 127, "key4_modline5_bankmsb" : 0, "key4_modline5_cc" : 0, "key4_modline5_channel" : 1, "key4_modline5_destination" : "None", "key4_modline5_device" : "SSCOM Port 1", "key4_modline5_displaylinked" : 0, "key4_modline5_enable" : 0, "key4_modline5_gain" : 1.0, "key4_modline5_ledgreen" : "None", "key4_modline5_ledred" : "None", "key4_modline5_max" : 127, "key4_modline5_min" : 0, "key4_modline5_mmcfunction" : "Stop", "key4_modline5_mmcid" : 1, "key4_modline5_note" : 60, "key4_modline5_offset" : 0, "key4_modline5_oscroute" : "None", "key4_modline5_slew" : 0, "key4_modline5_source" : "None", "key4_modline5_table" : "Linear", "key4_modline5_velocity" : 127, "key4_modline6_bankmsb" : 0, "key4_modline6_cc" : 0, "key4_modline6_channel" : 1, "key4_modline6_destination" : "None", "key4_modline6_device" : "SSCOM Port 1", "key4_modline6_displaylinked" : 0, "key4_modline6_enable" : 0, "key4_modline6_gain" : 1.0, "key4_modline6_ledgreen" : "None", "key4_modline6_ledred" : "None", "key4_modline6_max" : 127, "key4_modline6_min" : 0, "key4_modline6_mmcfunction" : "Stop", "key4_modline6_mmcid" : 1, "key4_modline6_note" : 60, "key4_modline6_offset" : 0, "key4_modline6_oscroute" : "None", "key4_modline6_slew" : 0, "key4_modline6_source" : "None", "key4_modline6_table" : "Linear", "key4_modline6_velocity" : 127, "key5_modline1_bankmsb" : 0, "key5_modline1_cc" : 114, "key5_modline1_channel" : 2, "key5_modline1_destination" : "Note Set", "key5_modline1_device" : "SSCOM Port 1", "key5_modline1_displaylinked" : 1, "key5_modline1_enable" : true, "key5_modline1_gain" : 1.0, "key5_modline1_ledgreen" : "None", "key5_modline1_ledred" : "None", "key5_modline1_max" : 127, "key5_modline1_min" : 0, "key5_modline1_mmcfunction" : "Stop", "key5_modline1_mmcid" : 1, "key5_modline1_note" : 25, "key5_modline1_offset" : 0, "key5_modline1_oscroute" : "None", "key5_modline1_slew" : 0, "key5_modline1_source" : "Foot On", "key5_modline1_table" : "Linear", "key5_modline1_velocity" : 127, "key5_modline2_bankmsb" : 0, "key5_modline2_cc" : 66, "key5_modline2_channel" : 9, "key5_modline2_destination" : "None", "key5_modline2_device" : "SSCOM Port 1", "key5_modline2_displaylinked" : 0, "key5_modline2_enable" : false, "key5_modline2_gain" : 1.0, "key5_modline2_ledgreen" : "None", "key5_modline2_ledred" : "None", "key5_modline2_max" : 127, "key5_modline2_min" : 0, "key5_modline2_mmcfunction" : "Stop", "key5_modline2_mmcid" : 1, "key5_modline2_note" : 60, "key5_modline2_offset" : 0, "key5_modline2_oscroute" : "None", "key5_modline2_slew" : 0, "key5_modline2_source" : "None", "key5_modline2_table" : "Linear", "key5_modline2_velocity" : 127, "key5_modline3_bankmsb" : 0, "key5_modline3_cc" : 0, "key5_modline3_channel" : 1, "key5_modline3_destination" : "None", "key5_modline3_device" : "SSCOM Port 1", "key5_modline3_displaylinked" : false, "key5_modline3_enable" : 0, "key5_modline3_gain" : 1.0, "key5_modline3_ledgreen" : "None", "key5_modline3_ledred" : "None", "key5_modline3_max" : 127, "key5_modline3_min" : 0, "key5_modline3_mmcfunction" : "Stop", "key5_modline3_mmcid" : 1, "key5_modline3_note" : 60, "key5_modline3_offset" : 0, "key5_modline3_oscroute" : "None", "key5_modline3_slew" : 0, "key5_modline3_source" : "None", "key5_modline3_table" : "Linear", "key5_modline3_velocity" : 127, "key5_modline4_bankmsb" : 0, "key5_modline4_cc" : 0, "key5_modline4_channel" : 1, "key5_modline4_destination" : "None", "key5_modline4_device" : "SSCOM Port 1", "key5_modline4_displaylinked" : 0, "key5_modline4_enable" : 0, "key5_modline4_gain" : 1.0, "key5_modline4_ledgreen" : "None", "key5_modline4_ledred" : "None", "key5_modline4_max" : 127, "key5_modline4_min" : 0, "key5_modline4_mmcfunction" : "Stop", "key5_modline4_mmcid" : 1, "key5_modline4_note" : 60, "key5_modline4_offset" : 0, "key5_modline4_oscroute" : "None", "key5_modline4_slew" : 0, "key5_modline4_source" : "None", "key5_modline4_table" : "Linear", "key5_modline4_velocity" : 127, "key5_modline5_bankmsb" : 0, "key5_modline5_cc" : 0, "key5_modline5_channel" : 1, "key5_modline5_destination" : "None", "key5_modline5_device" : "SSCOM Port 1", "key5_modline5_displaylinked" : 0, "key5_modline5_enable" : 0, "key5_modline5_gain" : 1.0, "key5_modline5_ledgreen" : "None", "key5_modline5_ledred" : "None", "key5_modline5_max" : 127, "key5_modline5_min" : 0, "key5_modline5_mmcfunction" : "Stop", "key5_modline5_mmcid" : 1, "key5_modline5_note" : 60, "key5_modline5_offset" : 0, "key5_modline5_oscroute" : "None", "key5_modline5_slew" : 0, "key5_modline5_source" : "None", "key5_modline5_table" : "Linear", "key5_modline5_velocity" : 127, "key5_modline6_bankmsb" : 0, "key5_modline6_cc" : 0, "key5_modline6_channel" : 1, "key5_modline6_destination" : "None", "key5_modline6_device" : "SSCOM Port 1", "key5_modline6_displaylinked" : false, "key5_modline6_enable" : 0, "key5_modline6_gain" : 1.0, "key5_modline6_ledgreen" : "None", "key5_modline6_ledred" : "None", "key5_modline6_max" : 127, "key5_modline6_min" : 0, "key5_modline6_mmcfunction" : "Stop", "key5_modline6_mmcid" : 1, "key5_modline6_note" : 60, "key5_modline6_offset" : 0, "key5_modline6_oscroute" : "None", "key5_modline6_slew" : 0, "key5_modline6_source" : "None", "key5_modline6_table" : "Linear", "key5_modline6_velocity" : 127, "key6_modline1_bankmsb" : 0, "key6_modline1_cc" : 115, "key6_modline1_channel" : 2, "key6_modline1_destination" : "Note Set", "key6_modline1_device" : "SSCOM Port 1", "key6_modline1_displaylinked" : 1, "key6_modline1_enable" : true, "key6_modline1_gain" : 1.0, "key6_modline1_ledgreen" : "None", "key6_modline1_ledred" : "None", "key6_modline1_max" : 127, "key6_modline1_min" : 0, "key6_modline1_mmcfunction" : "Stop", "key6_modline1_mmcid" : 1, "key6_modline1_note" : 1, "key6_modline1_offset" : 0, "key6_modline1_oscroute" : "None", "key6_modline1_slew" : 0, "key6_modline1_source" : "Foot On", "key6_modline1_table" : "Linear", "key6_modline1_velocity" : 127, "key6_modline2_bankmsb" : 0, "key6_modline2_cc" : 0, "key6_modline2_channel" : 2, "key6_modline2_destination" : "Note Set", "key6_modline2_device" : "SSCOM Port 1", "key6_modline2_displaylinked" : 0, "key6_modline2_enable" : true, "key6_modline2_gain" : 1.0, "key6_modline2_ledgreen" : "None", "key6_modline2_ledred" : "None", "key6_modline2_max" : 127, "key6_modline2_min" : 0, "key6_modline2_mmcfunction" : "Stop", "key6_modline2_mmcid" : 1, "key6_modline2_note" : 9, "key6_modline2_offset" : 0, "key6_modline2_oscroute" : "None", "key6_modline2_slew" : 0, "key6_modline2_source" : "Long Trig", "key6_modline2_table" : "Linear", "key6_modline2_velocity" : 127, "key6_modline3_bankmsb" : 0, "key6_modline3_cc" : 0, "key6_modline3_channel" : 2, "key6_modline3_destination" : "Note Set", "key6_modline3_device" : "SSCOM Port 1", "key6_modline3_displaylinked" : 0, "key6_modline3_enable" : true, "key6_modline3_gain" : 1.0, "key6_modline3_ledgreen" : "None", "key6_modline3_ledred" : "None", "key6_modline3_max" : 127, "key6_modline3_min" : 0, "key6_modline3_mmcfunction" : "Stop", "key6_modline3_mmcid" : 1, "key6_modline3_note" : 17, "key6_modline3_offset" : 0, "key6_modline3_oscroute" : "None", "key6_modline3_slew" : 0, "key6_modline3_source" : "Dbl Trig", "key6_modline3_table" : "Linear", "key6_modline3_velocity" : 127, "key6_modline4_bankmsb" : 0, "key6_modline4_cc" : 0, "key6_modline4_channel" : 1, "key6_modline4_destination" : "None", "key6_modline4_device" : "SSCOM Port 1", "key6_modline4_displaylinked" : 0, "key6_modline4_enable" : 0, "key6_modline4_gain" : 1.0, "key6_modline4_ledgreen" : "None", "key6_modline4_ledred" : "None", "key6_modline4_max" : 127, "key6_modline4_min" : 0, "key6_modline4_mmcfunction" : "Stop", "key6_modline4_mmcid" : 1, "key6_modline4_note" : 60, "key6_modline4_offset" : 0, "key6_modline4_oscroute" : "None", "key6_modline4_slew" : 0, "key6_modline4_source" : "None", "key6_modline4_table" : "Linear", "key6_modline4_velocity" : 127, "key6_modline5_bankmsb" : 0, "key6_modline5_cc" : 0, "key6_modline5_channel" : 1, "key6_modline5_destination" : "None", "key6_modline5_device" : "SSCOM Port 1", "key6_modline5_displaylinked" : 0, "key6_modline5_enable" : 0, "key6_modline5_gain" : 1.0, "key6_modline5_ledgreen" : "None", "key6_modline5_ledred" : "None", "key6_modline5_max" : 127, "key6_modline5_min" : 0, "key6_modline5_mmcfunction" : "Stop", "key6_modline5_mmcid" : 1, "key6_modline5_note" : 60, "key6_modline5_offset" : 0, "key6_modline5_oscroute" : "None", "key6_modline5_slew" : 0, "key6_modline5_source" : "None", "key6_modline5_table" : "Linear", "key6_modline5_velocity" : 127, "key6_modline6_bankmsb" : 0, "key6_modline6_cc" : 0, "key6_modline6_channel" : 1, "key6_modline6_destination" : "None", "key6_modline6_device" : "SSCOM Port 1", "key6_modline6_displaylinked" : 0, "key6_modline6_enable" : 0, "key6_modline6_gain" : 1.0, "key6_modline6_ledgreen" : "None", "key6_modline6_ledred" : "None", "key6_modline6_max" : 127, "key6_modline6_min" : 0, "key6_modline6_mmcfunction" : "Stop", "key6_modline6_mmcid" : 1, "key6_modline6_note" : 60, "key6_modline6_offset" : 0, "key6_modline6_oscroute" : "None", "key6_modline6_slew" : 0, "key6_modline6_source" : "None", "key6_modline6_table" : "Linear", "key6_modline6_velocity" : 127, "key7_modline1_bankmsb" : 0, "key7_modline1_cc" : 115, "key7_modline1_channel" : 2, "key7_modline1_destination" : "Note Set", "key7_modline1_device" : "SSCOM Port 1", "key7_modline1_displaylinked" : 1, "key7_modline1_enable" : true, "key7_modline1_gain" : 1.0, "key7_modline1_ledgreen" : "None", "key7_modline1_ledred" : "None", "key7_modline1_max" : 127, "key7_modline1_min" : 0, "key7_modline1_mmcfunction" : "Stop", "key7_modline1_mmcid" : 1, "key7_modline1_note" : 3, "key7_modline1_offset" : 0, "key7_modline1_oscroute" : "None", "key7_modline1_slew" : 0, "key7_modline1_source" : "Foot On", "key7_modline1_table" : "Linear", "key7_modline1_velocity" : 127, "key7_modline2_bankmsb" : 0, "key7_modline2_cc" : 0, "key7_modline2_channel" : 2, "key7_modline2_destination" : "Note Set", "key7_modline2_device" : "SSCOM Port 1", "key7_modline2_displaylinked" : 0, "key7_modline2_enable" : true, "key7_modline2_gain" : 1.0, "key7_modline2_ledgreen" : "None", "key7_modline2_ledred" : "None", "key7_modline2_max" : 127, "key7_modline2_min" : 0, "key7_modline2_mmcfunction" : "Stop", "key7_modline2_mmcid" : 1, "key7_modline2_note" : 11, "key7_modline2_offset" : 0, "key7_modline2_oscroute" : "None", "key7_modline2_slew" : 0, "key7_modline2_source" : "Long Trig", "key7_modline2_table" : "Linear", "key7_modline2_velocity" : 127, "key7_modline3_bankmsb" : 0, "key7_modline3_cc" : 0, "key7_modline3_channel" : 2, "key7_modline3_destination" : "Note Set", "key7_modline3_device" : "SSCOM Port 1", "key7_modline3_displaylinked" : 0, "key7_modline3_enable" : true, "key7_modline3_gain" : 1.0, "key7_modline3_ledgreen" : "None", "key7_modline3_ledred" : "None", "key7_modline3_max" : 127, "key7_modline3_min" : 0, "key7_modline3_mmcfunction" : "Stop", "key7_modline3_mmcid" : 1, "key7_modline3_note" : 19, "key7_modline3_offset" : 0, "key7_modline3_oscroute" : "None", "key7_modline3_slew" : 0, "key7_modline3_source" : "Dbl Trig", "key7_modline3_table" : "Linear", "key7_modline3_velocity" : 127, "key7_modline4_bankmsb" : 0, "key7_modline4_cc" : 0, "key7_modline4_channel" : 1, "key7_modline4_destination" : "None", "key7_modline4_device" : "SSCOM Port 1", "key7_modline4_displaylinked" : 0, "key7_modline4_enable" : 0, "key7_modline4_gain" : 1.0, "key7_modline4_ledgreen" : "None", "key7_modline4_ledred" : "None", "key7_modline4_max" : 127, "key7_modline4_min" : 0, "key7_modline4_mmcfunction" : "Stop", "key7_modline4_mmcid" : 1, "key7_modline4_note" : 60, "key7_modline4_offset" : 0, "key7_modline4_oscroute" : "None", "key7_modline4_slew" : 0, "key7_modline4_source" : "None", "key7_modline4_table" : "Linear", "key7_modline4_velocity" : 127, "key7_modline5_bankmsb" : 0, "key7_modline5_cc" : 0, "key7_modline5_channel" : 1, "key7_modline5_destination" : "None", "key7_modline5_device" : "SSCOM Port 1", "key7_modline5_displaylinked" : 0, "key7_modline5_enable" : 0, "key7_modline5_gain" : 1.0, "key7_modline5_ledgreen" : "None", "key7_modline5_ledred" : "None", "key7_modline5_max" : 127, "key7_modline5_min" : 0, "key7_modline5_mmcfunction" : "Stop", "key7_modline5_mmcid" : 1, "key7_modline5_note" : 60, "key7_modline5_offset" : 0, "key7_modline5_oscroute" : "None", "key7_modline5_slew" : 0, "key7_modline5_source" : "None", "key7_modline5_table" : "Linear", "key7_modline5_velocity" : 127, "key7_modline6_bankmsb" : 0, "key7_modline6_cc" : 0, "key7_modline6_channel" : 1, "key7_modline6_destination" : "None", "key7_modline6_device" : "SSCOM Port 1", "key7_modline6_displaylinked" : 0, "key7_modline6_enable" : 0, "key7_modline6_gain" : 1.0, "key7_modline6_ledgreen" : "None", "key7_modline6_ledred" : "None", "key7_modline6_max" : 127, "key7_modline6_min" : 0, "key7_modline6_mmcfunction" : "Stop", "key7_modline6_mmcid" : 1, "key7_modline6_note" : 60, "key7_modline6_offset" : 0, "key7_modline6_oscroute" : "None", "key7_modline6_slew" : 0, "key7_modline6_source" : "None", "key7_modline6_table" : "Linear", "key7_modline6_velocity" : 127, "key8_modline1_bankmsb" : 0, "key8_modline1_cc" : 115, "key8_modline1_channel" : 2, "key8_modline1_destination" : "Note Set", "key8_modline1_device" : "SSCOM Port 1", "key8_modline1_displaylinked" : 1, "key8_modline1_enable" : true, "key8_modline1_gain" : 1.0, "key8_modline1_ledgreen" : "None", "key8_modline1_ledred" : "None", "key8_modline1_max" : 127, "key8_modline1_min" : 0, "key8_modline1_mmcfunction" : "Stop", "key8_modline1_mmcid" : 1, "key8_modline1_note" : 5, "key8_modline1_offset" : 0, "key8_modline1_oscroute" : "None", "key8_modline1_slew" : 0, "key8_modline1_source" : "Foot On", "key8_modline1_table" : "Linear", "key8_modline1_velocity" : 127, "key8_modline2_bankmsb" : 0, "key8_modline2_cc" : 0, "key8_modline2_channel" : 2, "key8_modline2_destination" : "Note Set", "key8_modline2_device" : "SSCOM Port 1", "key8_modline2_displaylinked" : 0, "key8_modline2_enable" : true, "key8_modline2_gain" : 1.0, "key8_modline2_ledgreen" : "None", "key8_modline2_ledred" : "None", "key8_modline2_max" : 127, "key8_modline2_min" : 0, "key8_modline2_mmcfunction" : "Stop", "key8_modline2_mmcid" : 1, "key8_modline2_note" : 13, "key8_modline2_offset" : 0, "key8_modline2_oscroute" : "None", "key8_modline2_slew" : 0, "key8_modline2_source" : "Long Trig", "key8_modline2_table" : "Linear", "key8_modline2_velocity" : 127, "key8_modline3_bankmsb" : 0, "key8_modline3_cc" : 0, "key8_modline3_channel" : 2, "key8_modline3_destination" : "Note Set", "key8_modline3_device" : "SSCOM Port 1", "key8_modline3_displaylinked" : 0, "key8_modline3_enable" : true, "key8_modline3_gain" : 1.0, "key8_modline3_ledgreen" : "None", "key8_modline3_ledred" : "None", "key8_modline3_max" : 127, "key8_modline3_min" : 0, "key8_modline3_mmcfunction" : "Stop", "key8_modline3_mmcid" : 1, "key8_modline3_note" : 21, "key8_modline3_offset" : 0, "key8_modline3_oscroute" : "None", "key8_modline3_slew" : 0, "key8_modline3_source" : "Dbl Trig", "key8_modline3_table" : "Linear", "key8_modline3_velocity" : 127, "key8_modline4_bankmsb" : 0, "key8_modline4_cc" : 0, "key8_modline4_channel" : 1, "key8_modline4_destination" : "None", "key8_modline4_device" : "SSCOM Port 1", "key8_modline4_displaylinked" : 0, "key8_modline4_enable" : 0, "key8_modline4_gain" : 1.0, "key8_modline4_ledgreen" : "None", "key8_modline4_ledred" : "None", "key8_modline4_max" : 127, "key8_modline4_min" : 0, "key8_modline4_mmcfunction" : "Stop", "key8_modline4_mmcid" : 1, "key8_modline4_note" : 60, "key8_modline4_offset" : 0, "key8_modline4_oscroute" : "None", "key8_modline4_slew" : 0, "key8_modline4_source" : "None", "key8_modline4_table" : "Linear", "key8_modline4_velocity" : 127, "key8_modline5_bankmsb" : 0, "key8_modline5_cc" : 0, "key8_modline5_channel" : 1, "key8_modline5_destination" : "None", "key8_modline5_device" : "SSCOM Port 1", "key8_modline5_displaylinked" : 0, "key8_modline5_enable" : 0, "key8_modline5_gain" : 1.0, "key8_modline5_ledgreen" : "None", "key8_modline5_ledred" : "None", "key8_modline5_max" : 127, "key8_modline5_min" : 0, "key8_modline5_mmcfunction" : "Stop", "key8_modline5_mmcid" : 1, "key8_modline5_note" : 60, "key8_modline5_offset" : 0, "key8_modline5_oscroute" : "None", "key8_modline5_slew" : 0, "key8_modline5_source" : "None", "key8_modline5_table" : "Linear", "key8_modline5_velocity" : 127, "key8_modline6_bankmsb" : 0, "key8_modline6_cc" : 0, "key8_modline6_channel" : 1, "key8_modline6_destination" : "None", "key8_modline6_device" : "SSCOM Port 1", "key8_modline6_displaylinked" : 0, "key8_modline6_enable" : 0, "key8_modline6_gain" : 1.0, "key8_modline6_ledgreen" : "None", "key8_modline6_ledred" : "None", "key8_modline6_max" : 127, "key8_modline6_min" : 0, "key8_modline6_mmcfunction" : "Stop", "key8_modline6_mmcid" : 1, "key8_modline6_note" : 60, "key8_modline6_offset" : 0, "key8_modline6_oscroute" : "None", "key8_modline6_slew" : 0, "key8_modline6_source" : "None", "key8_modline6_table" : "Linear", "key8_modline6_velocity" : 127, "key9_modline1_bankmsb" : 0, "key9_modline1_cc" : 115, "key9_modline1_channel" : 2, "key9_modline1_destination" : "Note Set", "key9_modline1_device" : "SSCOM Port 1", "key9_modline1_displaylinked" : 1, "key9_modline1_enable" : true, "key9_modline1_gain" : 1.0, "key9_modline1_ledgreen" : "None", "key9_modline1_ledred" : "None", "key9_modline1_max" : 127, "key9_modline1_min" : 0, "key9_modline1_mmcfunction" : "Stop", "key9_modline1_mmcid" : 1, "key9_modline1_note" : 7, "key9_modline1_offset" : 0, "key9_modline1_oscroute" : "None", "key9_modline1_slew" : 0, "key9_modline1_source" : "Foot On", "key9_modline1_table" : "Linear", "key9_modline1_velocity" : 127, "key9_modline2_bankmsb" : 0, "key9_modline2_cc" : 0, "key9_modline2_channel" : 2, "key9_modline2_destination" : "Note Set", "key9_modline2_device" : "SSCOM Port 1", "key9_modline2_displaylinked" : 0, "key9_modline2_enable" : true, "key9_modline2_gain" : 1.0, "key9_modline2_ledgreen" : "None", "key9_modline2_ledred" : "None", "key9_modline2_max" : 127, "key9_modline2_min" : 0, "key9_modline2_mmcfunction" : "Stop", "key9_modline2_mmcid" : 1, "key9_modline2_note" : 15, "key9_modline2_offset" : 0, "key9_modline2_oscroute" : "None", "key9_modline2_slew" : 0, "key9_modline2_source" : "Long Trig", "key9_modline2_table" : "Linear", "key9_modline2_velocity" : 127, "key9_modline3_bankmsb" : 0, "key9_modline3_cc" : 0, "key9_modline3_channel" : 2, "key9_modline3_destination" : "Note Set", "key9_modline3_device" : "SSCOM Port 1", "key9_modline3_displaylinked" : 0, "key9_modline3_enable" : true, "key9_modline3_gain" : 1.0, "key9_modline3_ledgreen" : "None", "key9_modline3_ledred" : "None", "key9_modline3_max" : 127, "key9_modline3_min" : 0, "key9_modline3_mmcfunction" : "Stop", "key9_modline3_mmcid" : 1, "key9_modline3_note" : 23, "key9_modline3_offset" : 0, "key9_modline3_oscroute" : "None", "key9_modline3_slew" : 0, "key9_modline3_source" : "Dbl Trig", "key9_modline3_table" : "Linear", "key9_modline3_velocity" : 127, "key9_modline4_bankmsb" : 0, "key9_modline4_cc" : 0, "key9_modline4_channel" : 1, "key9_modline4_destination" : "None", "key9_modline4_device" : "SSCOM Port 1", "key9_modline4_displaylinked" : 0, "key9_modline4_enable" : 0, "key9_modline4_gain" : 1.0, "key9_modline4_ledgreen" : "None", "key9_modline4_ledred" : "None", "key9_modline4_max" : 127, "key9_modline4_min" : 0, "key9_modline4_mmcfunction" : "Stop", "key9_modline4_mmcid" : 1, "key9_modline4_note" : 60, "key9_modline4_offset" : 0, "key9_modline4_oscroute" : "None", "key9_modline4_slew" : 0, "key9_modline4_source" : "None", "key9_modline4_table" : "Linear", "key9_modline4_velocity" : 127, "key9_modline5_bankmsb" : 0, "key9_modline5_cc" : 0, "key9_modline5_channel" : 1, "key9_modline5_destination" : "None", "key9_modline5_device" : "SSCOM Port 1", "key9_modline5_displaylinked" : 0, "key9_modline5_enable" : 0, "key9_modline5_gain" : 1.0, "key9_modline5_ledgreen" : "None", "key9_modline5_ledred" : "None", "key9_modline5_max" : 127, "key9_modline5_min" : 0, "key9_modline5_mmcfunction" : "Stop", "key9_modline5_mmcid" : 1, "key9_modline5_note" : 60, "key9_modline5_offset" : 0, "key9_modline5_oscroute" : "None", "key9_modline5_slew" : 0, "key9_modline5_source" : "None", "key9_modline5_table" : "Linear", "key9_modline5_velocity" : 127, "key9_modline6_bankmsb" : 0, "key9_modline6_cc" : 0, "key9_modline6_channel" : 1, "key9_modline6_destination" : "None", "key9_modline6_device" : "SSCOM Port 1", "key9_modline6_displaylinked" : 0, "key9_modline6_enable" : 0, "key9_modline6_gain" : 1.0, "key9_modline6_ledgreen" : "None", "key9_modline6_ledred" : "None", "key9_modline6_max" : 127, "key9_modline6_min" : 0, "key9_modline6_mmcfunction" : "Stop", "key9_modline6_mmcid" : 1, "key9_modline6_note" : 60, "key9_modline6_offset" : 0, "key9_modline6_oscroute" : "None", "key9_modline6_slew" : 0, "key9_modline6_source" : "None", "key9_modline6_table" : "Linear", "key9_modline6_velocity" : 127, "nav_displaymode" : "Always", "nav_modline1_" : null, "nav_modline1_bankmsb" : 0, "nav_modline1_cc" : 71, "nav_modline1_channel" : 2, "nav_modline1_destination" : "Note Set", "nav_modline1_device" : "SSCOM Port 1", "nav_modline1_displaylinked" : 1, "nav_modline1_enable" : true, "nav_modline1_gain" : 1.0, "nav_modline1_max" : 127, "nav_modline1_min" : 127, "nav_modline1_mmcfunction" : "Stop", "nav_modline1_mmcid" : 1, "nav_modline1_note" : 126, "nav_modline1_offset" : 0, "nav_modline1_oscroute" : "None", "nav_modline1_slew" : 0, "nav_modline1_source" : "Init", "nav_modline1_table" : "Linear", "nav_modline1_velocity" : 127, "nav_modline2_bankmsb" : 0, "nav_modline2_cc" : 72, "nav_modline2_channel" : 9, "nav_modline2_destination" : "CC", "nav_modline2_device" : "SSCOM Port 1", "nav_modline2_displaylinked" : 0, "nav_modline2_enable" : true, "nav_modline2_gain" : 1.0, "nav_modline2_max" : 127, "nav_modline2_min" : 0, "nav_modline2_mmcfunction" : "Stop", "nav_modline2_mmcid" : 1, "nav_modline2_note" : 72, "nav_modline2_offset" : 0, "nav_modline2_oscroute" : "None", "nav_modline2_slew" : 0, "nav_modline2_source" : "Nav S Foot On", "nav_modline2_table" : "Linear", "nav_modline2_velocity" : 127, "nav_modline3_bankmsb" : 0, "nav_modline3_cc" : 73, "nav_modline3_channel" : 9, "nav_modline3_destination" : "CC", "nav_modline3_device" : "SSCOM Port 1", "nav_modline3_displaylinked" : 0, "nav_modline3_enable" : false, "nav_modline3_gain" : 1.0, "nav_modline3_max" : 127, "nav_modline3_min" : 0, "nav_modline3_mmcfunction" : "Stop", "nav_modline3_mmcid" : 1, "nav_modline3_note" : 60, "nav_modline3_offset" : 0, "nav_modline3_oscroute" : "None", "nav_modline3_slew" : 0, "nav_modline3_source" : "Nav N Foot On", "nav_modline3_table" : "Linear", "nav_modline3_velocity" : 127, "nav_modline4_bankmsb" : 0, "nav_modline4_cc" : 74, "nav_modline4_channel" : 9, "nav_modline4_destination" : "CC", "nav_modline4_device" : "SSCOM Port 1", "nav_modline4_displaylinked" : 0, "nav_modline4_enable" : false, "nav_modline4_gain" : 1.0, "nav_modline4_max" : 127, "nav_modline4_min" : 0, "nav_modline4_mmcfunction" : "Stop", "nav_modline4_mmcid" : 1, "nav_modline4_note" : 60, "nav_modline4_offset" : 0, "nav_modline4_oscroute" : "None", "nav_modline4_slew" : 0, "nav_modline4_source" : "Nav S Foot On", "nav_modline4_table" : "Linear", "nav_modline4_velocity" : 127, "nav_modline5_bankmsb" : 0, "nav_modline5_cc" : 0, "nav_modline5_channel" : 1, "nav_modline5_destination" : "None", "nav_modline5_device" : "SoftStep Expander", "nav_modline5_displaylinked" : 0, "nav_modline5_enable" : 0, "nav_modline5_gain" : 1.0, "nav_modline5_max" : 127, "nav_modline5_min" : 0, "nav_modline5_mmcfunction" : "Stop", "nav_modline5_mmcid" : 1, "nav_modline5_note" : 60, "nav_modline5_offset" : 0, "nav_modline5_oscroute" : "None", "nav_modline5_slew" : 0, "nav_modline5_source" : "None", "nav_modline5_table" : "Linear", "nav_modline5_velocity" : 127, "nav_modline6_bankmsb" : 0, "nav_modline6_cc" : 0, "nav_modline6_channel" : 1, "nav_modline6_destination" : "None", "nav_modline6_device" : "SoftStep Expander", "nav_modline6_displaylinked" : 0, "nav_modline6_enable" : 0, "nav_modline6_gain" : 1.0, "nav_modline6_max" : 127, "nav_modline6_min" : 0, "nav_modline6_mmcfunction" : "Stop", "nav_modline6_mmcid" : 1, "nav_modline6_note" : 60, "nav_modline6_offset" : 0, "nav_modline6_oscroute" : "None", "nav_modline6_slew" : 0, "nav_modline6_source" : "None", "nav_modline6_table" : "Linear", "nav_modline6_velocity" : 127, "nav_modlinemode" : 0, "nav_name" : "CLIP", "nav_prefix" : "", "preset_displayname" : "BwCL", "preset_name" : "Bitwig_Clips" } -------------------------------------------------------------------------------- /SoftStep_Bitwig/Bitwig_FX.softsteppreset: -------------------------------------------------------------------------------- 1 | { "10_key_displaymode" : "Always", "10_key_name" : "On", "10_key_prefix" : "", "1_key_displaymode" : "Always", "1_key_name" : "TR_1", "1_key_prefix" : "", "2_key_displaymode" : "Always", "2_key_name" : "TR_2", "2_key_prefix" : "", "3_key_displaymode" : "Always", "3_key_name" : "TR_3", "3_key_prefix" : "", "4_key_displaymode" : "Always", "4_key_name" : "TR_4", "4_key_prefix" : "", "5_key_displaymode" : "Always", "5_key_name" : "DVCE", "5_key_prefix" : "", "6_key_displaymode" : "Always", "6_key_name" : "MA_1", "6_key_prefix" : "", "7_key_displaymode" : "Always", "7_key_name" : "MA_2", "7_key_prefix" : "", "8_key_displaymode" : "Always", "8_key_name" : "MA-3", "8_key_prefix" : "", "9_key_displaymode" : "Always", "9_key_name" : "MA_4", "9_key_prefix" : "", "key10_modline1_bankmsb" : 0, "key10_modline1_cc" : 108, "key10_modline1_channel" : 2, "key10_modline1_destination" : "CC", "key10_modline1_device" : "SSCOM Port 1", "key10_modline1_displaylinked" : false, "key10_modline1_enable" : true, "key10_modline1_gain" : 1.0, "key10_modline1_ledgreen" : "None", "key10_modline1_ledred" : "None", "key10_modline1_max" : 127, "key10_modline1_min" : 0, "key10_modline1_mmcfunction" : "Stop", "key10_modline1_mmcid" : 1, "key10_modline1_note" : 16, "key10_modline1_offset" : 0, "key10_modline1_oscroute" : "None", "key10_modline1_slew" : 0, "key10_modline1_source" : "Foot On", "key10_modline1_table" : "Linear", "key10_modline1_velocity" : 127, "key10_modline2_bankmsb" : 0, "key10_modline2_cc" : 75, "key10_modline2_channel" : 9, "key10_modline2_destination" : "CC", "key10_modline2_device" : "SSCOM Port 1", "key10_modline2_displaylinked" : 0, "key10_modline2_enable" : false, "key10_modline2_gain" : 1.0, "key10_modline2_ledgreen" : "None", "key10_modline2_ledred" : "None", "key10_modline2_max" : 127, "key10_modline2_min" : 0, "key10_modline2_mmcfunction" : "Stop", "key10_modline2_mmcid" : 1, "key10_modline2_note" : 73, "key10_modline2_offset" : 0, "key10_modline2_oscroute" : "None", "key10_modline2_slew" : 0, "key10_modline2_source" : "Long Trig", "key10_modline2_table" : "Linear", "key10_modline2_velocity" : 127, "key10_modline3_bankmsb" : 0, "key10_modline3_cc" : 70, "key10_modline3_channel" : 9, "key10_modline3_destination" : "None", "key10_modline3_device" : "SSCOM Port 1", "key10_modline3_displaylinked" : true, "key10_modline3_enable" : false, "key10_modline3_gain" : 1.0, "key10_modline3_ledgreen" : "True", "key10_modline3_ledred" : "None", "key10_modline3_max" : 127, "key10_modline3_min" : 0, "key10_modline3_mmcfunction" : "Stop", "key10_modline3_mmcid" : 1, "key10_modline3_note" : 60, "key10_modline3_offset" : 0, "key10_modline3_oscroute" : "None", "key10_modline3_slew" : 0, "key10_modline3_source" : "None", "key10_modline3_table" : "Linear", "key10_modline3_velocity" : 127, "key10_modline4_bankmsb" : 0, "key10_modline4_cc" : 0, "key10_modline4_channel" : 1, "key10_modline4_destination" : "None", "key10_modline4_device" : "SSCOM Port 1", "key10_modline4_displaylinked" : 0, "key10_modline4_enable" : 0, "key10_modline4_gain" : 1.0, "key10_modline4_ledgreen" : "None", "key10_modline4_ledred" : "None", "key10_modline4_max" : 127, "key10_modline4_min" : 0, "key10_modline4_mmcfunction" : "Stop", "key10_modline4_mmcid" : 1, "key10_modline4_note" : 60, "key10_modline4_offset" : 0, "key10_modline4_oscroute" : "None", "key10_modline4_slew" : 0, "key10_modline4_source" : "None", "key10_modline4_table" : "Linear", "key10_modline4_velocity" : 127, "key10_modline5_bankmsb" : 0, "key10_modline5_cc" : 0, "key10_modline5_channel" : 1, "key10_modline5_destination" : "None", "key10_modline5_device" : "SSCOM Port 1", "key10_modline5_displaylinked" : 0, "key10_modline5_enable" : 0, "key10_modline5_gain" : 1.0, "key10_modline5_ledgreen" : "None", "key10_modline5_ledred" : "None", "key10_modline5_max" : 127, "key10_modline5_min" : 0, "key10_modline5_mmcfunction" : "Stop", "key10_modline5_mmcid" : 1, "key10_modline5_note" : 60, "key10_modline5_offset" : 0, "key10_modline5_oscroute" : "None", "key10_modline5_slew" : 0, "key10_modline5_source" : "None", "key10_modline5_table" : "Linear", "key10_modline5_velocity" : 127, "key10_modline6_bankmsb" : 0, "key10_modline6_cc" : 0, "key10_modline6_channel" : 1, "key10_modline6_destination" : "None", "key10_modline6_device" : "SSCOM Port 1", "key10_modline6_displaylinked" : 0, "key10_modline6_enable" : 0, "key10_modline6_gain" : 1.0, "key10_modline6_ledgreen" : "None", "key10_modline6_ledred" : "None", "key10_modline6_max" : 127, "key10_modline6_min" : 0, "key10_modline6_mmcfunction" : "Stop", "key10_modline6_mmcid" : 1, "key10_modline6_note" : 60, "key10_modline6_offset" : 0, "key10_modline6_oscroute" : "None", "key10_modline6_slew" : 0, "key10_modline6_source" : "None", "key10_modline6_table" : "Linear", "key10_modline6_velocity" : 127, "key1_modline1_bankmsb" : 0, "key1_modline1_cc" : 104, "key1_modline1_channel" : 2, "key1_modline1_destination" : "CC", "key1_modline1_device" : "SSCOM Port 1", "key1_modline1_displaylinked" : 1, "key1_modline1_enable" : true, "key1_modline1_gain" : 1.0, "key1_modline1_ledgreen" : "None", "key1_modline1_ledred" : "None", "key1_modline1_max" : 127, "key1_modline1_min" : 0, "key1_modline1_mmcfunction" : "Stop", "key1_modline1_mmcid" : 1, "key1_modline1_note" : 0, "key1_modline1_offset" : 0, "key1_modline1_oscroute" : "None", "key1_modline1_slew" : 0, "key1_modline1_source" : "Foot On", "key1_modline1_table" : "Linear", "key1_modline1_velocity" : 127, "key1_modline2_bankmsb" : 0, "key1_modline2_cc" : 0, "key1_modline2_channel" : 2, "key1_modline2_destination" : "Note Set", "key1_modline2_device" : "SSCOM Port 1", "key1_modline2_displaylinked" : 0, "key1_modline2_enable" : true, "key1_modline2_gain" : 1.0, "key1_modline2_ledgreen" : "None", "key1_modline2_ledred" : "None", "key1_modline2_max" : 127, "key1_modline2_min" : 127, "key1_modline2_mmcfunction" : "Stop", "key1_modline2_mmcid" : 1, "key1_modline2_note" : 127, "key1_modline2_offset" : 0, "key1_modline2_oscroute" : "None", "key1_modline2_slew" : 0, "key1_modline2_source" : "Init", "key1_modline2_table" : "Linear", "key1_modline2_velocity" : 127, "key1_modline3_bankmsb" : 0, "key1_modline3_cc" : 0, "key1_modline3_channel" : 2, "key1_modline3_destination" : "Note Set", "key1_modline3_device" : "SSCOM Port 1", "key1_modline3_displaylinked" : 0, "key1_modline3_enable" : true, "key1_modline3_gain" : 1.0, "key1_modline3_ledgreen" : "None", "key1_modline3_ledred" : "None", "key1_modline3_max" : 127, "key1_modline3_min" : 0, "key1_modline3_mmcfunction" : "Stop", "key1_modline3_mmcid" : 1, "key1_modline3_note" : 8, "key1_modline3_offset" : 0, "key1_modline3_oscroute" : "None", "key1_modline3_slew" : 0, "key1_modline3_source" : "Long Trig", "key1_modline3_table" : "Linear", "key1_modline3_velocity" : 127, "key1_modline4_bankmsb" : 0, "key1_modline4_cc" : 0, "key1_modline4_channel" : 1, "key1_modline4_destination" : "None", "key1_modline4_device" : "SSCOM Port 1", "key1_modline4_displaylinked" : 0, "key1_modline4_enable" : 0, "key1_modline4_gain" : 1.0, "key1_modline4_ledgreen" : "None", "key1_modline4_ledred" : "None", "key1_modline4_max" : 127, "key1_modline4_min" : 0, "key1_modline4_mmcfunction" : "Stop", "key1_modline4_mmcid" : 1, "key1_modline4_note" : 60, "key1_modline4_offset" : 0, "key1_modline4_oscroute" : "None", "key1_modline4_slew" : 0, "key1_modline4_source" : "None", "key1_modline4_table" : "Linear", "key1_modline4_velocity" : 127, "key1_modline5_bankmsb" : 0, "key1_modline5_cc" : 0, "key1_modline5_channel" : 1, "key1_modline5_destination" : "None", "key1_modline5_device" : "SSCOM Port 1", "key1_modline5_displaylinked" : 0, "key1_modline5_enable" : 0, "key1_modline5_gain" : 1.0, "key1_modline5_ledgreen" : "None", "key1_modline5_ledred" : "None", "key1_modline5_max" : 127, "key1_modline5_min" : 0, "key1_modline5_mmcfunction" : "Stop", "key1_modline5_mmcid" : 1, "key1_modline5_note" : 60, "key1_modline5_offset" : 0, "key1_modline5_oscroute" : "None", "key1_modline5_slew" : 0, "key1_modline5_source" : "None", "key1_modline5_table" : "Linear", "key1_modline5_velocity" : 127, "key1_modline6_bankmsb" : 0, "key1_modline6_cc" : 0, "key1_modline6_channel" : 1, "key1_modline6_destination" : "None", "key1_modline6_device" : "SSCOM Port 1", "key1_modline6_displaylinked" : 0, "key1_modline6_enable" : 0, "key1_modline6_gain" : 1.0, "key1_modline6_ledgreen" : "None", "key1_modline6_ledred" : "None", "key1_modline6_max" : 127, "key1_modline6_min" : 0, "key1_modline6_mmcfunction" : "Stop", "key1_modline6_mmcid" : 1, "key1_modline6_note" : 60, "key1_modline6_offset" : 0, "key1_modline6_oscroute" : "None", "key1_modline6_slew" : 0, "key1_modline6_source" : "None", "key1_modline6_table" : "Linear", "key1_modline6_velocity" : 127, "key2_modline1_bankmsb" : 0, "key2_modline1_cc" : 105, "key2_modline1_channel" : 2, "key2_modline1_destination" : "CC", "key2_modline1_device" : "SSCOM Port 1", "key2_modline1_displaylinked" : 1, "key2_modline1_enable" : true, "key2_modline1_gain" : 1.0, "key2_modline1_ledgreen" : "None", "key2_modline1_ledred" : "None", "key2_modline1_max" : 127, "key2_modline1_min" : 0, "key2_modline1_mmcfunction" : "Stop", "key2_modline1_mmcid" : 1, "key2_modline1_note" : 2, "key2_modline1_offset" : 0, "key2_modline1_oscroute" : "None", "key2_modline1_slew" : 0, "key2_modline1_source" : "Foot On", "key2_modline1_table" : "Linear", "key2_modline1_velocity" : 127, "key2_modline2_bankmsb" : 0, "key2_modline2_cc" : 0, "key2_modline2_channel" : 2, "key2_modline2_destination" : "Note Set", "key2_modline2_device" : "SSCOM Port 1", "key2_modline2_displaylinked" : 0, "key2_modline2_enable" : true, "key2_modline2_gain" : 1.0, "key2_modline2_ledgreen" : "None", "key2_modline2_ledred" : "None", "key2_modline2_max" : 127, "key2_modline2_min" : 0, "key2_modline2_mmcfunction" : "Stop", "key2_modline2_mmcid" : 1, "key2_modline2_note" : 10, "key2_modline2_offset" : 0, "key2_modline2_oscroute" : "None", "key2_modline2_slew" : 0, "key2_modline2_source" : "Long Trig", "key2_modline2_table" : "Linear", "key2_modline2_velocity" : 127, "key2_modline3_bankmsb" : 0, "key2_modline3_cc" : 0, "key2_modline3_channel" : 1, "key2_modline3_destination" : "None", "key2_modline3_device" : "SSCOM Port 1", "key2_modline3_displaylinked" : 0, "key2_modline3_enable" : 0, "key2_modline3_gain" : 1.0, "key2_modline3_ledgreen" : "None", "key2_modline3_ledred" : "None", "key2_modline3_max" : 127, "key2_modline3_min" : 0, "key2_modline3_mmcfunction" : "Stop", "key2_modline3_mmcid" : 1, "key2_modline3_note" : 60, "key2_modline3_offset" : 0, "key2_modline3_oscroute" : "None", "key2_modline3_slew" : 0, "key2_modline3_source" : "None", "key2_modline3_table" : "Linear", "key2_modline3_velocity" : 127, "key2_modline4_bankmsb" : 0, "key2_modline4_cc" : 0, "key2_modline4_channel" : 1, "key2_modline4_destination" : "None", "key2_modline4_device" : "SSCOM Port 1", "key2_modline4_displaylinked" : 0, "key2_modline4_enable" : 0, "key2_modline4_gain" : 1.0, "key2_modline4_ledgreen" : "None", "key2_modline4_ledred" : "None", "key2_modline4_max" : 127, "key2_modline4_min" : 0, "key2_modline4_mmcfunction" : "Stop", "key2_modline4_mmcid" : 1, "key2_modline4_note" : 60, "key2_modline4_offset" : 0, "key2_modline4_oscroute" : "None", "key2_modline4_slew" : 0, "key2_modline4_source" : "None", "key2_modline4_table" : "Linear", "key2_modline4_velocity" : 127, "key2_modline5_bankmsb" : 0, "key2_modline5_cc" : 0, "key2_modline5_channel" : 1, "key2_modline5_destination" : "None", "key2_modline5_device" : "SSCOM Port 1", "key2_modline5_displaylinked" : 0, "key2_modline5_enable" : 0, "key2_modline5_gain" : 1.0, "key2_modline5_ledgreen" : "None", "key2_modline5_ledred" : "None", "key2_modline5_max" : 127, "key2_modline5_min" : 0, "key2_modline5_mmcfunction" : "Stop", "key2_modline5_mmcid" : 1, "key2_modline5_note" : 60, "key2_modline5_offset" : 0, "key2_modline5_oscroute" : "None", "key2_modline5_slew" : 0, "key2_modline5_source" : "None", "key2_modline5_table" : "Linear", "key2_modline5_velocity" : 127, "key2_modline6_bankmsb" : 0, "key2_modline6_cc" : 0, "key2_modline6_channel" : 1, "key2_modline6_destination" : "None", "key2_modline6_device" : "SSCOM Port 1", "key2_modline6_displaylinked" : 0, "key2_modline6_enable" : 0, "key2_modline6_gain" : 1.0, "key2_modline6_ledgreen" : "None", "key2_modline6_ledred" : "None", "key2_modline6_max" : 127, "key2_modline6_min" : 0, "key2_modline6_mmcfunction" : "Stop", "key2_modline6_mmcid" : 1, "key2_modline6_note" : 60, "key2_modline6_offset" : 0, "key2_modline6_oscroute" : "None", "key2_modline6_slew" : 0, "key2_modline6_source" : "None", "key2_modline6_table" : "Linear", "key2_modline6_velocity" : 127, "key3_modline1_bankmsb" : 0, "key3_modline1_cc" : 106, "key3_modline1_channel" : 2, "key3_modline1_destination" : "CC", "key3_modline1_device" : "SSCOM Port 1", "key3_modline1_displaylinked" : 1, "key3_modline1_enable" : true, "key3_modline1_gain" : 1.0, "key3_modline1_ledgreen" : "None", "key3_modline1_ledred" : "None", "key3_modline1_max" : 127, "key3_modline1_min" : 0, "key3_modline1_mmcfunction" : "Stop", "key3_modline1_mmcid" : 1, "key3_modline1_note" : 4, "key3_modline1_offset" : 0, "key3_modline1_oscroute" : "None", "key3_modline1_slew" : 0, "key3_modline1_source" : "Foot On", "key3_modline1_table" : "Linear", "key3_modline1_velocity" : 127, "key3_modline2_bankmsb" : 0, "key3_modline2_cc" : 0, "key3_modline2_channel" : 2, "key3_modline2_destination" : "Note Set", "key3_modline2_device" : "SSCOM Port 1", "key3_modline2_displaylinked" : 0, "key3_modline2_enable" : true, "key3_modline2_gain" : 1.0, "key3_modline2_ledgreen" : "None", "key3_modline2_ledred" : "None", "key3_modline2_max" : 127, "key3_modline2_min" : 0, "key3_modline2_mmcfunction" : "Stop", "key3_modline2_mmcid" : 1, "key3_modline2_note" : 12, "key3_modline2_offset" : 0, "key3_modline2_oscroute" : "None", "key3_modline2_slew" : 0, "key3_modline2_source" : "Long Trig", "key3_modline2_table" : "Linear", "key3_modline2_velocity" : 127, "key3_modline3_bankmsb" : 0, "key3_modline3_cc" : 0, "key3_modline3_channel" : 1, "key3_modline3_destination" : "None", "key3_modline3_device" : "SSCOM Port 1", "key3_modline3_displaylinked" : 0, "key3_modline3_enable" : 0, "key3_modline3_gain" : 1.0, "key3_modline3_ledgreen" : "None", "key3_modline3_ledred" : "None", "key3_modline3_max" : 127, "key3_modline3_min" : 0, "key3_modline3_mmcfunction" : "Stop", "key3_modline3_mmcid" : 1, "key3_modline3_note" : 60, "key3_modline3_offset" : 0, "key3_modline3_oscroute" : "None", "key3_modline3_slew" : 0, "key3_modline3_source" : "None", "key3_modline3_table" : "Linear", "key3_modline3_velocity" : 127, "key3_modline4_bankmsb" : 0, "key3_modline4_cc" : 0, "key3_modline4_channel" : 1, "key3_modline4_destination" : "None", "key3_modline4_device" : "SSCOM Port 1", "key3_modline4_displaylinked" : 0, "key3_modline4_enable" : 0, "key3_modline4_gain" : 1.0, "key3_modline4_ledgreen" : "None", "key3_modline4_ledred" : "None", "key3_modline4_max" : 127, "key3_modline4_min" : 0, "key3_modline4_mmcfunction" : "Stop", "key3_modline4_mmcid" : 1, "key3_modline4_note" : 60, "key3_modline4_offset" : 0, "key3_modline4_oscroute" : "None", "key3_modline4_slew" : 0, "key3_modline4_source" : "None", "key3_modline4_table" : "Linear", "key3_modline4_velocity" : 127, "key3_modline5_bankmsb" : 0, "key3_modline5_cc" : 0, "key3_modline5_channel" : 1, "key3_modline5_destination" : "None", "key3_modline5_device" : "SSCOM Port 1", "key3_modline5_displaylinked" : 0, "key3_modline5_enable" : 0, "key3_modline5_gain" : 1.0, "key3_modline5_ledgreen" : "None", "key3_modline5_ledred" : "None", "key3_modline5_max" : 127, "key3_modline5_min" : 0, "key3_modline5_mmcfunction" : "Stop", "key3_modline5_mmcid" : 1, "key3_modline5_note" : 60, "key3_modline5_offset" : 0, "key3_modline5_oscroute" : "None", "key3_modline5_slew" : 0, "key3_modline5_source" : "None", "key3_modline5_table" : "Linear", "key3_modline5_velocity" : 127, "key3_modline6_bankmsb" : 0, "key3_modline6_cc" : 0, "key3_modline6_channel" : 1, "key3_modline6_destination" : "None", "key3_modline6_device" : "SSCOM Port 1", "key3_modline6_displaylinked" : 0, "key3_modline6_enable" : 0, "key3_modline6_gain" : 1.0, "key3_modline6_ledgreen" : "None", "key3_modline6_ledred" : "None", "key3_modline6_max" : 127, "key3_modline6_min" : 0, "key3_modline6_mmcfunction" : "Stop", "key3_modline6_mmcid" : 1, "key3_modline6_note" : 60, "key3_modline6_offset" : 0, "key3_modline6_oscroute" : "None", "key3_modline6_slew" : 0, "key3_modline6_source" : "None", "key3_modline6_table" : "Linear", "key3_modline6_velocity" : 127, "key4_modline1_bankmsb" : 0, "key4_modline1_cc" : 107, "key4_modline1_channel" : 2, "key4_modline1_destination" : "CC", "key4_modline1_device" : "SSCOM Port 1", "key4_modline1_displaylinked" : 1, "key4_modline1_enable" : true, "key4_modline1_gain" : 1.0, "key4_modline1_ledgreen" : "None", "key4_modline1_ledred" : "None", "key4_modline1_max" : 127, "key4_modline1_min" : 0, "key4_modline1_mmcfunction" : "Stop", "key4_modline1_mmcid" : 1, "key4_modline1_note" : 6, "key4_modline1_offset" : 0, "key4_modline1_oscroute" : "None", "key4_modline1_slew" : 0, "key4_modline1_source" : "Foot On", "key4_modline1_table" : "Linear", "key4_modline1_velocity" : 127, "key4_modline2_bankmsb" : 0, "key4_modline2_cc" : 0, "key4_modline2_channel" : 2, "key4_modline2_destination" : "Note Set", "key4_modline2_device" : "SSCOM Port 1", "key4_modline2_displaylinked" : 0, "key4_modline2_enable" : true, "key4_modline2_gain" : 1.0, "key4_modline2_ledgreen" : "None", "key4_modline2_ledred" : "None", "key4_modline2_max" : 127, "key4_modline2_min" : 0, "key4_modline2_mmcfunction" : "Stop", "key4_modline2_mmcid" : 1, "key4_modline2_note" : 14, "key4_modline2_offset" : 0, "key4_modline2_oscroute" : "None", "key4_modline2_slew" : 0, "key4_modline2_source" : "Long Trig", "key4_modline2_table" : "Linear", "key4_modline2_velocity" : 127, "key4_modline3_bankmsb" : 0, "key4_modline3_cc" : 0, "key4_modline3_channel" : 1, "key4_modline3_destination" : "None", "key4_modline3_device" : "SSCOM Port 1", "key4_modline3_displaylinked" : 0, "key4_modline3_enable" : 0, "key4_modline3_gain" : 1.0, "key4_modline3_ledgreen" : "None", "key4_modline3_ledred" : "None", "key4_modline3_max" : 127, "key4_modline3_min" : 0, "key4_modline3_mmcfunction" : "Stop", "key4_modline3_mmcid" : 1, "key4_modline3_note" : 60, "key4_modline3_offset" : 0, "key4_modline3_oscroute" : "None", "key4_modline3_slew" : 0, "key4_modline3_source" : "None", "key4_modline3_table" : "Linear", "key4_modline3_velocity" : 127, "key4_modline4_bankmsb" : 0, "key4_modline4_cc" : 0, "key4_modline4_channel" : 1, "key4_modline4_destination" : "None", "key4_modline4_device" : "SSCOM Port 1", "key4_modline4_displaylinked" : 0, "key4_modline4_enable" : 0, "key4_modline4_gain" : 1.0, "key4_modline4_ledgreen" : "None", "key4_modline4_ledred" : "None", "key4_modline4_max" : 127, "key4_modline4_min" : 0, "key4_modline4_mmcfunction" : "Stop", "key4_modline4_mmcid" : 1, "key4_modline4_note" : 60, "key4_modline4_offset" : 0, "key4_modline4_oscroute" : "None", "key4_modline4_slew" : 0, "key4_modline4_source" : "None", "key4_modline4_table" : "Linear", "key4_modline4_velocity" : 127, "key4_modline5_bankmsb" : 0, "key4_modline5_cc" : 0, "key4_modline5_channel" : 1, "key4_modline5_destination" : "None", "key4_modline5_device" : "SSCOM Port 1", "key4_modline5_displaylinked" : 0, "key4_modline5_enable" : 0, "key4_modline5_gain" : 1.0, "key4_modline5_ledgreen" : "None", "key4_modline5_ledred" : "None", "key4_modline5_max" : 127, "key4_modline5_min" : 0, "key4_modline5_mmcfunction" : "Stop", "key4_modline5_mmcid" : 1, "key4_modline5_note" : 60, "key4_modline5_offset" : 0, "key4_modline5_oscroute" : "None", "key4_modline5_slew" : 0, "key4_modline5_source" : "None", "key4_modline5_table" : "Linear", "key4_modline5_velocity" : 127, "key4_modline6_bankmsb" : 0, "key4_modline6_cc" : 0, "key4_modline6_channel" : 1, "key4_modline6_destination" : "None", "key4_modline6_device" : "SSCOM Port 1", "key4_modline6_displaylinked" : 0, "key4_modline6_enable" : 0, "key4_modline6_gain" : 1.0, "key4_modline6_ledgreen" : "None", "key4_modline6_ledred" : "None", "key4_modline6_max" : 127, "key4_modline6_min" : 0, "key4_modline6_mmcfunction" : "Stop", "key4_modline6_mmcid" : 1, "key4_modline6_note" : 60, "key4_modline6_offset" : 0, "key4_modline6_oscroute" : "None", "key4_modline6_slew" : 0, "key4_modline6_source" : "None", "key4_modline6_table" : "Linear", "key4_modline6_velocity" : 127, "key5_modline1_bankmsb" : 0, "key5_modline1_cc" : 109, "key5_modline1_channel" : 2, "key5_modline1_destination" : "CC", "key5_modline1_device" : "SSCOM Port 1", "key5_modline1_displaylinked" : 1, "key5_modline1_enable" : true, "key5_modline1_gain" : 1.0, "key5_modline1_ledgreen" : "None", "key5_modline1_ledred" : "None", "key5_modline1_max" : 127, "key5_modline1_min" : 0, "key5_modline1_mmcfunction" : "Stop", "key5_modline1_mmcid" : 1, "key5_modline1_note" : 17, "key5_modline1_offset" : 0, "key5_modline1_oscroute" : "None", "key5_modline1_slew" : 0, "key5_modline1_source" : "X Live", "key5_modline1_table" : "Linear", "key5_modline1_velocity" : 127, "key5_modline2_bankmsb" : 0, "key5_modline2_cc" : 66, "key5_modline2_channel" : 9, "key5_modline2_destination" : "None", "key5_modline2_device" : "SSCOM Port 1", "key5_modline2_displaylinked" : 0, "key5_modline2_enable" : false, "key5_modline2_gain" : 1.0, "key5_modline2_ledgreen" : "None", "key5_modline2_ledred" : "None", "key5_modline2_max" : 127, "key5_modline2_min" : 0, "key5_modline2_mmcfunction" : "Stop", "key5_modline2_mmcid" : 1, "key5_modline2_note" : 60, "key5_modline2_offset" : 0, "key5_modline2_oscroute" : "None", "key5_modline2_slew" : 0, "key5_modline2_source" : "None", "key5_modline2_table" : "Linear", "key5_modline2_velocity" : 127, "key5_modline3_bankmsb" : 0, "key5_modline3_cc" : 0, "key5_modline3_channel" : 1, "key5_modline3_destination" : "None", "key5_modline3_device" : "SSCOM Port 1", "key5_modline3_displaylinked" : false, "key5_modline3_enable" : 0, "key5_modline3_gain" : 1.0, "key5_modline3_ledgreen" : "None", "key5_modline3_ledred" : "None", "key5_modline3_max" : 127, "key5_modline3_min" : 0, "key5_modline3_mmcfunction" : "Stop", "key5_modline3_mmcid" : 1, "key5_modline3_note" : 60, "key5_modline3_offset" : 0, "key5_modline3_oscroute" : "None", "key5_modline3_slew" : 0, "key5_modline3_source" : "None", "key5_modline3_table" : "Linear", "key5_modline3_velocity" : 127, "key5_modline4_bankmsb" : 0, "key5_modline4_cc" : 0, "key5_modline4_channel" : 1, "key5_modline4_destination" : "None", "key5_modline4_device" : "SSCOM Port 1", "key5_modline4_displaylinked" : 0, "key5_modline4_enable" : 0, "key5_modline4_gain" : 1.0, "key5_modline4_ledgreen" : "None", "key5_modline4_ledred" : "None", "key5_modline4_max" : 127, "key5_modline4_min" : 0, "key5_modline4_mmcfunction" : "Stop", "key5_modline4_mmcid" : 1, "key5_modline4_note" : 60, "key5_modline4_offset" : 0, "key5_modline4_oscroute" : "None", "key5_modline4_slew" : 0, "key5_modline4_source" : "None", "key5_modline4_table" : "Linear", "key5_modline4_velocity" : 127, "key5_modline5_bankmsb" : 0, "key5_modline5_cc" : 0, "key5_modline5_channel" : 1, "key5_modline5_destination" : "None", "key5_modline5_device" : "SSCOM Port 1", "key5_modline5_displaylinked" : 0, "key5_modline5_enable" : 0, "key5_modline5_gain" : 1.0, "key5_modline5_ledgreen" : "None", "key5_modline5_ledred" : "None", "key5_modline5_max" : 127, "key5_modline5_min" : 0, "key5_modline5_mmcfunction" : "Stop", "key5_modline5_mmcid" : 1, "key5_modline5_note" : 60, "key5_modline5_offset" : 0, "key5_modline5_oscroute" : "None", "key5_modline5_slew" : 0, "key5_modline5_source" : "None", "key5_modline5_table" : "Linear", "key5_modline5_velocity" : 127, "key5_modline6_bankmsb" : 0, "key5_modline6_cc" : 0, "key5_modline6_channel" : 1, "key5_modline6_destination" : "None", "key5_modline6_device" : "SSCOM Port 1", "key5_modline6_displaylinked" : false, "key5_modline6_enable" : 0, "key5_modline6_gain" : 1.0, "key5_modline6_ledgreen" : "None", "key5_modline6_ledred" : "None", "key5_modline6_max" : 127, "key5_modline6_min" : 0, "key5_modline6_mmcfunction" : "Stop", "key5_modline6_mmcid" : 1, "key5_modline6_note" : 60, "key5_modline6_offset" : 0, "key5_modline6_oscroute" : "None", "key5_modline6_slew" : 0, "key5_modline6_source" : "None", "key5_modline6_table" : "Linear", "key5_modline6_velocity" : 127, "key6_modline1_bankmsb" : 0, "key6_modline1_cc" : 100, "key6_modline1_channel" : 2, "key6_modline1_destination" : "CC", "key6_modline1_device" : "SSCOM Port 1", "key6_modline1_displaylinked" : 1, "key6_modline1_enable" : true, "key6_modline1_gain" : 1.0, "key6_modline1_ledgreen" : "None", "key6_modline1_ledred" : "None", "key6_modline1_max" : 127, "key6_modline1_min" : 0, "key6_modline1_mmcfunction" : "Stop", "key6_modline1_mmcid" : 1, "key6_modline1_note" : 1, "key6_modline1_offset" : 0, "key6_modline1_oscroute" : "None", "key6_modline1_slew" : 0, "key6_modline1_source" : "Y Live", "key6_modline1_table" : "Linear", "key6_modline1_velocity" : 127, "key6_modline2_bankmsb" : 0, "key6_modline2_cc" : 0, "key6_modline2_channel" : 2, "key6_modline2_destination" : "Note Set", "key6_modline2_device" : "SSCOM Port 1", "key6_modline2_displaylinked" : 0, "key6_modline2_enable" : false, "key6_modline2_gain" : 1.0, "key6_modline2_ledgreen" : "None", "key6_modline2_ledred" : "None", "key6_modline2_max" : 127, "key6_modline2_min" : 0, "key6_modline2_mmcfunction" : "Stop", "key6_modline2_mmcid" : 1, "key6_modline2_note" : 9, "key6_modline2_offset" : 0, "key6_modline2_oscroute" : "None", "key6_modline2_slew" : 0, "key6_modline2_source" : "Long Trig", "key6_modline2_table" : "Linear", "key6_modline2_velocity" : 127, "key6_modline3_bankmsb" : 0, "key6_modline3_cc" : 0, "key6_modline3_channel" : 1, "key6_modline3_destination" : "None", "key6_modline3_device" : "SSCOM Port 1", "key6_modline3_displaylinked" : 0, "key6_modline3_enable" : 0, "key6_modline3_gain" : 1.0, "key6_modline3_ledgreen" : "None", "key6_modline3_ledred" : "None", "key6_modline3_max" : 127, "key6_modline3_min" : 0, "key6_modline3_mmcfunction" : "Stop", "key6_modline3_mmcid" : 1, "key6_modline3_note" : 60, "key6_modline3_offset" : 0, "key6_modline3_oscroute" : "None", "key6_modline3_slew" : 0, "key6_modline3_source" : "None", "key6_modline3_table" : "Linear", "key6_modline3_velocity" : 127, "key6_modline4_bankmsb" : 0, "key6_modline4_cc" : 0, "key6_modline4_channel" : 1, "key6_modline4_destination" : "None", "key6_modline4_device" : "SSCOM Port 1", "key6_modline4_displaylinked" : 0, "key6_modline4_enable" : 0, "key6_modline4_gain" : 1.0, "key6_modline4_ledgreen" : "None", "key6_modline4_ledred" : "None", "key6_modline4_max" : 127, "key6_modline4_min" : 0, "key6_modline4_mmcfunction" : "Stop", "key6_modline4_mmcid" : 1, "key6_modline4_note" : 60, "key6_modline4_offset" : 0, "key6_modline4_oscroute" : "None", "key6_modline4_slew" : 0, "key6_modline4_source" : "None", "key6_modline4_table" : "Linear", "key6_modline4_velocity" : 127, "key6_modline5_bankmsb" : 0, "key6_modline5_cc" : 0, "key6_modline5_channel" : 1, "key6_modline5_destination" : "None", "key6_modline5_device" : "SSCOM Port 1", "key6_modline5_displaylinked" : 0, "key6_modline5_enable" : 0, "key6_modline5_gain" : 1.0, "key6_modline5_ledgreen" : "None", "key6_modline5_ledred" : "None", "key6_modline5_max" : 127, "key6_modline5_min" : 0, "key6_modline5_mmcfunction" : "Stop", "key6_modline5_mmcid" : 1, "key6_modline5_note" : 60, "key6_modline5_offset" : 0, "key6_modline5_oscroute" : "None", "key6_modline5_slew" : 0, "key6_modline5_source" : "None", "key6_modline5_table" : "Linear", "key6_modline5_velocity" : 127, "key6_modline6_bankmsb" : 0, "key6_modline6_cc" : 0, "key6_modline6_channel" : 1, "key6_modline6_destination" : "None", "key6_modline6_device" : "SSCOM Port 1", "key6_modline6_displaylinked" : 0, "key6_modline6_enable" : 0, "key6_modline6_gain" : 1.0, "key6_modline6_ledgreen" : "None", "key6_modline6_ledred" : "None", "key6_modline6_max" : 127, "key6_modline6_min" : 0, "key6_modline6_mmcfunction" : "Stop", "key6_modline6_mmcid" : 1, "key6_modline6_note" : 60, "key6_modline6_offset" : 0, "key6_modline6_oscroute" : "None", "key6_modline6_slew" : 0, "key6_modline6_source" : "None", "key6_modline6_table" : "Linear", "key6_modline6_velocity" : 127, "key7_modline1_bankmsb" : 0, "key7_modline1_cc" : 101, "key7_modline1_channel" : 2, "key7_modline1_destination" : "CC", "key7_modline1_device" : "SSCOM Port 1", "key7_modline1_displaylinked" : 1, "key7_modline1_enable" : true, "key7_modline1_gain" : 1.0, "key7_modline1_ledgreen" : "None", "key7_modline1_ledred" : "None", "key7_modline1_max" : 127, "key7_modline1_min" : 0, "key7_modline1_mmcfunction" : "Stop", "key7_modline1_mmcid" : 1, "key7_modline1_note" : 3, "key7_modline1_offset" : 0, "key7_modline1_oscroute" : "None", "key7_modline1_slew" : 0, "key7_modline1_source" : "Y Live", "key7_modline1_table" : "Linear", "key7_modline1_velocity" : 127, "key7_modline2_bankmsb" : 0, "key7_modline2_cc" : 0, "key7_modline2_channel" : 2, "key7_modline2_destination" : "Note Set", "key7_modline2_device" : "SSCOM Port 1", "key7_modline2_displaylinked" : 0, "key7_modline2_enable" : false, "key7_modline2_gain" : 1.0, "key7_modline2_ledgreen" : "None", "key7_modline2_ledred" : "None", "key7_modline2_max" : 127, "key7_modline2_min" : 0, "key7_modline2_mmcfunction" : "Stop", "key7_modline2_mmcid" : 1, "key7_modline2_note" : 11, "key7_modline2_offset" : 0, "key7_modline2_oscroute" : "None", "key7_modline2_slew" : 0, "key7_modline2_source" : "Long Trig", "key7_modline2_table" : "Linear", "key7_modline2_velocity" : 127, "key7_modline3_bankmsb" : 0, "key7_modline3_cc" : 0, "key7_modline3_channel" : 1, "key7_modline3_destination" : "None", "key7_modline3_device" : "SSCOM Port 1", "key7_modline3_displaylinked" : 0, "key7_modline3_enable" : 0, "key7_modline3_gain" : 1.0, "key7_modline3_ledgreen" : "None", "key7_modline3_ledred" : "None", "key7_modline3_max" : 127, "key7_modline3_min" : 0, "key7_modline3_mmcfunction" : "Stop", "key7_modline3_mmcid" : 1, "key7_modline3_note" : 60, "key7_modline3_offset" : 0, "key7_modline3_oscroute" : "None", "key7_modline3_slew" : 0, "key7_modline3_source" : "None", "key7_modline3_table" : "Linear", "key7_modline3_velocity" : 127, "key7_modline4_bankmsb" : 0, "key7_modline4_cc" : 0, "key7_modline4_channel" : 1, "key7_modline4_destination" : "None", "key7_modline4_device" : "SSCOM Port 1", "key7_modline4_displaylinked" : 0, "key7_modline4_enable" : 0, "key7_modline4_gain" : 1.0, "key7_modline4_ledgreen" : "None", "key7_modline4_ledred" : "None", "key7_modline4_max" : 127, "key7_modline4_min" : 0, "key7_modline4_mmcfunction" : "Stop", "key7_modline4_mmcid" : 1, "key7_modline4_note" : 60, "key7_modline4_offset" : 0, "key7_modline4_oscroute" : "None", "key7_modline4_slew" : 0, "key7_modline4_source" : "None", "key7_modline4_table" : "Linear", "key7_modline4_velocity" : 127, "key7_modline5_bankmsb" : 0, "key7_modline5_cc" : 0, "key7_modline5_channel" : 1, "key7_modline5_destination" : "None", "key7_modline5_device" : "SSCOM Port 1", "key7_modline5_displaylinked" : 0, "key7_modline5_enable" : 0, "key7_modline5_gain" : 1.0, "key7_modline5_ledgreen" : "None", "key7_modline5_ledred" : "None", "key7_modline5_max" : 127, "key7_modline5_min" : 0, "key7_modline5_mmcfunction" : "Stop", "key7_modline5_mmcid" : 1, "key7_modline5_note" : 60, "key7_modline5_offset" : 0, "key7_modline5_oscroute" : "None", "key7_modline5_slew" : 0, "key7_modline5_source" : "None", "key7_modline5_table" : "Linear", "key7_modline5_velocity" : 127, "key7_modline6_bankmsb" : 0, "key7_modline6_cc" : 0, "key7_modline6_channel" : 1, "key7_modline6_destination" : "None", "key7_modline6_device" : "SSCOM Port 1", "key7_modline6_displaylinked" : 0, "key7_modline6_enable" : 0, "key7_modline6_gain" : 1.0, "key7_modline6_ledgreen" : "None", "key7_modline6_ledred" : "None", "key7_modline6_max" : 127, "key7_modline6_min" : 0, "key7_modline6_mmcfunction" : "Stop", "key7_modline6_mmcid" : 1, "key7_modline6_note" : 60, "key7_modline6_offset" : 0, "key7_modline6_oscroute" : "None", "key7_modline6_slew" : 0, "key7_modline6_source" : "None", "key7_modline6_table" : "Linear", "key7_modline6_velocity" : 127, "key8_modline1_bankmsb" : 0, "key8_modline1_cc" : 102, "key8_modline1_channel" : 2, "key8_modline1_destination" : "CC", "key8_modline1_device" : "SSCOM Port 1", "key8_modline1_displaylinked" : 1, "key8_modline1_enable" : true, "key8_modline1_gain" : 1.0, "key8_modline1_ledgreen" : "None", "key8_modline1_ledred" : "None", "key8_modline1_max" : 127, "key8_modline1_min" : 0, "key8_modline1_mmcfunction" : "Stop", "key8_modline1_mmcid" : 1, "key8_modline1_note" : 5, "key8_modline1_offset" : 0, "key8_modline1_oscroute" : "None", "key8_modline1_slew" : 0, "key8_modline1_source" : "Y Live", "key8_modline1_table" : "Linear", "key8_modline1_velocity" : 127, "key8_modline2_bankmsb" : 0, "key8_modline2_cc" : 0, "key8_modline2_channel" : 2, "key8_modline2_destination" : "Note Set", "key8_modline2_device" : "SSCOM Port 1", "key8_modline2_displaylinked" : 0, "key8_modline2_enable" : false, "key8_modline2_gain" : 1.0, "key8_modline2_ledgreen" : "None", "key8_modline2_ledred" : "None", "key8_modline2_max" : 127, "key8_modline2_min" : 0, "key8_modline2_mmcfunction" : "Stop", "key8_modline2_mmcid" : 1, "key8_modline2_note" : 13, "key8_modline2_offset" : 0, "key8_modline2_oscroute" : "None", "key8_modline2_slew" : 0, "key8_modline2_source" : "Long Trig", "key8_modline2_table" : "Linear", "key8_modline2_velocity" : 127, "key8_modline3_bankmsb" : 0, "key8_modline3_cc" : 0, "key8_modline3_channel" : 1, "key8_modline3_destination" : "None", "key8_modline3_device" : "SSCOM Port 1", "key8_modline3_displaylinked" : 0, "key8_modline3_enable" : 0, "key8_modline3_gain" : 1.0, "key8_modline3_ledgreen" : "None", "key8_modline3_ledred" : "None", "key8_modline3_max" : 127, "key8_modline3_min" : 0, "key8_modline3_mmcfunction" : "Stop", "key8_modline3_mmcid" : 1, "key8_modline3_note" : 60, "key8_modline3_offset" : 0, "key8_modline3_oscroute" : "None", "key8_modline3_slew" : 0, "key8_modline3_source" : "None", "key8_modline3_table" : "Linear", "key8_modline3_velocity" : 127, "key8_modline4_bankmsb" : 0, "key8_modline4_cc" : 0, "key8_modline4_channel" : 1, "key8_modline4_destination" : "None", "key8_modline4_device" : "SSCOM Port 1", "key8_modline4_displaylinked" : 0, "key8_modline4_enable" : 0, "key8_modline4_gain" : 1.0, "key8_modline4_ledgreen" : "None", "key8_modline4_ledred" : "None", "key8_modline4_max" : 127, "key8_modline4_min" : 0, "key8_modline4_mmcfunction" : "Stop", "key8_modline4_mmcid" : 1, "key8_modline4_note" : 60, "key8_modline4_offset" : 0, "key8_modline4_oscroute" : "None", "key8_modline4_slew" : 0, "key8_modline4_source" : "None", "key8_modline4_table" : "Linear", "key8_modline4_velocity" : 127, "key8_modline5_bankmsb" : 0, "key8_modline5_cc" : 0, "key8_modline5_channel" : 1, "key8_modline5_destination" : "None", "key8_modline5_device" : "SSCOM Port 1", "key8_modline5_displaylinked" : 0, "key8_modline5_enable" : 0, "key8_modline5_gain" : 1.0, "key8_modline5_ledgreen" : "None", "key8_modline5_ledred" : "None", "key8_modline5_max" : 127, "key8_modline5_min" : 0, "key8_modline5_mmcfunction" : "Stop", "key8_modline5_mmcid" : 1, "key8_modline5_note" : 60, "key8_modline5_offset" : 0, "key8_modline5_oscroute" : "None", "key8_modline5_slew" : 0, "key8_modline5_source" : "None", "key8_modline5_table" : "Linear", "key8_modline5_velocity" : 127, "key8_modline6_bankmsb" : 0, "key8_modline6_cc" : 0, "key8_modline6_channel" : 1, "key8_modline6_destination" : "None", "key8_modline6_device" : "SSCOM Port 1", "key8_modline6_displaylinked" : 0, "key8_modline6_enable" : 0, "key8_modline6_gain" : 1.0, "key8_modline6_ledgreen" : "None", "key8_modline6_ledred" : "None", "key8_modline6_max" : 127, "key8_modline6_min" : 0, "key8_modline6_mmcfunction" : "Stop", "key8_modline6_mmcid" : 1, "key8_modline6_note" : 60, "key8_modline6_offset" : 0, "key8_modline6_oscroute" : "None", "key8_modline6_slew" : 0, "key8_modline6_source" : "None", "key8_modline6_table" : "Linear", "key8_modline6_velocity" : 127, "key9_modline1_bankmsb" : 0, "key9_modline1_cc" : 103, "key9_modline1_channel" : 2, "key9_modline1_destination" : "CC", "key9_modline1_device" : "SSCOM Port 1", "key9_modline1_displaylinked" : 1, "key9_modline1_enable" : true, "key9_modline1_gain" : 1.0, "key9_modline1_ledgreen" : "None", "key9_modline1_ledred" : "None", "key9_modline1_max" : 127, "key9_modline1_min" : 0, "key9_modline1_mmcfunction" : "Stop", "key9_modline1_mmcid" : 1, "key9_modline1_note" : 7, "key9_modline1_offset" : 0, "key9_modline1_oscroute" : "None", "key9_modline1_slew" : 0, "key9_modline1_source" : "Y Live", "key9_modline1_table" : "Linear", "key9_modline1_velocity" : 127, "key9_modline2_bankmsb" : 0, "key9_modline2_cc" : 0, "key9_modline2_channel" : 2, "key9_modline2_destination" : "Note Set", "key9_modline2_device" : "SSCOM Port 1", "key9_modline2_displaylinked" : 0, "key9_modline2_enable" : false, "key9_modline2_gain" : 1.0, "key9_modline2_ledgreen" : "None", "key9_modline2_ledred" : "None", "key9_modline2_max" : 127, "key9_modline2_min" : 0, "key9_modline2_mmcfunction" : "Stop", "key9_modline2_mmcid" : 1, "key9_modline2_note" : 15, "key9_modline2_offset" : 0, "key9_modline2_oscroute" : "None", "key9_modline2_slew" : 0, "key9_modline2_source" : "Long Trig", "key9_modline2_table" : "Linear", "key9_modline2_velocity" : 127, "key9_modline3_bankmsb" : 0, "key9_modline3_cc" : 0, "key9_modline3_channel" : 1, "key9_modline3_destination" : "None", "key9_modline3_device" : "SSCOM Port 1", "key9_modline3_displaylinked" : 0, "key9_modline3_enable" : 0, "key9_modline3_gain" : 1.0, "key9_modline3_ledgreen" : "None", "key9_modline3_ledred" : "None", "key9_modline3_max" : 127, "key9_modline3_min" : 0, "key9_modline3_mmcfunction" : "Stop", "key9_modline3_mmcid" : 1, "key9_modline3_note" : 60, "key9_modline3_offset" : 0, "key9_modline3_oscroute" : "None", "key9_modline3_slew" : 0, "key9_modline3_source" : "None", "key9_modline3_table" : "Linear", "key9_modline3_velocity" : 127, "key9_modline4_bankmsb" : 0, "key9_modline4_cc" : 0, "key9_modline4_channel" : 1, "key9_modline4_destination" : "None", "key9_modline4_device" : "SSCOM Port 1", "key9_modline4_displaylinked" : 0, "key9_modline4_enable" : 0, "key9_modline4_gain" : 1.0, "key9_modline4_ledgreen" : "None", "key9_modline4_ledred" : "None", "key9_modline4_max" : 127, "key9_modline4_min" : 0, "key9_modline4_mmcfunction" : "Stop", "key9_modline4_mmcid" : 1, "key9_modline4_note" : 60, "key9_modline4_offset" : 0, "key9_modline4_oscroute" : "None", "key9_modline4_slew" : 0, "key9_modline4_source" : "None", "key9_modline4_table" : "Linear", "key9_modline4_velocity" : 127, "key9_modline5_bankmsb" : 0, "key9_modline5_cc" : 0, "key9_modline5_channel" : 1, "key9_modline5_destination" : "None", "key9_modline5_device" : "SSCOM Port 1", "key9_modline5_displaylinked" : 0, "key9_modline5_enable" : 0, "key9_modline5_gain" : 1.0, "key9_modline5_ledgreen" : "None", "key9_modline5_ledred" : "None", "key9_modline5_max" : 127, "key9_modline5_min" : 0, "key9_modline5_mmcfunction" : "Stop", "key9_modline5_mmcid" : 1, "key9_modline5_note" : 60, "key9_modline5_offset" : 0, "key9_modline5_oscroute" : "None", "key9_modline5_slew" : 0, "key9_modline5_source" : "None", "key9_modline5_table" : "Linear", "key9_modline5_velocity" : 127, "key9_modline6_bankmsb" : 0, "key9_modline6_cc" : 0, "key9_modline6_channel" : 1, "key9_modline6_destination" : "None", "key9_modline6_device" : "SSCOM Port 1", "key9_modline6_displaylinked" : 0, "key9_modline6_enable" : 0, "key9_modline6_gain" : 1.0, "key9_modline6_ledgreen" : "None", "key9_modline6_ledred" : "None", "key9_modline6_max" : 127, "key9_modline6_min" : 0, "key9_modline6_mmcfunction" : "Stop", "key9_modline6_mmcid" : 1, "key9_modline6_note" : 60, "key9_modline6_offset" : 0, "key9_modline6_oscroute" : "None", "key9_modline6_slew" : 0, "key9_modline6_source" : "None", "key9_modline6_table" : "Linear", "key9_modline6_velocity" : 127, "nav_displaymode" : "Always", "nav_modline1_bankmsb" : 0, "nav_modline1_cc" : 71, "nav_modline1_channel" : 9, "nav_modline1_destination" : "CC", "nav_modline1_device" : "SSCOM Port 1", "nav_modline1_displaylinked" : 1, "nav_modline1_enable" : true, "nav_modline1_gain" : 1.0, "nav_modline1_max" : 127, "nav_modline1_min" : 0, "nav_modline1_mmcfunction" : "Stop", "nav_modline1_mmcid" : 1, "nav_modline1_note" : 71, "nav_modline1_offset" : 0, "nav_modline1_oscroute" : "None", "nav_modline1_slew" : 0, "nav_modline1_source" : "None", "nav_modline1_table" : "Linear", "nav_modline1_velocity" : 127, "nav_modline2_bankmsb" : 0, "nav_modline2_cc" : 72, "nav_modline2_channel" : 9, "nav_modline2_destination" : "CC", "nav_modline2_device" : "SSCOM Port 1", "nav_modline2_displaylinked" : 0, "nav_modline2_enable" : true, "nav_modline2_gain" : 1.0, "nav_modline2_max" : 127, "nav_modline2_min" : 0, "nav_modline2_mmcfunction" : "Stop", "nav_modline2_mmcid" : 1, "nav_modline2_note" : 72, "nav_modline2_offset" : 0, "nav_modline2_oscroute" : "None", "nav_modline2_slew" : 0, "nav_modline2_source" : "Nav S Foot On", "nav_modline2_table" : "Linear", "nav_modline2_velocity" : 127, "nav_modline3_bankmsb" : 0, "nav_modline3_cc" : 73, "nav_modline3_channel" : 9, "nav_modline3_destination" : "CC", "nav_modline3_device" : "SSCOM Port 1", "nav_modline3_displaylinked" : 0, "nav_modline3_enable" : false, "nav_modline3_gain" : 1.0, "nav_modline3_max" : 127, "nav_modline3_min" : 0, "nav_modline3_mmcfunction" : "Stop", "nav_modline3_mmcid" : 1, "nav_modline3_note" : 60, "nav_modline3_offset" : 0, "nav_modline3_oscroute" : "None", "nav_modline3_slew" : 0, "nav_modline3_source" : "Nav N Foot On", "nav_modline3_table" : "Linear", "nav_modline3_velocity" : 127, "nav_modline4_bankmsb" : 0, "nav_modline4_cc" : 74, "nav_modline4_channel" : 9, "nav_modline4_destination" : "CC", "nav_modline4_device" : "SSCOM Port 1", "nav_modline4_displaylinked" : 0, "nav_modline4_enable" : false, "nav_modline4_gain" : 1.0, "nav_modline4_max" : 127, "nav_modline4_min" : 0, "nav_modline4_mmcfunction" : "Stop", "nav_modline4_mmcid" : 1, "nav_modline4_note" : 60, "nav_modline4_offset" : 0, "nav_modline4_oscroute" : "None", "nav_modline4_slew" : 0, "nav_modline4_source" : "Nav S Foot On", "nav_modline4_table" : "Linear", "nav_modline4_velocity" : 127, "nav_modline5_bankmsb" : 0, "nav_modline5_cc" : 0, "nav_modline5_channel" : 1, "nav_modline5_destination" : "None", "nav_modline5_device" : "SoftStep Expander", "nav_modline5_displaylinked" : 0, "nav_modline5_enable" : 0, "nav_modline5_gain" : 1.0, "nav_modline5_max" : 127, "nav_modline5_min" : 0, "nav_modline5_mmcfunction" : "Stop", "nav_modline5_mmcid" : 1, "nav_modline5_note" : 60, "nav_modline5_offset" : 0, "nav_modline5_oscroute" : "None", "nav_modline5_slew" : 0, "nav_modline5_source" : "None", "nav_modline5_table" : "Linear", "nav_modline5_velocity" : 127, "nav_modline6_bankmsb" : 0, "nav_modline6_cc" : 0, "nav_modline6_channel" : 1, "nav_modline6_destination" : "None", "nav_modline6_device" : "SoftStep Expander", "nav_modline6_displaylinked" : 0, "nav_modline6_enable" : 0, "nav_modline6_gain" : 1.0, "nav_modline6_max" : 127, "nav_modline6_min" : 0, "nav_modline6_mmcfunction" : "Stop", "nav_modline6_mmcid" : 1, "nav_modline6_note" : 60, "nav_modline6_offset" : 0, "nav_modline6_oscroute" : "None", "nav_modline6_slew" : 0, "nav_modline6_source" : "None", "nav_modline6_table" : "Linear", "nav_modline6_velocity" : 127, "nav_modlinemode" : 0, "nav_name" : "FX", "nav_prefix" : "", "preset_displayname" : "BwFX", "preset_name" : "Bitwig_FX" } -------------------------------------------------------------------------------- /SoftStep_Bitwig/README.md: -------------------------------------------------------------------------------- 1 | SoftStep_Bitwig 2 | =============== 3 | 4 | Bitwig Script for the KMI Softstep 5 | 6 | Import the Bitwig_Clips.softsteppreset and the Bitwig_FX.softsteppreset into Standalone mode of the Softstep Editor. 7 | 8 | Drop The 'Softstep'folder into the 'ControlSurfaceScripts' folder in the User Control script folder: 9 | 10 | Mac and Linux: ~/Documents/Bitwig Studio/Controller Scripts/ 11 | 12 | On Windows: %USERPROFILE%\Documents\Bitwig Studio\Controller Scripts\ 13 | 14 | Open Bitwig, and it should autoconnect. if not you can manually select it in the Bitwig Preferences. 15 | -------------------------------------------------------------------------------- /SoftStep_Bitwig/Softstep/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dataf1ow/KMI_Bitwig_Scripts/ea709ada6dafe49fcb4e516ceb5e4a0472be687e/SoftStep_Bitwig/Softstep/.DS_Store -------------------------------------------------------------------------------- /SoftStep_Bitwig/Softstep/softstep.control.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright 2014 Evan Bogunia_____evanbeta@keithmcmillen.com 4 | 5 | */ 6 | 7 | 8 | 9 | //Load the bitwig API, obviously. 10 | loadAPI(1); 11 | 12 | //Define/set our controller properties [ company, device, version, uuid ] 13 | host.defineController("Keith McMillen Instruments", "SoftStep", "1.0", "FC5AB010-4FEE-11E4-916C-0800200C9A66"); 14 | host.defineMidiPorts(1, 1); 15 | 16 | //Define/set input/output port names (both i/o are the same) 17 | var portNames = ["SSCOM Port 1"]; 18 | host.addDeviceNameBasedDiscoveryPair(portNames, portNames); 19 | if(host.platformIsLinux()) 20 | { 21 | host.addDeviceNameBasedDiscoveryPair(["SSCOM MIDI 1"],["SSCOM MIDI 1"]) 22 | 23 | } 24 | 25 | //Loading external Files 26 | load("softstep_functions.js") 27 | 28 | //Declare some global vars for a few of the interface types defined in the API 29 | var application, arranger, mixer, transport; 30 | var HIGHEST_CC = 99; 31 | var LOWEST_CC = 1; 32 | var NUM_TRACKS = 4; 33 | var NUM_SCENES = 2; 34 | var NUM_SENDS = 2; 35 | var hasContent = initArray(0, 8); 36 | var isPlaying = initArray(0, 8); 37 | var isRecording = initArray(0, 8); 38 | var isQueued = initArray(0, 8); 39 | var pendingLEDs = initArray(0, 8); 40 | var currentLEDs = initArray(0,8); 41 | var macroValues = initArray(0, 8); 42 | var selectedTrack = 0; 43 | var canScrollUp = false 44 | var preset = 0 // 0 = clips, 1 = macros 45 | var mode = 1 46 | var scrollUp = 0 47 | var scrollDown = 0 48 | var deviceEnabled = 1 49 | //------------------------------------ Init -----------------------------------// 50 | function init() 51 | { 52 | //-------- Set MIDI callbacks / port 53 | host.getMidiInPort(0).setMidiCallback(onMidi) 54 | 55 | //-------- Note Inputs (see REF below for argument details 56 | noteIn = host.getMidiInPort(0).createNoteInput("SSCOM Port 1", "80????", "90????"); 57 | 58 | noteIn.setShouldConsumeEvents(true); 59 | 60 | 61 | userControls = host.createUserControlsSection(HIGHEST_CC - LOWEST_CC + 1); 62 | 63 | for(var i=LOWEST_CC; i<=HIGHEST_CC; i++) 64 | { 65 | userControls.getControl(i - LOWEST_CC).setLabel("CC" + i); 66 | } 67 | 68 | //-------- Initialize bitwig interfaces 69 | 70 | application = host.createApplication(); 71 | trackBank = host.createTrackBank(NUM_TRACKS, NUM_SENDS, NUM_SCENES); 72 | cursorTrack = host.createCursorTrack(2, NUM_SCENES); 73 | transport = host.createTransport(); 74 | arranger = host.createArranger(0); 75 | master = host.createMasterTrack(8); 76 | primaryDevice = cursorTrack.getPrimaryDevice(); 77 | cursorDevice = cursorTrack.createCursorDevice('Primary', 2); 78 | deviceBank = cursorTrack.createDeviceBank(4); 79 | 80 | 81 | //println("This is the SoftStep Script") 82 | 83 | 84 | /*deviceBank.addCanScrollUpObserver(function(deviceScroll) 85 | { 86 | println(deviceScroll) 87 | })*/ 88 | 89 | 90 | trackBank.addCanScrollScenesUpObserver(function(value) 91 | { 92 | scrollUp = value 93 | if (mode == 1) 94 | { 95 | scrollLEDs() 96 | } 97 | }) 98 | 99 | trackBank.addCanScrollScenesDownObserver(function(value) 100 | { 101 | scrollDown = value 102 | if(mode == 1) 103 | { 104 | scrollLEDs() 105 | } 106 | }) 107 | 108 | trackBank.addSceneScrollPositionObserver(function(value) 109 | { 110 | //println(value) 111 | }, 0 112 | ) 113 | 114 | primaryDevice.addIsEnabledObserver(function(value) 115 | { 116 | deviceEnabled = value 117 | deviceLED() 118 | }) 119 | 120 | for (var p = 0; p < 4; p++) 121 | { 122 | var macro = primaryDevice.getMacro(p).getAmount(); 123 | macro.addValueObserver(128, makeIndexedFunction(p, function(index, value) 124 | { 125 | macroValues[index] = value; 126 | } 127 | ) 128 | )}; 129 | 130 | for (var t = 0; t < NUM_TRACKS; t++) 131 | { 132 | var track = trackBank.getTrack(t); 133 | var clipLauncher = track.getClipLauncher(); 134 | clipLauncher.setIndication(true); 135 | 136 | clipLauncher.addHasContentObserver(getGridObserverFunc(t, hasContent)); 137 | clipLauncher.addIsPlayingObserver(getGridObserverFunc(t, isPlaying)); 138 | clipLauncher.addIsRecordingObserver(getGridObserverFunc(t, isRecording)); 139 | clipLauncher.addIsQueuedObserver(getGridObserverFunc(t, isQueued)); 140 | } 141 | 142 | } 143 | 144 | //--------------------------- MIDI Callbacks / Port ---------------------------// 145 | function onMidi(status, data1, data2) 146 | { 147 | //println("Port 1 [status, data1, data2]: " + status + ", " + data1 + ", " + data2); 148 | 149 | 150 | if(status == 233) 151 | { 152 | //println("pitchBend" + " " + data1 + " " + data2) 153 | 154 | }else if(status == 145){ 155 | 156 | //println("Notes" + " " + data1 + " " + data2) 157 | launchClipSlots(data1, data2); 158 | scrollTrackBank(data1, data2); 159 | //launchScenes(data1, data2); 160 | stopClips(data1, data2); 161 | deleteClips(data1, data2); 162 | if (data1 == 127) 163 | { 164 | mode = 2 165 | //println("FX Page") 166 | clearLEDs() 167 | trackLED() 168 | deviceLED() 169 | } 170 | if (data1 == 126) 171 | { 172 | mode = 1 173 | //println("Clip Page") 174 | clearLEDs() 175 | sendClipLEDs() 176 | scrollLEDs() 177 | } 178 | 179 | }else if (status == 185){ 180 | 181 | //println("CC" + " " + data1 + " " + data2) 182 | 183 | } 184 | 185 | 186 | if (isChannelController(status)) 187 | { 188 | if (data1 >= LOWEST_CC && data1 <= HIGHEST_CC) 189 | { 190 | var index = data1 - LOWEST_CC; 191 | userControls.getControl(index).set(data2, 128); 192 | } 193 | 194 | if (data1 >= 100 && data1 < 104) 195 | { 196 | macroControl(data1, data2) 197 | } 198 | 199 | if (data1 >= 104 && data1 < 108 && data2 > 0) 200 | { 201 | trackSelect(data1,data2) 202 | } 203 | 204 | if (data1 == 108 && data2 > 0) 205 | { 206 | deviceOn() 207 | } 208 | 209 | if (data1 == 109) 210 | { 211 | deviceNavigation(data1,data2) 212 | } 213 | } 214 | 215 | 216 | } 217 | 218 | 219 | 220 | function exit() 221 | { 222 | println("exit."); 223 | } 224 | 225 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 226 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 227 | //////////////////////////////////////////////////////////////// REF //////////////////////////////////////////////////////////////// 228 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 229 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 230 | 231 | //--------------------- Note Input Filters 232 | 233 | // These filters args are used in the createNoteInput method/function for a midi input port [ see init() ]. 234 | 235 | // See http://www.midi.org/techspecs/midimessages.php for midi message types. 236 | 237 | // Studying up on hexadecimal could be helpful also if it's new to you. 238 | 239 | 240 | //---- Note Off 241 | // "80????" - Sees all note offs on channel 1 242 | // "8?????" - Sees all note offs on any channel 243 | 244 | //---- Note On 245 | // "90????" - Sees all note ons on channel 1 246 | // "9?????" - Sees all note offs on any channel 247 | // "90607F" - Sees all note number 60s with a velocity of 127 (this is a very specific filter) 248 | 249 | //---- Polyphonic Aftertouch 250 | // "A0????" - Sees all note ons on channel 1 251 | // "A?????" - Sees all note offs on any channel 252 | 253 | //---- Controller Messages 254 | // "B0????" - Sees all cc messages on channel 1 255 | // "B?????" - Sees all cc messages on all channels 256 | 257 | //---- Program Changes 258 | // "C0????" - Sees all pgm changes on channel 1 259 | // "C?????" - Sees all pgm changes on all channels 260 | 261 | //---- Channel Aftertouch 262 | // "D0????" - Sees all ch. aftertouch on channel 1 263 | // "D?????" - Sees all ch. aftertouch on all channels 264 | 265 | //---- Pitch Wheel 266 | // "E0????" - Sees all ch. aftertouch on channel 1 267 | // "E?????" - Sees all ch. aftertouch on all channels 268 | // "E???00" - Sees all ch. aftertouch on all channels with an MSB of zero 269 | // "E?00??" - Sees all ch. aftertouch on all channels with an LSB of zero 270 | 271 | //---- SysEx start/end, esoteric MIDI mysticism (wouldn't use these filters unless your traversing some kind of musical 3-byte worm hole) 272 | //---- For sysex, just use the callbacks defined above 273 | // "F0????" - Sees all ch. aftertouch on channel 1 274 | // "D?????" - Sees all ch. aftertouch on all channels 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | -------------------------------------------------------------------------------- /SoftStep_Bitwig/Softstep/softstep_functions.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Sofstep Controller Functions 4 | 5 | Copyright 2014 Evan Bogunia_____evanbeta@keithmcmillen.com 6 | 7 | */ 8 | 9 | var stopAll = 0; 10 | var device_select_state = 1; 11 | var selectedTrack = 0; 12 | var rate = 50; 13 | var padValue = 64; 14 | //var mode = 'clip' 15 | 16 | function trackSelect(data1, data2) 17 | { 18 | thisTrack = trackBank.getTrack(data1 - 104) 19 | thisTrack.selectInMixer() 20 | selectedTrack = data1 - 104 21 | trackLED() 22 | } 23 | 24 | function trackLED() 25 | { 26 | for (i = 0; i < 4; i ++) 27 | { 28 | if (i == selectedTrack) 29 | { 30 | sendMidi(176, 110 + i, 1) 31 | }else{ 32 | sendMidi(176, 110 + i, 0) 33 | } 34 | } 35 | } 36 | 37 | function deviceLED() 38 | { 39 | if (deviceEnabled == 1) 40 | { 41 | sendMidi(176, 119, 1) 42 | sendMidi(176, 29, 0) 43 | }else{ 44 | sendMidi(176, 119, 0) 45 | sendMidi(176, 29, 1) 46 | } 47 | } 48 | 49 | function macroInc(data1){ 50 | primaryDevice.getMacro(data1-100).getAmount().inc(1,128) 51 | if (padValue > 64){ 52 | host.scheduleTask(macroInc, [data1], rate) 53 | } 54 | } 55 | 56 | function macroDec(data1){ 57 | primaryDevice.getMacro(data1-100).getAmount().inc(-1,128) 58 | if (padValue < 64){ 59 | host.scheduleTask(macroDec, [data1], rate) 60 | } 61 | } 62 | 63 | function macroControl(data1, data2) 64 | { 65 | //rate = rate/(Math.abs(data2 - 64)/32)) 66 | padValue = data2; 67 | if(data2 > 64){ 68 | host.scheduleTask(macroInc,[data1], rate) 69 | } 70 | else if(data2<64){ 71 | host.scheduleTask(macroDec,[data1], rate) 72 | } 73 | 74 | 75 | } 76 | 77 | function deviceOn() 78 | { 79 | primaryDevice.toggleEnabledState() 80 | } 81 | 82 | function deviceNavigation(data1, data2) 83 | { 84 | if (device_select_state = 1) 85 | { 86 | if (data2 > 64) 87 | { 88 | primaryDevice.switchToDevice(DeviceType.ANY, ChainLocation.NEXT) 89 | device_select_state = 0 90 | } 91 | if (data2 < 64) 92 | { 93 | primaryDevice.switchToDevice(DeviceType.ANY, ChainLocation.PREVIOUS) 94 | device_select_state = 0 95 | } 96 | } 97 | if (data2 == 64) 98 | device_select_state = 1 99 | } 100 | 101 | function launchClipSlots(data1, data2) 102 | { 103 | if (data1 < 8 && data2 == 127) 104 | { 105 | trackBank.getTrack((data1)/2).getClipLauncher().launch(data1 % 2); 106 | } 107 | } 108 | 109 | function stopClips(data1, data2) 110 | { 111 | if (data1 >= 8 && data1 < 16 && data2 == 127) 112 | { 113 | clip = data1 - 8 114 | trackBank.getTrack((clip)/2).stop(); 115 | } 116 | } 117 | 118 | function deleteClips(data1, data2) 119 | { 120 | if (data1 >= 16 && data1 < 24 && data2 == 127) 121 | { 122 | clip = data1 - 16 123 | trackBank.getTrack((clip)/2).getClipLauncher().deleteClip(clip % 2); 124 | } 125 | } 126 | 127 | function launchScenes(data1, data2) 128 | { 129 | if (data1 == 10 && data2 ==127) 130 | { 131 | trackBank.launchScene(0) 132 | } 133 | if (data1 == 11 && data2 == 127) 134 | { 135 | trackBank.launchScene(1) 136 | } 137 | 138 | } 139 | 140 | function getGridObserverFunc(track, varToStore) 141 | { 142 | return function(scene, value) 143 | { 144 | varToStore[scene*4 + track] = value; 145 | LED() 146 | } 147 | } 148 | 149 | function scrollTrackBank(data1, data2) 150 | { 151 | if (data1 == 24 && data2 == 127) 152 | { 153 | trackBank.scrollScenesUp() 154 | 155 | }else if (data1 == 25 && data2 == 127) 156 | { 157 | trackBank.scrollScenesDown() 158 | }else if (data1 == 26 && data2 == 127) 159 | { 160 | for(i = 0; i < 4; i ++) 161 | { 162 | trackBank.getTrack(i).stop(); 163 | } 164 | } 165 | 166 | } 167 | 168 | function scrollLEDs() 169 | { 170 | if (scrollUp == true) 171 | { 172 | sendMidi(176, 119, 1) 173 | sendMidi(176, 29, 0) 174 | }else 175 | { 176 | sendMidi(176, 29, 1) 177 | sendMidi(176, 119, 2) 178 | } 179 | if (scrollDown == true) 180 | { 181 | sendMidi(176, 114, 1) 182 | sendMidi(176, 24, 0) 183 | }else 184 | { 185 | sendMidi(176, 114, 0) 186 | sendMidi(176, 24, 1) 187 | } 188 | 189 | } 190 | 191 | 192 | function contentLED() 193 | { 194 | for(i = 0; i < 8; i++){ 195 | if (hasContent[i] == true){ 196 | pendingLEDs[i] = 1 //Has Content 197 | }else if (hasContent[i] == false){ 198 | pendingLEDs[i] = 0 199 | } 200 | } 201 | 202 | } 203 | 204 | 205 | function playingLED() 206 | { 207 | for(i = 0; i < 8; i++){ 208 | if (isPlaying[i] == true){ 209 | pendingLEDs[i] = 2 //Is Playing 210 | } 211 | } 212 | } 213 | 214 | function recordingLED() 215 | { 216 | for (i = 0 ; i <8; i ++){ 217 | if (isRecording[i] == true){ 218 | pendingLEDs[i] = 3 //Is Recording 219 | } 220 | } 221 | 222 | } 223 | 224 | 225 | function clipUpdate() 226 | { 227 | for(i = 0; i < 8; i ++) 228 | { 229 | if (pendingLEDs[i] != currentLEDs[i]){ 230 | currentLEDs[i] = pendingLEDs[i] 231 | sendClipLEDs(i) 232 | } 233 | } 234 | } 235 | 236 | function LED() 237 | { 238 | if (mode == 1) 239 | { 240 | contentLED(); 241 | playingLED(); 242 | recordingLED(); 243 | clipUpdate(); 244 | } 245 | if (mode == 2) 246 | { 247 | 248 | } 249 | } 250 | 251 | function clearLEDs() 252 | { 253 | for (i=20; i <= 30; i ++) 254 | { 255 | sendMidi(176, i, 0) 256 | sendMidi(176, (i + 90), 0) 257 | } 258 | if (mode == 1) 259 | { 260 | for(i = 0; i < 8; i ++) 261 | { 262 | sendClipLEDs(i) 263 | } 264 | } 265 | } 266 | 267 | 268 | function sendClipLEDs(index){ 269 | switch(index){ 270 | case 4: 271 | if(currentLEDs[index] == 0){ 272 | sendMidi(176, 25, 0) 273 | sendMidi(176, 115, 0) 274 | 275 | }else if (currentLEDs[index] == 1){ 276 | sendMidi(176, 25, 2) 277 | sendMidi(176, 115, 2) 278 | 279 | }else if (currentLEDs[index] == 2){ 280 | sendMidi(176, 25, 0) 281 | sendMidi(176, 115, 3) 282 | }else if (currentLEDs[index] == 3){ 283 | sendMidi(176, 25, 3) 284 | sendMidi(176, 115, 0) 285 | } 286 | break; 287 | case 5: 288 | if(currentLEDs[index] == 0){ 289 | sendMidi(176, 26, 0) 290 | sendMidi(176, 116, 0) 291 | 292 | }else if (currentLEDs[index] == 1){ 293 | sendMidi(176, 26, 2) 294 | sendMidi(176, 116, 2) 295 | 296 | }else if (currentLEDs[index] == 2){ 297 | sendMidi(176, 26, 0) 298 | sendMidi(176, 116, 3) 299 | }else if (currentLEDs[index] == 3){ 300 | sendMidi(176, 26, 3) 301 | sendMidi(176, 116, 0) 302 | } 303 | break; 304 | case 6: 305 | if(currentLEDs[index] == 0){ 306 | sendMidi(176, 27, 0) 307 | sendMidi(176, 117, 0) 308 | 309 | }else if (currentLEDs[index] == 1){ 310 | sendMidi(176, 27, 2) 311 | sendMidi(176, 117, 2) 312 | 313 | }else if (currentLEDs[index] == 2){ 314 | sendMidi(176, 27, 0) 315 | sendMidi(176, 117, 3) 316 | }else if (currentLEDs[index] == 3){ 317 | sendMidi(176, 27, 3) 318 | sendMidi(176, 117, 0) 319 | } 320 | break; 321 | case 7: 322 | if(currentLEDs[index] == 0){ 323 | sendMidi(176, 28, 0) 324 | sendMidi(176, 118, 0) 325 | 326 | }else if (currentLEDs[index] == 1){ 327 | sendMidi(176, 28, 2) 328 | sendMidi(176, 118, 2) 329 | 330 | }else if (currentLEDs[index] == 2){ 331 | sendMidi(176, 28, 0) 332 | sendMidi(176, 118, 3) 333 | }else if (currentLEDs[index] == 3){ 334 | sendMidi(176, 28, 3) 335 | sendMidi(176, 118, 0) 336 | } 337 | break; 338 | case 0: 339 | if(currentLEDs[index] == 0){ 340 | sendMidi(176, 20, 0) 341 | sendMidi(176, 110, 0) 342 | 343 | }else if (currentLEDs[index] == 1){ 344 | sendMidi(176, 20, 2) 345 | sendMidi(176, 110, 2) 346 | 347 | }else if (currentLEDs[index] == 2){ 348 | sendMidi(176, 20, 0) 349 | sendMidi(176, 110, 3) 350 | }else if (currentLEDs[index] == 3){ 351 | sendMidi(176, 20, 3) 352 | sendMidi(176, 110, 0) 353 | } 354 | break; 355 | case 1: 356 | if(currentLEDs[index] == 0){ 357 | sendMidi(176, 21, 0) 358 | sendMidi(176, 111, 0) 359 | 360 | }else if (currentLEDs[index] == 1){ 361 | sendMidi(176, 21, 2) 362 | sendMidi(176, 111, 2) 363 | 364 | }else if (currentLEDs[index] == 2){ 365 | sendMidi(176, 21, 0) 366 | sendMidi(176, 111, 3) 367 | }else if (currentLEDs[index] == 3){ 368 | sendMidi(176, 21, 3) 369 | sendMidi(176, 111, 0) 370 | } 371 | break; 372 | case 2: 373 | if(currentLEDs[index] == 0){ 374 | sendMidi(176, 22, 0) 375 | sendMidi(176, 112, 0) 376 | 377 | }else if (currentLEDs[index] == 1){ 378 | sendMidi(176, 22, 2) 379 | sendMidi(176, 112, 2) 380 | 381 | }else if (currentLEDs[index] == 2){ 382 | sendMidi(176, 22, 0) 383 | sendMidi(176, 112, 3) 384 | }else if (currentLEDs[index] == 3){ 385 | sendMidi(176, 22, 3) 386 | sendMidi(176, 112, 0) 387 | } 388 | break; 389 | case 3: 390 | if(currentLEDs[index] == 0){ 391 | sendMidi(176, 23, 0) 392 | sendMidi(176, 113, 0) 393 | 394 | }else if (currentLEDs[index] == 1){ 395 | sendMidi(176, 23, 2) 396 | sendMidi(176, 113, 2) 397 | 398 | }else if (currentLEDs[index] == 2){ 399 | sendMidi(176, 23, 0) 400 | sendMidi(176, 113, 3) 401 | }else if (currentLEDs[index] == 3){ 402 | sendMidi(176, 23, 3) 403 | sendMidi(176, 113, 0) 404 | } 405 | break; 406 | } 407 | } --------------------------------------------------------------------------------