This now completely implemented.

To learn, hold Ctrl while right-clicking on any GUI control. There will be a pop-up window detailing the control you selected, or a message saying it's not learnable.

You will also get a message in the console window (or CLI).

After that, if you were learning, the first physical controller you move, or CC message you send will be locked, and you'll see the GUI knob or slider move in sympathy with the physical control. The pop-up window will also disappear. and the console message will be "Learned" and a line underneath with exactly what control was caught.

If you now use the 'Yoshimi' drop-down menu and click on 'MIDI Learn' you will see a new editing window displaying your recently learned controller. Along with a number of settings, you'll see text with precise details of this complete action. There is also a config setting them makes the editing window appear whenever a new control is learned.

If the controller you learned was an NRPN this will show as a hexadecimal number in the CC field, and this field will not be editable. As of V 1.5.2 there is a checkbox so that you can set this as a LSB only type (some hardware synths send these).

There is also an 'activity' LED that flickers when the associated CC/channel is received, provided the line is not muted, or blocked by an earlier one.

From version 1.5.2 some check-boxes, selectors and menus are learnable. These are identified by either a pale blue surround or pale blue buttons. Note that when learning a menu you have to actually make a choice while holding down the Ctrl key.

There is currently a limit of 200 lines.


Editor settings available:

Incoming CC (not NRPNs).

Incoming channel number.

Minimum & Maximum incoming percentage values (if Min is greater than Max it reverses the control direction). If they are the same, then it becomes a threshold setting, and any incoming value below this will be regarded as 0, and an other value will be seen as 127.

The range can either be in the style of a limiter or as compression.

Blocking of all later actions on the same CC/channel pair (including system ones).

Muting of this line - nullifying all of the above but keeping the capability.

You can delete any existing line by holding down the 'CTRL' key and then clicking on the 'Control Function' text for that line. You will then be presented with a confirmation message giving the line number and the text as a reminder.

The same CC/controller can be used to change several different internal Yoshimi controls. e.g. you can have a part's volume being changed while another part is having an effect level changed.

Adding or deleting lines, or changing either CC or channel numbers may re-order the others.

There is a button at the bottom of the window for clearing the entire learned list.

A complete list can be saved by clicking on the 'save' button and you will get the usual file choser window.

Loading sets follows the same practice. If a loaded set refers to Yoshimi controls that are disabled, or don't exist, such controls will be ignored and the 'Control Function' text will include a message to that effect. However the 'block feature will still be active unless the line is muted.

Finally, there is a button for loading a set from the recent history.

To come:
Paging of the display so you don't end up scrolling through a massive list.
