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

                            *** WARNING ***

There are very limited error checks on this so you can easily crash Yoshimi with out of range values! However, many 'ordindary' values are now range checked and adusted. So if you try to set master volume to (say) 200 it will actually be set to 127.

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.

Sections currently in place and tested:

Top level controls
Config - now used by GUI for writes
Vectors - now used by GUI for writes
Microtonal (scales) - now used by GUI for writes
Midi-learn - used for all operations
Main part controls - now used by GUI for writes
Controllers Window - now used by GUI for writes
MIDI learn editor window - used for all except incoming real MIDI
Kit edit window - now used by GUI for writes
AddSynth Editor - now used by GUI for writes
AddSynth Voice Editor - now used by GUI for writes
Subsynth Editor - now used by GUI for writes
Padsynth Editor - now used by GUI for writes
Oscillator - now used by GUI for writes
Resonance - now used by GUI for writes
Effects - now used by GUI for writes
LFOs - now used by GUI for writes
Filters - now used by GUI for writes
Envelopes - now used by GUI for writes

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.


Limits testing now has it's own entry. See Limits.txt.
