This is a test feature only accessible from the command line.

                            *** WARNING ***

There are limited error checks on this so it may still be possible to crash Yoshimi with out of range values. However, most values are now range checked and may be ignored or adjusted.

It mostly updates the GUI.

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 envelope controller ranges.

This matches the results from using the middle mouse button in the GUI (assuming it was enabled at build time with 'ShowGuiRreports'). Some 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.

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/or floating point (looks for the decimal 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 differently for effects.

engine = the synth engine being adjusted.

insert = harmonics, LFOs, filters etc. also some kit mode controls.

parameter = subtype associated with some inserts.

par2 = an offset for some parameters.

In some situations par2 is used as a miscMsg ID for passing text values between threads but synchronised via the RT thread. A failed push will return 255 and trying to pop 255 will return an empty string.

If parameter has bit 7 set the command is passed to an alternative low priority function as there will be considerable text manipulation. If bit 6 is also set it will pass through a fade down and mute operation to avoid writing data to the audio engine when active. The return will go via this alternative text heavy route.


For limits testing send:
    direct limit min
    direct limit max
    direct limit def (for the default value)

These should be followed by values for the Control, Part, Kit etc.

For further details see Limits.txt.
