Here I am going to explain all aspects of
AZ Controller configuration.
If you have not done that yet, I recommend you read
About first and than check you are able to use my plug-in following
Quick start instructions.
In case you have never written programs in conventional programming languages or some terminology in the following is unclear for you, please check
my introduction into programming.
User interface.User interface for AZ Controller is implemented inside SONAR Control Surface Property Page. It can be called from "Utilities" menu or from ACT Module Doc. For more information how to open the window, work with presets and "ACT Learn" button please read SONAR documentation.
I recommend to close the window when you are not changing/checking the configuration. While internal engine is speed optimized, the graphical part is not. The probability of crash is significantly increased once the window is opened.
The window is divided into "Last MIDI event" indicator, several pages (Tabs) configuration section and pure informational footer. In case you report any problem with this plug-in, do not forget to mention what you can see in "Version" and "SONAR version" areas in the lower right corner.
Last MIDI eventWhen the plug-in receives some MIDI event it is immediately displayed. Only the very last event is shown. In case you press a key on your keyboard and do not keep it pressed, "Note OFF" event is shown. "Note" (assuming ON) is actually also displayed, but you should keep the key pressed to see it.
Current version of the plug-in recognizes all possible MIDI messages. Known messages are displayed with abbreviation ( N(ote), Ch(annel), CC (Control Change), PC (Program Change), etc). Most SysEx messages are shown in Hex form.
If "OFF" is not displayed, the event is processed with "Note:ON" software state set (explained later).
In some situation, single MIDI message is not shown as an Event (RPN/NRPN, see Parameters in Options Tab).
If the event is assigned to some Logical Control, the information about this Logical Control is also displayed. In case Logical Control is attached to some Hardware Control Context, the Context is shown. Internal Logical Control ID is shown otherwise.
MIDI messages assigned to some "System" Control are still processed normally, but they are not shown as "Last event". In case some periodic MIDI message disturb you, you can assign it to "System" Hardware Control (see below). You can any time change the control type from "System" to something else to see the event and associated actions.
In case OSC is activated, you can also observe incoming OSC messages. Note that all OSC messages have exactly one parameter, independent from the real message.
Options TabExcept you planning to use the plug-in for ACT mapping only (see corresponding section), you should start configure AZ Controller here.
All user definable names are entered in this Tab. Several common rules (limitations) applies:
- All named objects recognized in system by internal (hidden) IDs, not by the text you are entering. System will not warn you in case you call 5 different rotors as "Rotor", they still are recognized as different. But that can confuse you later. It is sometimes perfectly ok to use equal names, but only when the meaning is clear. For example, "Shift" can be "On" and "Off". Also "Alt" can be "On" and "Off". I recommend to use descriptive, distinguishable but short names. That can save your time and nerves.
- All names are kept in lists. The first name entered will be the last in the list. In case you want see something ordered, please plan in advance. There is no possibility to change the order (for now). So, if you want to see "Prog1","Prog2" and "Prog3", create them as "Prog3", "Prog2" and "Prog1". The last entered Software State is special, see the explanation later
- Unlike with the rest on the interface, entering text and selecting items in combos are not immediately changing the configuration. Each section has separate "Save" button which affect only this section
- You can delete object when there is no more references to it. In case the object is in use, "Delete" button is greyed. There is no indication where it is used, but all possible places are predictable. You can modify an object name any time, it will be shown under the new name once you save the change.
- To create new Control/Set/State just select "<New control/set/state>" in the corresponding combo. Enter new name and press "Save".
- When you create a new Set, new State "Default" is automatically created in it because any Set should have at lease one State
- You can edit Set name by selecting "<Edit set>" in the State Combo.
Hardware controlsFor each
Hardware Control which generate recognizable MIDI Event you should register exactly one "Hardware control" in this plug-in. Even in case such control generate more then one MIDI Event depending on some state (see Hardware States). The only reasonable exceptions are normal keys, in case your controller is combined with a keyboard as well as any modulators. You can check which controls produce recognizable events using "Last MIDI event" monitoring.
There is yet another important exception when you want create 2 Hardware Controls for one physical control: in case this control is touch sensitive (that is not the same as velocity/pressure sensitive). You can recognize such controls by precisely looking what "Last event" display.
Once you have touched such control without moving it, you see one event type (note or CC) but as soon as you start moving/turn it, you see another message type. In that case it make sense to define in addition to "Slider1" control type "Slider" another "Slider1_touch" control with "System" type and assign the first (touch) MIDI event to it. Most practical Action list for such control will be "Touch 'Slider1'" Action (see the 'Touch' Action description).
If your hardware controller allows that, I strongly recommend to check that no different controls under any conditions generate the same MIDI Event. I mean exactly the same, if the Channel is different it is ok. In case one control general the same MIDI Event in many state that is obviously not a problem. If you do not follow this rule, "Instant" mode will not work at all and "Catch" mode is not going to work properly.
Correct controller type (Pad/Rotor/Slider) should be set. This type is used when the same events for different types have different meaning.
The System type has special interpretation. All MIDI assigned to Logical Controls for Hardware Control with such type will not be shown in the "Last MIDI event". Also Action execution progress for these Controls will not appear in the "Overview" tab. That is useful in case your controller generates some periodic events on it's own ("ping" or some "time code" not blocked by SONAR), which prevents you to see (and assign...) normal messages. The whole "protocol handshake" can be "hidden" there as well.
Example: for my MPK Mini I define 8 pads: "B1"..."B8" and 8 rotors: "R1"...."R8". I should NOT define hardware Banks/mode/prog switches and normal keys.
"Dup.(licate)" button. This button can be used to duplicate the whole hardware control, with related context(es) and action lists (but assignments are not duplicated). For example, once you have completely defined "Fader 1" control, it is simpler to duplicate it and modify the copy then recreate near exactly the same control from scratch. Effectively, this button create new Hardware control, context and logical control. In case you use the same logical control for several hardware controls (not recommended in general), the logical control is still duplicated instead of referencing the original one. But not in case you use the same logical control in several contexts of one hardware control.
Hardware statesIf there is some Hardware Control which trigger no MIDI Event but is changing what other controls send, it should be defined as "Hardware State Set". And all its possible positions should be defined as States in this Set.
There is no reason to define controls which have no influence on what the plug-in receives. For example, arpeggiators, power buttons and such.
Example: for my MPK Mini I define "Prog": "Prog1"..."Prog4", "Pad bank": "Bank1" and "Bank2", "Pad mode": "Note","CC","PC".
Software statesThere are several system defined sets, which you can not modify (and so they are not visible in the Options Tab). But they can be used in Action Condition (see later) the same way as User defined Software States:
- Note: ON, OFF - indicate either the last event was "Note OFF" or "CC OFF" (the last one is triggered in case associated hardware control is a Pad and CC value was 0) . In all other cases it is "ON". All action conditions include predefined condition "Note: ON" which can be changed to "OFF", but can not be removed
- MIDI Track: Yes, No - either currently selected parameter comes from MIDI Track. In case the parameter is not valid or from ACT, the State will be "No"
- Last Action: OK, Failed - either previous executed Action was successful. Note that the status correspond to the very last executed Action (so, conditions for that action was ok) and it is overwritten every time. The exception is "Monitor" Actions in the logic list: since there are not really executed, they do not change the status. For example, you can check either "Catch" has already caught the value or not yet. Also you can implement "Is final" on Failure by inserting "Undefined" Action after the operation in question, with "Is final" set and "Last Action:Failed" condition.
- Selection: Valid, Invalid - indicate that the last parameter selection (ACT or Strip) was successful
- Sel. touched: Yes, No - indicate that currently selected parameter is touched using "Touch" action. It works in scope of the "Touch" action target control only, if the parameter is touched by other means (in other controls, using other surfaces, etc) that is not indicated
- Transport: Rec,Play,Stop - current SONAR transport state
- Additional transport related sets: Loop, Fast forward/Rewind, Scrub, Auto punch
- Context: Track,Console,Plugin,NoProject - current SONAR context (or NoProject)
- Container: None, UserBin, ProChannel. A plug-in from which UI container is currently in focus. Note, SoftSynth also have UserBin type
- ACT Map: No Mapping, names of all VSTs/PC modules seen by the plug-in so far
- Value: 0...127 - mapped to states last MIDI value
User defined State Sets are not touched and not used by the system. The first State in the list will be Default State. But you can change that (every time you prepend state, it will become default. For historical reason). It is set as current every time SONAR is started or preset is reloaded.
Note: when you have just defined Software State Set, the first defined State (so, the last one once you have entered more) is the current. In case you save and reload the preset, the first state in the list will be the current. So I recommend change the state immediately after definition of the whole set to the first (on the Overview Tab). You can Add (prepend) or Append States. You can also append 10 states at once, they will get positional numbers as names prefixed by specified in the text field string. The order of the states can be changed with "spin" buttons, the effect is not immediately visible (till you open the drop box) but it is immediate.
It is not mandatory to define any User State Set. But defining and using them uncover real power of logic programming in this plug-in. It is up to your creativity.
Just to give you an idea what it can be. To implement "ACT MIDI Controller" build in logic, you need "Shift":"On","Off"; "ACT":"On","Off"; "Strip": "Track", "Bus", "Master"; "Button bank": "1".."4", "Rotor bank": "1".."4" and "Slider bank": "1".."4" (see "ACT MIDI Explained" tutorial).
Advanced: you can declare user Set as dependent from some other user Set. In this case there will be separate "current" State for each State in that other Set. For example, you have "Resolution" with states "Coarse" and "Fine". But you want remember resolution for each "Mode" ("Mix", "Act") separately. You can define "Resolution_Mix" and "Resolution_Act" as 2 separate Sets. But using such Sets require duplicated actions (like "Mode:Mix Resolution_Mix:Coarse - Value MIDI", "Mode:Act Resolution_Act:Coarse - Value MIDI". You can say that "Resolution" depends on "Mode" instead. In whatever Action you use "Resolution" then (even in Set State Actions), the current State of "Resolution" corresponding to the current state of "Mode" will be used. State monitors on dependent Set are also called when the "master" current State is changed, even in case that does not produce the change in dependent Set (in the example, in case "Mode" is changed, State Monitor for "Resolution" will be called even in case current states in both modes are the same).
DisplayIndependent from the Property Page, "always on top" not re-sizable window can be used to show some information. The information is organized as a matrix of cells. The size of this matrix, the number of characters per cell, the alignment within cells, the font and backgound color can be customized. Cells can be visually grouped (for example, to use one cell for parameter name and another for the value).
The display can be activated/deactivated either by the button there or by "Display" set of Function Action.
The content of each cell is set separately. See "Display" Action documentation.
FiltersSince ProChannel introduction, there is a bug which prevents determine which ProChannel modules are in strips (names). AZ Controller has some predefined list of modules, which are detected using parameter number and names. Since there are many modules which I do not have and FX Chains have different set of parameters in general, it is possible to "define" another modules using Filters dialog. In the track view, you can see which automation parameters each modules has. Write down the total number and some distinguishable parameter name, it is better if that is the last parameter (for speed), but it is not always unique. Then open Filters dialog, and with "New" selected, enter that information (the name of the module is arbitrary, the rest should match with the module). To delete definition, select "Delete" in the number of parameters (position "zero").
OSCIn this section you see Configure buttons, current OSC status and a button to forget OSC clients. For more information check
OSC documentation.
Parametersdetermine general behavior of the plug-in. It is important to set them correctly. The default should work fine for most cases, do not modify anything there till you understand what are you doing.
- Alternative direction for Endless encoders. In short, in case you need set Reverse flag in Set Value for endless encoders to get correct direction, you can set the flag globally here (and unset it in Set Value). Since some Actions which use Endless encoders (Set State) have no such flag, that is the only way to make them work right
- Use TTS (Text To Speech) if possible. At the moment, only SAPI 5 is supported. Use with "Say" function.
- Ignore MIDI input. Useful in case the instance of the plug-in with this flag set is used for sending MIDI commands to external hardware/loop devices. If the same device is used by other instance already, it make sense to set "Block all channels" and "Black all SysEx" even with this flag set
- Different blocking strategy can be specified in the next parameter. By default, the plug-in will block only all assigned events with some action specified. In case your controller has no keys and your are not going to use some "MIDI learn" in SONAR (for the Matrix view for example), it is safe to set "Block all channel messages". That is also good option during the assignment procedure, since in this case messages will not unexpectedly change something in VSTs. Other options are either to block one particular MIDI channel, or all channels except one. The last case is interesting for combined with keys devices, so you can allow keys on one channel go to the track and block everything else (on other channels). But note that once these options are used, assigned messages will not be blocked explicitly (SONAR limitation). For example, you block channel 1, but your slider is on channel 2. Your slider will "leak" into the track/VST settings.
Tip: in case you use ACT MIDI and Generic CS plug-ins simultaneously for one controller, you can block the controller by adding AZC (as the last!) and setting "Block all..." (may be also with "Block all SysEx"), without anything else in AZC.
- Unlike for other messages, SONAR has no fine blocking for SysEx messages. You either ask to block all of them or they all go throw. Note that there are some messages which are neither SysEx nor Channel. From my observation, they are not sent to plug-ins.
- To simplify reconfiguration it is possible:
- Clear all current assignments. Usefully for example in case you completely changed the mapping on your controller.
- Reset the configuration. Useful in case you have not created "Empty" preset.
- Prepare genericpluginparams.xml (ACT configuration) for manual editing.
- Cooperation mode. See separate chapter (toward the end of this manual)
- MIDI interpretation mode (see the explanation is at the end if this manual)
- Window (Plug-in Property Page) height
- Enable one from the first 2 registered in OS game controllers as an input. Game controller operations are (fixed) mapped to MIDI events from "Third slave controller", so they will not interfere with normal MIDI input (till you cooperate more that 3 MIDI devices). Supported up to 6 axes, 32 buttons and (discrete) POV.
"IO options..." dialog. SysEx timing allows limit the number of SysEx messages sent to X per time period Y. "Suppression" flags are to work with devices which echo values they receive (f.e. some old digital mixers). With "echo from" set, when a message is sent out of control (directly or in monitoring), the next exactly the same message from the device will be ignored. When "echo to" is set, if we are going to send exactly the messages we have sent from that control or received from the device (for that control), it will not be sent. The functionality can be reset with "Reset all monitors" action (to allow complete feedback update).
Current preset can be exported/imported using corresponding buttons. Note that SPP format (using Cakewalk Plug-in Manager) is still preferred way to preserve and publish presets. The feature is not working on old (pre Vista) OS. Note that "Text" export can be used to compare changes in presets ONLY, with some external text "diff" utility. It can not be imported back, the format is cryptic, not documented and can be changed in any version without notice or "backward compatibility". After finding where something is changed, use AZ Controller Interface to find what the changes are.
Continued in the next post...