summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2018-08-03 20:06:21 +0200
committerJules Laplace <julescarbon@gmail.com>2018-08-03 20:06:21 +0200
commit57bb9aecd0483266872210de600ff78217205767 (patch)
tree3fc7eaa6c266dc375de470cbe8d5b23c9589fa72 /client
parentd76432715a7d13bac7f3647f1809c0a5c5a810e3 (diff)
add midi commands for jx8p but it isnt recognizing them
Diffstat (limited to 'client')
-rw-r--r--client/index.js129
-rw-r--r--client/jx8p.js634
-rw-r--r--client/subphatty.js920
3 files changed, 1683 insertions, 0 deletions
diff --git a/client/index.js b/client/index.js
new file mode 100644
index 0000000..2f47cc1
--- /dev/null
+++ b/client/index.js
@@ -0,0 +1,129 @@
+import WebMidi from 'webmidi'
+import { params } from './jx8p'
+
+let output;
+let channel = 1
+
+function init(){
+ build()
+ bind()
+ WebMidi.enable(ready)
+}
+function ready(err) {
+ if (err) {
+ console.error('webmidi failed to initialize')
+ return
+ }
+ if (!WebMidi.outputs.length) {
+ console.error('no MIDI output found')
+ }
+ console.log(WebMidi.inputs)
+ console.log(WebMidi.outputs)
+ output = WebMidi.outputs[0]
+}
+function build(){
+ const section_template = document.querySelector('#section_template').innerHTML
+ const checkbox_template = document.querySelector('#checkbox_template').innerHTML
+ const range_template = document.querySelector('#range_template').innerHTML
+ const enum_template = document.querySelector('#enum_template').innerHTML
+ const params_by_tag = params.reduce((a,b,i) => {
+ const tag = b.tag || b.name.split(' ')[0]
+ b.index = i
+ if (a[tag]) {
+ a[tag].push(b)
+ } else {
+ a[tag] = [b]
+ }
+ return a
+ }, {})
+ Object.keys(params_by_tag).map(tag => {
+ const els = params_by_tag[tag].map(param => {
+ let t, options;
+ switch (param.type) {
+ case 'checkbox':
+ t = checkbox_template.replace(/{name}/, param.name)
+ .replace(/{param_name}/, param.name.replace(/ /g, '_'))
+ .replace(/{index}/, param.index)
+ break
+ case 'range':
+ t = range_template.replace(/{name}/, param.name)
+ .replace(/{param_name}/, param.name.replace(/ /g, '_'))
+ .replace(/{index}/, param.index)
+ .replace(/{min}/, param.range[0])
+ .replace(/{max}/, param.range[1])
+ .replace(/{value}/, Math.floor((param.range[1] - param.range[0]) / 2))
+ break
+ case 'enum':
+ options = param.values.map(a => '<option value="' + a[0] + '">' + a[1] + '</option>')
+ t = enum_template.replace(/{name}/, param.name)
+ .replace(/{param_name}/, param.name.replace(/ /g, '_'))
+ .replace(/{index}/, param.index)
+ .replace(/{options}/, options)
+ .replace(/{value}/, param.values[0][0])
+ break
+ default:
+ console.log('unknown type', param)
+ t = ""
+ break
+ }
+ return t
+ }).filter(t => !!t)
+ let t = section_template.replace(/{name}/, tag).replace(/{els}/, els.join(''))
+ document.querySelector('#params').innerHTML += t
+ })
+}
+function bind(){
+ toArray(document.querySelectorAll('#params input[type=range]')).forEach(el => {
+ const index = el.dataset.index
+ const param = params[index]
+ el.addEventListener('input', () => {
+ update_param(param, el.value)
+ })
+ })
+ toArray(document.querySelectorAll('#params input[type=checkbox]')).forEach(el => {
+ const index = el.dataset.index
+ const param = params[index]
+ el.addEventListener('input', () => {
+ const isChecked = el.checked
+ const value = isChecked ? param.on : param.off
+ update_param(param, value)
+ })
+ })
+ toArray(document.querySelectorAll('#params select')).forEach(el => {
+ const index = el.dataset.index
+ const param = params[index]
+ el.addEventListener('input', () => {
+ update_param(param, el.value)
+ })
+ })
+ document.querySelector('#randomize').addEventListener('click', randomize)
+}
+function update_param(param, value){
+ if (param.fourteen) {
+ const msb = value >> 7
+ const lsb = value & 127
+ output.sendControlChange(param.fourteen[0], msb, channel)
+ output.sendControlChange(param.fourteen[1], lsb, channel)
+ } else {
+ output.sendControlChange(param.cc, value, channel)
+ }
+}
+function randint(n) {
+ return Math.floor(Math.random() * n)
+}
+function randomize(){
+ params.forEach(param => {
+ let value
+ if (param.randomize === false) return
+ if (param.type === 'range') {
+ value = randint(param.range[1])
+ update_param(param, value)
+ document.querySelector("input[name=" + param.name.replace(/ /g, '_') + "]").value = value
+ }
+ })
+}
+function toArray(a){
+ return Reflect.apply(Array.prototype.slice, a, [])
+}
+
+init()
diff --git a/client/jx8p.js b/client/jx8p.js
new file mode 100644
index 0000000..a91b36d
--- /dev/null
+++ b/client/jx8p.js
@@ -0,0 +1,634 @@
+export const params = [
+ {
+ "name": "DCO-1 RANGE",
+ "cc": 11,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "16'"
+ ],
+ [
+ 32,
+ "8'"
+ ],
+ [
+ 64,
+ "4'"
+ ],
+ [
+ 96,
+ "2'"
+ ]
+ ]
+ },
+ {
+ "name": "DCO-1 WAVEFORM",
+ "cc": 12,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "Noise"
+ ],
+ [
+ 32,
+ "Sawtooth"
+ ],
+ [
+ 64,
+ "Pulse"
+ ],
+ [
+ 96,
+ "Square"
+ ]
+ ]
+ },
+ {
+ "name": "DCO-1 TUNE",
+ "cc": 13,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "DCO-1 LFO MOD DEPTH",
+ "cc": 14,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "DCO-1 ENV MOD DEPTH",
+ "cc": 15,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "DCO-2 RANGE",
+ "cc": 16,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "16'"
+ ],
+ [
+ 32,
+ "8'"
+ ],
+ [
+ 64,
+ "4'"
+ ],
+ [
+ 96,
+ "2'"
+ ]
+ ]
+ },
+ {
+ "name": "DCO-2 WAVEFORM",
+ "cc": 17,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "Noise"
+ ],
+ [
+ 32,
+ "Sawtooth"
+ ],
+ [
+ 64,
+ "Pulse"
+ ],
+ [
+ 96,
+ "Square"
+ ]
+ ]
+ },
+ {
+ "name": "DCO-2 CROSSMOD",
+ "cc": 18,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "OFF"
+ ],
+ [
+ 32,
+ "SYNC 1"
+ ],
+ [
+ 64,
+ "SYNC 2"
+ ],
+ [
+ 96,
+ "XMOD"
+ ]
+ ]
+ },
+ {
+ "name": "DCO-2 TUNE",
+ "cc": 19,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "DCO-2 FINE TUNE",
+ "cc": 20,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "DCO-2 LFO MOD DEPTH",
+ "cc": 21,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "DCO-1 ENV MOD DEPTH",
+ "cc": 22,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "DCO DYNAMICS",
+ "cc": 26,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "OFF"
+ ],
+ [
+ 32,
+ "1"
+ ],
+ [
+ 64,
+ "2"
+ ],
+ [
+ 96,
+ "3"
+ ]
+ ]
+ },
+ {
+ "name": "DCO ENV MODE",
+ "cc": 27,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "ENV-2 Inverted"
+ ],
+ [
+ 32,
+ "ENV-2 Normal"
+ ],
+ [
+ 64,
+ "ENV-1 Inverted"
+ ],
+ [
+ 96,
+ "ENV-1 Normal"
+ ]
+ ]
+ },
+ {
+ "name": "MIXER DCO-1",
+ "cc": 28,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "MIXER DCO-2",
+ "cc": 29,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "MIXER ENV MOD DEPTH",
+ "cc": 30,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "MIXER DYNAMICS",
+ "cc": 31,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "Off"
+ ],
+ [
+ 32,
+ "1"
+ ],
+ [
+ 64,
+ "2"
+ ],
+ [
+ 96,
+ "3"
+ ]
+ ]
+ },
+ {
+ "name": "MIXER ENV MODE",
+ "cc": 32,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "ENV-2 Inverted"
+ ],
+ [
+ 32,
+ "ENV-2 Normal"
+ ],
+ [
+ 64,
+ "ENV-1 Inverted"
+ ],
+ [
+ 96,
+ "ENV-1 Normal"
+ ]
+ ]
+ },
+ {
+ "name": "HPF CUTOFF FREQ",
+ "cc": 33,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "0"
+ ],
+ [
+ 32,
+ "1"
+ ],
+ [
+ 64,
+ "2"
+ ],
+ [
+ 96,
+ "3"
+ ]
+ ]
+ },
+ {
+ "name": "VCF CUTOFF FREQ",
+ "cc": 34,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "VCF RESONANCE",
+ "cc": 35,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "VCF LFO MOD DEPTH",
+ "cc": 36,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "VCF ENV MOD DEPTH",
+ "cc": 37,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "VCF KEY FOLLOW",
+ "cc": 38,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "VCF DYNAMICS",
+ "cc": 39,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "Off"
+ ],
+ [
+ 32,
+ "1"
+ ],
+ [
+ 64,
+ "2"
+ ],
+ [
+ 96,
+ "3"
+ ]
+ ]
+ },
+ {
+ "name": "VCF ENV MODE",
+ "cc": 40,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "ENV-2 Inverted"
+ ],
+ [
+ 32,
+ "ENV-2 Normal"
+ ],
+ [
+ 64,
+ "ENV-1 Inverted"
+ ],
+ [
+ 96,
+ "ENV-1 Normal"
+ ]
+ ]
+ },
+ {
+ "name": "VCA LEVEL",
+ "cc": 41,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "VCA DYNAMICS",
+ "cc": 42,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "OFF"
+ ],
+ [
+ 32,
+ "1"
+ ],
+ [
+ 64,
+ "2"
+ ],
+ [
+ 96,
+ "3 "
+ ]
+ ]
+ },
+ {
+ "name": "CHORUS",
+ "cc": 43,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "Off"
+ ],
+ [
+ 32,
+ "1"
+ ],
+ [
+ 64,
+ "2"
+ ]
+ ]
+ },
+ {
+ "name": "LFO WAVEFORM",
+ "cc": 44,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "Random"
+ ],
+ [
+ 32,
+ "Square Wave"
+ ],
+ [
+ 64,
+ "Triangle Wave"
+ ]
+ ]
+ },
+ {
+ "name": "LFO DELAY TIME",
+ "cc": 45,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "LFO RATE",
+ "cc": 46,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "ENV-1 ATTACK TIME",
+ "cc": 47,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "ENV-1 DECAY TIME",
+ "cc": 48,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "ENV-1 SUSTAIN LEVEL",
+ "cc": 49,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "ENV-1 RELEASE TIME",
+ "cc": 50,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "ENV-1 KEY FOLLOW",
+ "cc": 51,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "Off"
+ ],
+ [
+ 32,
+ "1"
+ ],
+ [
+ 64,
+ "2"
+ ],
+ [
+ 96,
+ "3"
+ ]
+ ]
+ },
+ {
+ "name": "ENV-2 ATTACK TIME",
+ "cc": 52,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "ENV-2 DECAY TIME",
+ "cc": 53,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "ENV-2 SUSTAIN LEVEL",
+ "cc": 54,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "ENV-2 RELEASE TIME",
+ "cc": 55,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ]
+ },
+ {
+ "name": "ENV-2 KEY FOLLOW",
+ "cc": 56,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "Off"
+ ],
+ [
+ 32,
+ "1"
+ ],
+ [
+ 64,
+ "2"
+ ],
+ [
+ 96,
+ "3"
+ ]
+ ]
+ },
+ {
+ "name": "VCA ENV MODE",
+ "cc": 58,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "Gate"
+ ],
+ [
+ 64,
+ "ENV-2 Normal"
+ ]
+ ]
+ }
+] \ No newline at end of file
diff --git a/client/subphatty.js b/client/subphatty.js
new file mode 100644
index 0000000..b5cd3d2
--- /dev/null
+++ b/client/subphatty.js
@@ -0,0 +1,920 @@
+export const params = [
+ {
+ "name": "AMPLIFIER EG ATTACK",
+ "cc": 28,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 28,
+ 60
+ ]
+ },
+ {
+ "name": "AMPLIFIER EG DECAY",
+ "cc": 29,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 29,
+ 61
+ ]
+ },
+ {
+ "name": "AMPLIFIER EG SUSTAIN",
+ "cc": 30,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 30,
+ 62
+ ]
+ },
+ {
+ "name": "AMPLIFIER EG RELEASE",
+ "cc": 31,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 31,
+ 63
+ ]
+ },
+ {
+ "name": "FILTER EG ATTACK",
+ "cc": 23,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 23,
+ 55
+ ]
+ },
+ {
+ "name": "FILTER EG DECAY",
+ "cc": 24,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 24,
+ 56
+ ]
+ },
+ {
+ "name": "FILTER EG SUSTAIN",
+ "cc": 25,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 25,
+ 57
+ ]
+ },
+ {
+ "name": "FILTER EG RELEASE",
+ "cc": 26,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 26,
+ 58
+ ]
+ },
+ {
+ "name": "VCO 1 LEVEL",
+ "cc": 15,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 15,
+ 47
+ ]
+ },
+ {
+ "name": "VCO 2 LEVEL",
+ "cc": 16,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 16,
+ 48
+ ]
+ },
+ {
+ "name": "NOISE LEVEL",
+ "cc": 8,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 8,
+ 40
+ ]
+ },
+ {
+ "name": "VCO 1 SUB LEVEL",
+ "cc": 17,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 17,
+ 49
+ ]
+ },
+ {
+ "name": "VCO 1 WAVE",
+ "cc": 9,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 9,
+ 41
+ ]
+ },
+ {
+ "name": "VCO 2 WAVE",
+ "cc": 14,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 14,
+ 46
+ ]
+ },
+ {
+ "name": "VCO 2 FREQUENCY",
+ "cc": 12,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 12,
+ 44
+ ]
+ },
+ {
+ "name": "VCO 2 BEAT FREQUENCY",
+ "cc": 13,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 13,
+ 45
+ ]
+ },
+ {
+ "name": "VCO 2 HARD SYNC",
+ "cc": 77,
+ "type": "checkbox",
+ "off": 0,
+ "on": 64,
+ "fourteen": false
+ },
+ {
+ "name": "VCO GATE RESET",
+ "cc": 81,
+ "type": "checkbox",
+ "off": 0,
+ "on": 64,
+ "fourteen": false
+ },
+ {
+ "name": "FILTER CUTOFF FREQUENCY",
+ "cc": 19,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 19,
+ 51
+ ]
+ },
+ {
+ "name": "FILTER RESONANCE",
+ "cc": 21,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 21,
+ 53
+ ]
+ },
+ {
+ "name": "FILTER KB TRACKING AMOUNT",
+ "cc": 27,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 27,
+ 59
+ ]
+ },
+ {
+ "name": "FILTER EG AMOUNT",
+ "cc": 22,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 22,
+ 54
+ ]
+ },
+ {
+ "name": "MULTIDRIVE AMOUNT",
+ "cc": 18,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 18,
+ 50
+ ]
+ },
+ {
+ "name": "FILTER EG VELOCITY TO AMPLITUDE",
+ "cc": 110,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "AMPLIFIER EG VELOCITY TO AMPLITUDE",
+ "cc": 92,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "NOTE PRIORITY",
+ "cc": 111,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "Global"
+ ],
+ [
+ 32,
+ "Low Note"
+ ],
+ [
+ 64,
+ "High Note"
+ ],
+ [
+ 96,
+ "Last Note"
+ ]
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "RELEASE ON / OFF",
+ "cc": 88,
+ "type": "checkbox",
+ "off": 0,
+ "on": 64,
+ "fourteen": false
+ },
+ {
+ "name": "MODULATION SOURCE",
+ "cc": 71,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "Triangle LFO"
+ ],
+ [
+ 16,
+ "Square LFO"
+ ],
+ [
+ 32,
+ "Saw LFO"
+ ],
+ [
+ 48,
+ "Ramp LFO"
+ ],
+ [
+ 64,
+ "S&H"
+ ],
+ [
+ 80,
+ "Filter Envelope"
+ ]
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "LFO RATE",
+ "cc": 3,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 3,
+ 35
+ ]
+ },
+ {
+ "name": "LFO MIDI SYNC",
+ "cc": 102,
+ "type": "checkbox",
+ "off": 0,
+ "on": 64,
+ "fourteen": false
+ },
+ {
+ "name": "LFO GATE RESET",
+ "cc": 93,
+ "type": "checkbox",
+ "off": 0,
+ "on": 64,
+ "fourteen": false
+ },
+ {
+ "name": "FILTER MOD AMOUNT",
+ "cc": 2,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 2,
+ 34
+ ]
+ },
+ {
+ "name": "PITCH MOD AMOUNT",
+ "cc": 4,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 4,
+ 36
+ ]
+ },
+ {
+ "name": "WAVE MOD AMOUNT",
+ "cc": 20,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 20,
+ 52
+ ]
+ },
+ {
+ "name": "PITCH BEND UP",
+ "cc": 107,
+ "type": "range",
+ "range": [
+ 0,
+ 24
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "PITCH BEND DOWN",
+ "cc": 108,
+ "type": "range",
+ "range": [
+ 0,
+ 24
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "GLIDE ON / OFF",
+ "cc": 65,
+ "type": "checkbox",
+ "off": 0,
+ "on": 64,
+ "fourteen": false
+ },
+ {
+ "name": "GLIDE LEGATO",
+ "cc": 94,
+ "type": "checkbox",
+ "off": 0,
+ "on": 64,
+ "fourteen": false
+ },
+ {
+ "name": "GLIDE RATE",
+ "cc": 5,
+ "type": "range",
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 5,
+ 37
+ ]
+ },
+ {
+ "name": "GLIDE TYPE",
+ "cc": 85,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "Linear Constant Rate"
+ ],
+ [
+ 43,
+ "Linear Constant Time"
+ ],
+ [
+ 85,
+ "Exponential"
+ ]
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "LFO KB TRACKING AMT",
+ "cc": 78,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "AMPLIFIER EG RESET",
+ "cc": 83,
+ "type": "checkbox",
+ "off": 0,
+ "on": 64,
+ "fourteen": false
+ },
+ {
+ "name": "FILTER EG RESET",
+ "cc": 82,
+ "type": "checkbox",
+ "off": 0,
+ "on": 64,
+ "fourteen": false
+ },
+ {
+ "name": "OUTPUT LEVEL",
+ "cc": 7,
+ "type": "range",
+ "randomize": false,
+ "range": [
+ 0,
+ 16383
+ ],
+ "fourteen": [
+ 7,
+ 39
+ ]
+ },
+ {
+ "name": "KEYBOARD OCTAVE",
+ "cc": 89,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "-2 Oct"
+ ],
+ [
+ 16,
+ "-1 Oct"
+ ],
+ [
+ 32,
+ "+0 Oct"
+ ],
+ [
+ 48,
+ "+1 Oct"
+ ],
+ [
+ 64,
+ "+2 Oct"
+ ]
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "EXTERNAL INPUT LVL",
+ "cc": 116,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "AMPLIFIER EG DELAY",
+ "cc": 104,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "AMPLIFIER EG HOLD",
+ "cc": 106,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "FILTER EG DELAY",
+ "cc": 103,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "FILTER EG HOLD",
+ "cc": 105,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "PITCH MOD. OSC 2 ONLY",
+ "cc": 70,
+ "type": "checkbox",
+ "off": 0,
+ "on": 64,
+ "fourteen": false
+ },
+ {
+ "name": "MODULATION WHEEL",
+ "cc": 1,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "WAVE MOD DESTINATION",
+ "cc": 72,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "OSC 1 Only"
+ ],
+ [
+ 43,
+ "OSC 2 Only"
+ ],
+ [
+ 85,
+ "Both OSC 1 & 2"
+ ]
+ ],
+ "fourteen": false,
+ },
+ {
+ "name": "VCO 1 OCTAVE",
+ "cc": 74,
+ "type": "enum",
+ "values": [
+ [
+ 16,
+ "16'"
+ ],
+ [
+ 32,
+ "8'"
+ ],
+ [
+ 48,
+ "4"
+ ],
+ [
+ 64,
+ "2'"
+ ]
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "VCO 2 OCTAVE",
+ "cc": 75,
+ "type": "enum",
+ "values": [
+ [
+ 16,
+ "16'"
+ ],
+ [
+ 32,
+ "8'"
+ ],
+ [
+ 48,
+ "4"
+ ],
+ [
+ 64,
+ "2'"
+ ]
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "FILTER POLES",
+ "cc": 109,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "1 POLE"
+ ],
+ [
+ 32,
+ "2 POLES"
+ ],
+ [
+ 64,
+ "3 POLES"
+ ],
+ [
+ 96,
+ "4 POLES"
+ ]
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "LFO RANGE",
+ "cc": 76,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "Low (.01 Hz - 10Hz)"
+ ],
+ [
+ 43,
+ "Mid (.1Hz - 100Hz)"
+ ],
+ [
+ 85,
+ "High (1Hz - 1kHz)"
+ ]
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "LEGATO",
+ "cc": 68,
+ "type": "checkbox",
+ "off": 0,
+ "on": 64,
+ "fourteen": false
+ },
+ {
+ "name": "KEYBOARD TRANSPOSE",
+ "cc": 119,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "-12 Semitones"
+ ],
+ [
+ 1,
+ "-11 Semitones..."
+ ],
+ [
+ 12,
+ "+0 Semitones..."
+ ],
+ [
+ 24,
+ "+12 Semitones"
+ ]
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "GATED GLIDE",
+ "cc": 73,
+ "type": "checkbox",
+ "off": 0,
+ "on": 64,
+ "fourteen": false
+ },
+ {
+ "name": "FILTER EG REPEAT",
+ "cc": 112,
+ "type": "checkbox",
+ "off": 0,
+ "on": 64,
+ "fourteen": false
+ },
+ {
+ "name": "FILTER EG VELOCITY TO TIME",
+ "cc": 86,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "FILTER EG KB AMOUNT",
+ "cc": 79,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "FILTER EG GATE SOURCE",
+ "cc": 90,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "Gate On"
+ ],
+ [
+ 32,
+ "Keys Only"
+ ],
+ [
+ 64,
+ "Gate Only"
+ ],
+ [
+ 96,
+ "Keys or Gate Input"
+ ]
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "AMPLIFIER EG REPEAT",
+ "cc": 113,
+ "type": "checkbox",
+ "off": 0,
+ "on": 64,
+ "fourteen": false
+ },
+ {
+ "name": "AMPLIFIER EG VELOCITY TO TIME",
+ "cc": 87,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "AMPLIFIER EG KB AMOUNT",
+ "cc": 80,
+ "type": "range",
+ "range": [
+ 0,
+ 127
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "VOLUME EG GATE SOURCE",
+ "cc": 91,
+ "type": "enum",
+ "values": [
+ [
+ 0,
+ "Gate On"
+ ],
+ [
+ 32,
+ "Keys Only"
+ ],
+ [
+ 64,
+ "Gate Only"
+ ],
+ [
+ 96,
+ "Keys Or Gate Input"
+ ]
+ ],
+ "fourteen": false
+ },
+ {
+ "name": "FILTER EG TRIGGER MODE",
+ "cc": 114,
+ "type": "checkbox",
+ "off": 0,
+ "on": 64,
+ "fourteen": false
+ },
+ {
+ "name": "AMPLIFIER EG TRIGGER MODE",
+ "cc": 115,
+ "type": "checkbox",
+ "off": 0,
+ "on": 64,
+ "fourteen": false
+ }
+] \ No newline at end of file