This is an experimental test feature only accessible from the command line.

                            *** WARNING ***

There are virtually no error checks on this so you can easily crash Yoshimi with out of range values!

It mostly updates the GUI too.

Refer to "Yoshimi Control Numbers.ods" for control numbers and actions and "GUI_Interpretations.txt" for further explanations.

Also, see "Effect_Inserts" for the actual effect controllers and Envelope_Inserts for the enveople controller ranges.

Sections currently in place and tested:

Top level controls
Midi-learn
Main part controls
Controllers
Kit edit window
AddSynth Editor
AddSynth Voice Editor
Subsynth Editor
Padsynth Editor
Oscillator
Resonance
Effects
LFOs
Filters
Envelopes

The remaining ones will display as if they had been written to, but won't actually change anything.

This matches the results from using the middle mouse button in the GUI (assuming it was enabled at build time). Commands that are purely within the GUI,e.g window changes are recognised but not acted on. It is expected that any alternative input system will store its own copies of such intermediate information so that they remain fully independent.

An alternative way to find out the correct command sequence is to click on a control with any button *except* the middle one. Trailing '255's can be ommitted if there are no following parameters set.


The format is:

direct {value} {type} {control} {part} {kit} {engine} {insert} {parameter} {par2}

direct = the actual command name, must be typed in full.

value = the value that will be set, may be negative and floating point (looks for the devimal point).

type = a subset of the command type: 0 for read and 64 for write. Sending 1 will just echo the bytes you sent.
Sending 3 will turn it into a midi-learn command.

control = the number representing the control being changed or queried.

part = the number of the part being changed.

All the above are mandatory. The following must also be entered in sequence when needed.

kit = a part's kit number (if enabled otherwise zero).
      also used for effects.

engine = the synth engine being adjusted.

insert = harmonics, LFOs, filters etc.

parameter = subtype associated with some inserts.

par2 = an offset for some parameters.


A variation of the above is when you set flt_max as the value. This will be interpeted as requesting the min, max, and default values for the command and using the same 'CommandBlock' struct will return them as short integers in the form:
limits.min
limits.max
limits.def

Only a few of these are independently declared so far, all the reast have the values:
min = 0
max = 127
def = 0

def will return the default * 100. This is so that fractional values can be resolved. 0.5 comes up quite often. No default values are very large, but may be negative.

