This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| code61 [2026/03/14 17:05] – created Yuki | code61 [2026/03/14 21:33] (current) – Yuki | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | MIDI port: < | ||
| + | |||
| + | <WRAP tabs> | ||
| + | * [[# | ||
| + | </ | ||
| + | |||
| + | <WRAP settings> | ||
| + | |Global channel|< | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | </ | ||
| + | |XY pad curve|< | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | </ | ||
| + | |Mackie Control / HUI|< | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | </ | ||
| + | |Key Octave|< | ||
| + | |Key Transpose|< | ||
| + | |Key Curve|< | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | </ | ||
| + | |Pad Octave|< | ||
| + | |Pad Transpose|< | ||
| + | |Pad Curve|< | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | </ | ||
| + | |Encoder Curve|< | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | </ | ||
| + | |Program|< | ||
| + | |MSB|< | ||
| + | |LSB|< | ||
| + | |MIDI DIN Out|< | ||
| + | <option value=" | ||
| + | <option value=" | ||
| + | </ | ||
| + | < | ||
| + | <button onclick=" | ||
| + | <button onclick=" | ||
| + | </ | ||
| + | </ | ||
| + | |||
| < | < | ||
| - | <p> | ||
| - | <select id=" | ||
| - | </p> | ||
| - | <p> | ||
| - | <button id=" | ||
| - | </p> | ||
| <script src=" | <script src=" | ||
| - | < | + | <script> |
| + | Array.prototype.compare = function(a){ | ||
| + | return this.length === a.length && this.every((v, | ||
| + | } | ||
| + | | ||
| WebMidi | WebMidi | ||
| .enable({sysex: | .enable({sysex: | ||
| .then(onEnabled) | .then(onEnabled) | ||
| .catch(err => console.log(err)); | .catch(err => console.log(err)); | ||
| + | var index = 0; | ||
| + | var keybDetected = false; | ||
| function getInput(){ | function getInput(){ | ||
| - | return WebMidi.inputs[document.querySelector("# | + | return WebMidi.inputs[index]; |
| } | } | ||
| function getOutput(){ | function getOutput(){ | ||
| - | return WebMidi.getOutputByName(getInpiut().name); | + | |
| + | | ||
| } | } | ||
| function onEnabled() { | function onEnabled() { | ||
| - | WebMidi.inputs.forEach((device, | + | WebMidi.inputs.forEach((device, |
| - | document.querySelector("# | + | document.querySelector("# |
| + | }); | ||
| + | if(WebMidi.inputs.length > 0) | ||
| + | { | ||
| + | getInput().addListener(" | ||
| + | sendDeviceQuery(); | ||
| + | } | ||
| + | document.querySelector("# | ||
| + | getInput().removeListener(" | ||
| + | keybDetected = false; | ||
| + | document.querySelector("# | ||
| + | index = document.querySelector("# | ||
| + | getInput().addListener(" | ||
| + | sendDeviceQuery(); | ||
| + | }); | ||
| + | } | ||
| + | function onSysex(e) { | ||
| + | if(e.message.manufacturerId.compare([126]) && e.dataBytes.slice(0, | ||
| + | keybDetected = true; | ||
| + | document.querySelector("# | ||
| + | sendUnlock(); | ||
| + | } | ||
| + | if(e.message.manufacturerId.compare([0, | ||
| + | var address = e.dataBytes[6]*128+e.dataBytes[7]; | ||
| + | var value = e.dataBytes[8]*128+e.dataBytes[9]; | ||
| + | if(address == 5 || address == 8) value -= 5; | ||
| + | if(address == 6 || address == 9) value -= 12; | ||
| + | document.querySelector("# | ||
| + | console.log([address, | ||
| + | } | ||
| + | } | ||
| + | function sendDeviceQuery() { | ||
| + | getOutput().sendSysex(0x7e, | ||
| + | } | ||
| + | function sendUnlock() { | ||
| + | getOutput().sendSysex([0, | ||
| + | } | ||
| + | function getSetting(id) { | ||
| + | var msb = id / 128 % 128; | ||
| + | var lsb = id % 128; | ||
| + | getOutput().sendSysex([0, | ||
| + | } | ||
| + | function sendSetting(id, | ||
| + | var amsb = id / 128 % 128; | ||
| + | var alsb = id % 128; | ||
| + | var vmsb = value / 128 % 128; | ||
| + | var vlsb = value % 128; | ||
| + | getOutput().sendSysex([0, | ||
| + | } | ||
| + | function getSettings() { | ||
| + | [0, | ||
| + | } | ||
| + | function setSettings() { | ||
| + | [0, | ||
| + | var value = document.querySelector("# | ||
| + | if(address == 5 || address == 8) value += 5; | ||
| + | if(address == 6 || address == 9) value += 12; | ||
| + | sendSetting(address, | ||
| }); | }); | ||
| } | } | ||
| </ | </ | ||
| </ | </ | ||