This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| code61 [2026/03/14 21:29] – Yuki | code61 [2026/03/24 00:20] (current) – Yuki | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | MIDI port: < | + | MIDI port: < |
| + | |||
| + | < | ||
| <WRAP tabs> | <WRAP tabs> | ||
| Line 6: | Line 8: | ||
| <WRAP settings> | <WRAP settings> | ||
| - | |Global | + | |Global |
| <option value=" | <option value=" | ||
| <option value=" | <option value=" | ||
| Line 24: | Line 26: | ||
| <option value=" | <option value=" | ||
| </ | </ | ||
| - | |XY pad curve|< | + | |XY Pad Curve|< |
| - | <option value=" | + | <option value=" |
| - | <option value=" | + | <option value=" |
| - | <option value=" | + | <option value=" |
| <option value=" | <option value=" | ||
| <option value=" | <option value=" | ||
| Line 36: | Line 38: | ||
| <option value=" | <option value=" | ||
| </ | </ | ||
| - | |Mackie Control / HUI|< | + | |Mackie Control / HUI|< |
| <option value=" | <option value=" | ||
| <option value=" | <option value=" | ||
| </ | </ | ||
| - | |Key Octave|< | + | |Key Octave|< |
| - | |Key Transpose|< | + | |Key Transpose|< |
| - | |Key Curve|< | + | |Key Curve|< |
| - | <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=" |
| </ | </ | ||
| - | |Pad Octave|< | + | |Pad Octave|< |
| - | |Pad Transpose|< | + | |Pad Transpose|< |
| - | |Pad Curve|< | + | |Pad Curve|< |
| - | <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=" |
| - | <option value=" | + | <option value=" |
| - | <option value=" | + | <option value=" |
| </ | </ | ||
| - | |Encoder Curve|< | + | |Encoder Curve|< |
| <option value=" | <option value=" | ||
| - | <option value=" | + | <option value=" |
| - | <option value=" | + | <option value=" |
| - | <option value=" | + | <option value=" |
| </ | </ | ||
| - | |Program|< | + | |Program|< |
| - | |MSB|< | + | |MSB|< |
| - | |LSB|< | + | |LSB|< |
| - | |MIDI DIN Out|< | + | |MIDI DIN Out|< |
| <option value=" | <option value=" | ||
| <option value=" | <option value=" | ||
| </ | </ | ||
| < | < | ||
| - | <button onclick=" | + | < |
| - | <button onclick=" | + | < |
| </ | </ | ||
| </ | </ | ||
| Line 86: | Line 88: | ||
| < | < | ||
| <script src=" | <script src=" | ||
| - | <script> | + | < |
| - | Array.prototype.compare | + | |
| - | return this.length === a.length && this.every((v, | + | |
| - | } | + | |
| - | + | ||
| - | WebMidi | + | |
| - | .enable({sysex: | + | |
| - | .then(onEnabled) | + | |
| - | .catch(err => console.log(err)); | + | |
| - | var index = 0; | + | |
| - | var keybDetected = false; | + | |
| - | function getInput(){ | + | |
| - | return WebMidi.inputs[index]; | + | |
| - | } | + | |
| - | function getOutput(){ | + | |
| - | var name = getInput().name; | + | |
| - | return WebMidi.getOutputByName(name.replace("IN"," | + | |
| - | } | + | |
| - | function onEnabled() { | + | |
| - | WebMidi.inputs.forEach((device, | + | |
| - | 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, | + | |
| - | } | + | |
| - | </ | + | |
| </ | </ | ||