Requesting current values of control parameters from a device

It's easy enough to handle control parameter changes, but is there a way to ask the device for the current value of a control parameter? I'd like to create a UI that lets you edit the parameters, but want it to be initialized to whatever the value was on the device.

I looked into trying to use sysex to dump that data, but haven't found the information I think I need. I'm playing with a Microkorg XL and the particular sysex functions that it supports don't seem to be documented anywhere.

I tried using: output.sendSysex(0x42, [0x31, 0x7e, 0x19, 0x10]); where 0x42 is Korg's ID, 0x31 is channel 1 (I tried 0x30 too), 0x7E is the Microkorg XL model ID, and 0x19 0x10 came from here ( which corresponds to a data dump request on a Korg M1. I'm listening for all sysex messages, and gave my browser midi permissions (which were requested when I asked for sysex permissions, but not before).

Ideally there would be some message that tells the device to send a controlChange message even though there's no change, but I didn't find anything like that in my digging.

Any other thoughts/suggestions?



  • Hello Ben,

    As fas as I know, this cannot be done with vanilla MIDI 1.0 which, at this stage, is all that is supported by the Web MIDI API upon which WebMidi.js is built. MIDI 2.0 (MIDI-CI) will bring such capabilities.

    Having said that, you were right to look at sysex. I'm not familiar with Korg's sysex support but they might indeed provide that capability. Are you saying that the data dump returned nothing?

    The manual does provide the general format for sysex but not much detail about the available functions...

  • I didn't get back any sysex messages as far as I could tell, so I suspect I sent a message the synth didn't understand.

    Glad to hear that's coming in MIDI 2, although that doesn't help me :). I'll reach out to Korg and see if they have their sysex messages documented anywhere and I guess I'll see if I can find a machine capable of running their editor software and try to snoop on its MIDI messages.


  • Looks like most of what I needed was documented for the Microkorg and was collected by the internet archive here:

    I had to change the modelID from 58 to 7E, but it worked. output.sendSysex(0x42, [0x30, 0x7e, 0x10]); got back a dump of the current channel's params

  • edited December 2020

    Awesome! Thanks for reporting back.

    In case anybody stumbles upon this conversation, I'm adding the MicroKorg sysex commands below for future reference:

    | Byte[H] |                Description                     |
    |   F0    | Exclusive Status                               |
    |   7E    | Non Realtime Message                           |
    |   0g    | MIDI Global Channel  ( Device ID )             |
    |   06    | General Information                            |
    |   02    | Identity Reply                                 |
    |   42    | KORG ID              ( Manufacturers ID )      |
    |   58    | MS2000 Series ID     ( Family ID   (LSB))      |
    |   00    |                      ( Family ID   (MSB))      |
    |   mm    |                      ( Member ID   (LSB))      |
    |   00    |                      ( Member ID   (MSB))      |
    |   xx    |                      ( Minor Ver.  (LSB))      |
    |   xx    |                      ( Minor Ver.  (MSB))      |
    |   xx    |                      ( Major Ver.  (LSB))      |
    |   xx    |                      ( Major Ver.  (MSB))      |
    |   F7    | END OF EXCLUSIVE                               |
     mm = 11 : micro KORG
      This message is transmitted whenever a INQUIRY MESSAGE REQUEST is received.

    | Function ID |    Description/Function           |        |
    |    [Hex]    |                                   |  *5    |
    |     40      | CURRENT PROGRAM DATA DUMP         | R,D    |
    |     4C      | PROGRAM DATA DUMP                 | R,D    |
    |     51      | GLOBAL DATA DUMP                  | R,D    |
    |     50      | ALL DATA(PROGRAM,GLOBAL) DUMP     | R,D    |
    |     26      | DATA FORMAT ERROR                 | E      |
    |     23      | DATA LOAD COMPLETED               | E      |
    |     24      | DATA LOAD ERROR                   | E      |
    |     21      | WRITE COMPLETED                   | E      |
    |     22      | WRITE ERROR                       | E      |
     *5 : Transmitted when
          R  : Request message is received.
          D  : Data dump from MIDI dump page.
              (Doesn't respond to MIDI FILTER "SystemEx" parameter.)
          E  : Exclusive message is received.
Sign In or Register to comment.