Posts by sumsar

    For the parameters with a linear range you have to scale the the parameter range to the raw value range.

    In your first example -5db would be 0 and +5db would be 16383.

    1. Math.round((value - parameter_min) * 16383.0) / (parameter_max - parameter_min)

    The Request String Parameter SYSEX function hasn't been updated since the reverb update (at the very least) and can't be used for every parameter.

    Some of the reverb parameters, like the Decay Time, have non linear ramps in the range that can't be queried. I've opted to interpolate between fixed points for my own use but that is a bit tedious if you want to map every parameter.

    Nice find!

    I've done a few quick tests and it does appear that extending the single parameter with two values sets up the morph range.

    It sure would be nice to get an update on the profiler midi parameter documentation some time.

    The only caveat I'm aware of in regards to morphing is that using the same slot selection cc's twice triggers the morph. Using a program change instead does not.

    I've been ignoring morphing because the documented way wouldn't be feasible for my use. But if this way works smoothly, I could do a lot with it.

    Thanks for sharing :)

    Linear parameter values have to be scaled into a range of 0-16383.

    The mix parameter has two 100% ranges, the first is dry and the second is wet.

    Assuming you mean 90% dry, the scaling would be: 16383 * 90 / (100+100) = 7372

    For non-linear parameter values you either have to interpolate between known values or create a lookup table.

    The Request Parameter Value as Rendered String function can be used to build lookup tables for some parameters, but it doesnt return the right value for others.

    In the MIDI protocol the top bit (the 8th bit) is reserved as a special marker. So the kemper uses an encoding for 14-bit NPRNs to ensure that the top bit of each byte is cleared.


    F0 00 20 33 02 7F 01 00 3C 00 00 91 F7

    Because 0x91 is bigger than 0x7F (the maximum 7-bit value). The overflowing bit has to be shifted into the preceding 7-bit byte.

    So for 0x91 the byte values would have to be:

    0x91 >> 7)= 0x01 bitwise shifting the value right by 7 bits leaves the upper 7 bits.

    0x91 & 0x7F = 0x11 bitwise anding by the maximum 7-bit value leaves the lower 7 bits

    Which gives:

    F0 00 20 33 02 7F 01 00 3C 00 01 11 F7

    With UI to MIDI enabled you can monitor which messages are generated for most of the editing you can do on the kemper.

    I've done it for the new delays and reverbs a while ago, for a similarish use case.

    In my implementation I have not been able to dynamically setup reverbs without leaving an audible gap.

    My approach was to first set the stomp type, toggle it on and finally set the needed effect parameters.

    I think morphing would be better if the limitations fit your use case.

    Rig Manager stores the rigs and tags in separate sqlite databases for each folder you create. Mirroring the folder structure of your local library.

    I'm not sure why they've chosen this design but I can understand why they might have an aversion to implementing sub folder search on top of it.