Trying to work with parameter requests

I’m trying to figure out how to create a preset that only resceives the data of a specific set of parameters on a Yamaha CK88. It’s not my goal, nor necessary, to create a complete editor. I just want to work with a set of parameters that might be important in a live situation.

I looked at this huge guide …

… to learn how to request parameters from an instrument.

Maybe it’s just me, but the first thing I stumbled upon was the location of the second screenshot. :man_shrugging:t3: After some time, I figured out that these settings are located under “Edit Device”.

After that, however, I was at least able to create a parameter request that retrieves the current setting from the device. Unfortunately, the CK88 manual does not provide the format for a response as described in step 2 of this guide. The request taken from the manual looks basically the same as the associated SysEx for controlling the parameter on the device, except that it contains “30” as the “device number” while the requested data contains “10”. And of course, there is no value.

Is it possible to use the “answer” from the instrument as the source for the response format? I tried to use device number “10” (from the “answer”) but that didn’t lead to a result when I use “MIDI learn” to map the parameter.

I tried to figure out the mapping and apply it, but unfortunately I can’t get it from the tutorial because it looks so different on my system. When I use “MIDI Learn” to listen to the response for further mapping with device number “30” (the same as the request), I always get a different result depending on the current parameter status of the instrument. The parameter range is obviously from (HEX) 00 to 22. The MIDI Learn result on 00 looks like this:

… and the one on 22 like:

Does this result enables me to use it to map the incoming data to my control?

Apologies if this might be too easy for everyone with a developing or at least scripting background/experience. I’d be happy reading if this were documented for a simple guy like me with only a few basic MIDI knowledge. :man_shrugging:t3:

Thanks in advance for your understanding.

Patch parsing is intended for parsing multiple parameters at once from one or a limited number of of sysex dumps each containing a considerable set of parameters. This can be hundreds or parameters in one single message, that together shape a patch.

Your example however shows a reply that only contains one single value. What about all the other parameters you want to control? Are each of them in separate messages? You could theoretically use patch parsing for such case, but you might end up in a rabbithole.

Do provide some more info on how sysex would look like for the other parameters.

1 Like

Thanks a lot for getting back to me.

For me, there are two reasons to first look at a single parameter. Please allow me to explain.

Reason 1: The CK88 is a very versatile stage keyboard for live musicians, already offering many knobs, switches and buttons to control parameters directly from the interface. I created a Live Set collection for this instrument, which sells quite well worldwide. The instrument has an A/D input to which a microphone can be connected, and even has speakers. This allows musicians to play and sing without the need for a mixer, speakers, PA systems, etc. The input has a multi-insert effects section to add reverb or a parametric EQ, for example. However, these special parameters do not have hardware controls, but require some “menu diving”.

Looking at the smaller E1 that has been announced I was thinking that this could be a very comfortable solution for live players to control their settings during a live performance. Just as a simple example when you moderate, you don’t want to speak to your audience through a Reverb and there is no switch to turn it off and on again.

Therefore, to me it wouldn’t make any sense to parse hundreds of parameters that are already controllable from the UI only to separate a handful of parameters that I like to control.

Reason 2: I read your tutorial over and over again. But since I don’t have the same device to recreate something practically and have no experience with coding or scripting, I was simply overwhelmed. After I found the device editing page within the Chrome E1 editor and took a look at the instrument’s MIDI implementation I thought that it should be possible to only request a few parameters one by one and map their responses to controls on the E1.

And with exactly the same priority I also like the simplicity at the beginning, instead of messing around with hundreds of parameters that “offer” the same amount of traps for a noob like me.

The parameter request i.e. to set the Effect 1 Type looks like:

F0 43 30 7F 1C 0B 46 00 45 F7

This part of the message is the related parameter address | 46 00 45 |.

The response from the instrument looks the same as already mentioned except the Device ID and of course the value.

F0 43 10 7F 1C 0B 46 00 45 00 F7

Since this address part of the SysEx is unique for each particular parameter my - obviously as always too simple - thinking is that the parameter address | 46 00 45 | should be sufficient to let the E1 know that the value for this parameter address should be mapped to the E1 controller that features the same address.

But these highlighted bits from the screenshots of my first post obviously only mark the changes in the Device ID and the value - basically the same I see when looking at the difference of both SysEx strings.

But how is this information useful to connect the incoming string to the control I created on the E1 and update the value with the request?

I would be happy if this were documented in detail somewhere. But I have also searched the online manual extensively - for me - without any helpful results. Any information is very welcome.

Thanks again!

Indeed, you should not use Patch Parsing for your use case. It will be too complicated.

And you don’t need the question - answer way of working neither (except when changing a patch). We’ll just need to send the command form one device to ther other.

Gimme 3 examples (with their sysex) of parameters you wish to control.

Important: do you intend for the E1 to control the instrument?
Or will the instrument also send out the same ‘answers’ if you tweak the parameters directly on the instrument.

Thanks again so much!

Could you - only out of interest - maybe in short explain why you think paring is too complicated for this use case? Isn’t it way easier to work with single individual parameters than a complete patch request? How does this work at all? Requesting an entire patch contains - beside the SysEx header and EOX - multiple parameter addresses and their values, right? Something like…

HEADER | P1 address, P1 value | P2 address, P2 value … | EOX

Based on their addresses the values should be sent to the referring controllers that are part of the E1 preset and update them accordingly.

Is this correct so far? If not please let me know where my thinking is wrong if you have the chance.

If it is at least roughly correct, isn’t it much easier to only deal with a single parameter then?

Sure.

  1. Effect 1 type
    F0 43 10 7F 1C 0B 46 00 45 V F7 (V = value)
    Range: 00-22

  2. Effect 1 depth
    F0 43 10 7F 1C 0B 46 00 46 V F7
    Range: 00–7F

  3. A/D Input Volume
    F0 43 10 7F 1C 0B 46 00 4C V F7
    Range: 00–7F

Not sure if I got this question right. The CK series feature 80 so called Live Sets (patches). The parameters I am looking at can be stored differently in every Live Set.

My goal is of course to create controllers on my E1 to work with these parameters on the instrument without the need to call up the edit menus. But I like to start with the values that are stored within the current Live Set and update the controls on the E1 accordingly. By the way in ideal case the E1 would recognize the change of a Live Set and request the update automatically if this would be possible.

Typical use case for example: The Live Set has some amount of Reverb on the input. During my performance I feel the amount is a bit too much for the room I am performing in. So I just like to turn the amount of Reverb down a bit for this moment and without the need to necessarily store the Live Set with the new settings. Or as mentioned, I’d like to speak and for better clarity turn off the Reverb entirely using a button I created on the E1. Makes sense?

When I change these parameters, which have SysEx addresses, on the instrument, the values ​​are not transmitted via MIDI at the same time. Knobs and switches that are assigned to CC data send their values ​​with the change on the instrument.

I hope this answer your questions.

And by the way: Another question would be if the target parameter on the instrument is only addressed via CC data and not via SysEx. Would it also be possible to request the associated setting of such a parameter to update its counterpart on the E1 preset?

Thanks!