AZ Controller plug-in for Cakewalk SONAR > Tutorials

Cakewalk ACT MIDI Controller Explained. Only $40, for short time!

(1/3) > >>

About money first. You have 2 options (it is nice to have an option):

* you can PM me, and then transfer me the money
* you can visit next shop and get some good wine, may be cheese as well
Why so? In the first case you will read till the end since you have paid for it. In the second case you will read till the end because you can enjoy good wine during that time.

In case you have not understood my Russian humor, that was a joke! The rest is serious, I promise  ;)

This post is about my own AZ Controller and about Cakewalk ACT MIDI Controller. Once you  finish reading, you understand how both are working.
For this tutorial, I recommend to have both AZ (AZC) and ACT MIDI (AMC) plug-ins configured as Control Surfaces in your SONAR. AMC is normally installed with Sonar. Be sure not to use the same controls for both! Lets cleanup presets so you see the same picture as me:

* Save current AMC settings in preset: type "Current" in "Presets:" box and click "Save" (Disk like) button.
* Switch to Options tab of AMC and press "Defaults" and "Clear MIDI Learn".
* Replace "Current" with "AZ" in the presets box and press "Save" again. Use the preset for this tutorial and reload the "Current" for other work.
Switch to AZC window. Before you click "Reset configuration" in the Options Tab, you can try to cleanup manually:

* Switch to AZC "Logic" tab. For each item in the "Logical Control", select the first action in the Actions list and press "Delete" button till the list is empty. So, at the end you should have no defined Actions in any Control. You can check that by selecting some Logical Control and then using cursor navigation keys (on your normal keyboard) to quickly go throw the whole list
* Switch to AZC "Hardware" tab. For each context (so for each context of each hardware control) click on "Detach" and "Delete" buttons for corresponding "Logical Control" (if attached) and then on "Delete context" button for the context itself. If "Delete context" is not enabled, you should set all Hardware states conditions to "Any" first. The context name is blank once there are no Hardware states assigned to it.
* Still in the "Hardware" tab, go throw all "Logical controls" (there still can be some "Detached") and "Delete" them
* Switch to AZC "Options" tab. Press on all "Delete" buttons until they are grayed.If you still have something inside AZC after all that, you was not careful. Recheck starting from the "Logic" tab. But you can always just press select "Reset" to cleanup everything.

Save that (empty) configuration under "AZ" preset for use with this tutorial.


* 9.4.2015 - parametric shifts/strip types are used in encoders definition. That has reduced the number of actions from 25 down to 10.
Continued in the next post...

Hardware configuration
Hardware configuration in ACT MIDI Controller (AMC) is preconfigured. Easy?! Not really. The hardware configuration exists and it is fixed. That is why it is not "Cakewalk Generic Surface" (which is generic in that respect).

AMC assumes the following hardware configuration: 8 rotors, 8 sliders and 9 buttons.

You can see "Shift Bx" in the interface and also "Bank" switch for all control types. Both are internal software switches inside plug-in. "Shift-Bx" is just the command "Bx" executes when used with "Shift", the button is still "Bx". The same is true for different "Banks", you can not assign separate control let say for "S3 Bank2", it is still "S3".

Buttons for AMC.
Physical Buttons which produce Note or Control Change (CC) events once you press them can be used. For first 8 buttons only the first (press) event is used. Warning: at least in version delivered with X1,  when some button triggers "Note Off" event, this event is "leaking" to your MIDI recording, do not be surprised or configure your controlling buttons to use CC and not Note. Theoretically, any other MIDI codes (even SysEx) should work for buttons. But practically Program Change (PC), while can be successfully learned, is not working (bug? the source code is published now, you can try to fix it).

One (9th) button is special. The "Shift" button. It should produce an event when it is depressed, and that event is used (to "Unshift"). If not all you physical buttons have that property, reserve the one which can for that function. In case no of your buttons can produce "Off" events, you can not use "Shift-B" row of AMC and so you loose one half of assignable Logical command controls.

As a Button you can also use Pads (velocity is ignored), but if you try to use your rotors/sliders, they will "press" that button many times per second. That is not what you want.

Sliders and Rotors for AMC
The difference is logical only. So you can use 8 rotors and 8 sliders, 16 rotors, 16 sliders, etc. The value is used, so the information sent should be recognizable by the plug-in. Most natural event type to configure is Control Change (CC).

Names for your controls.
You can rename all controls by clicking on the name (R1,S3,B3...etc). But in this tutorial I use unchanged names.

Map what you have to what AMC assume
If you have 9 buttons (from which at least one produce on/off events) and the sum of your rotors and sliders is 16, you have perfect match. But what to do if you have more or less controls then expected?

Some controllers have "mode" switches. In different modes (presets, banks) the same physical control generate different MIDI events. Plug-in can see only these events, and since there are different it assumes controls are also different. In such case from plug-in point of view you can have more controls than directly physically touchable.

In case you have less buttons then 9 it is not problem at all. Each button action is assignable individually, so you can put required actions on what you really have. If you use AMC for ACT, small number of sliders/rotors is also not a problem. You can reassign actions on ACT level. For console mode there is only one problem: AMC assumes you are able to control exactly 8 channels per time. "Next Track Bank" and "Previous Track Bank" commands will move WAI by 8. Also you will have less sends controls in "Channel Strip" Rotaries mode. As you can see, AMC is still quite useful in this case.

But what to do in case you have more controls? One instance of AMC can not use more. No way. You can put more instances of AMC as separate Control Surfaces and assign the same Controller to the input. Unfortunately, current implementation of AMC is not ready for that. There are many bugs, instances share some information (and they should not). I recommend an instance of Cakewalk Generic Surface (CGS) plug-in to use the rest of your hardware controls.

CGS is completely different plug-in, so that works fine. CGS has close to zero logic, each control does exactly one operation (no banks, context, mode except "use/do not use ACT"). It can control Track parameters (but not buses), ACT and transport. For tracks it has more options than AMC and you can configure the width of your Track Bank (unlike fixed to 8 in AMC).

If your controller support Mackie compatible mode, you better use it for console.

But since you are on this page, you already know - an alternative exists!

Controls in AZC.
AZC makes absolutely no assumption how many controls you have. Just after installation you have Zero. But you can configure as many as you have, to control what you want and the way you want.

For this tutorial I configure 4 buttons and 4 rotors (my MPK Mini has no sliders). I skip Hardware States configuration in this tutorial, so I assume all these controls are physical and there is no Hardware Mode Switches used on your controller (see Documentation section for more information).

Freedom is complicated. I do not want to go into philosophical aspects there, but the freedom is not for free. You are forced to work more. The same with plug-ins.

* Switch to the AZC "Options" tab. You will see "Hardware Controls" section. "<New control>" is selected (since you should have no controls at the moment).
* Enter "R4" just right of it. Change type from "Unknown" to "Rotary". Press "Save" button in the same row (not in other!)
* Select "<New control>" in the first box (where you see "R4" now)
* Repeat (2) and (3) for R3,R2,R1,B4,B3,B2 and B1. For buttons set the type to "Pad".
I have entered controls in the reverse order for a reason. The last you enter will be the first in the list. And this order can not be changed. That is the way AZC provides. The order is not important so it does not limit what you can do. Some important functionality is still not there, so "User friendliness" stays very low in my TODO list. Sorry.

Continued in the next post...

MIDI Learn
Hardware Controller send MIDI events when you operate it's Controls. Till now both plug-ins only have an idea how many Hardware Controls we have. ACT MIDI Controller (AMC) always assume that number is fixed and we have defined some controls for AZ Controller (AZC).

Now we are going to say plug-ins which control send which MIDI sequence.

Warning: Create new Project in sonar before you touch any controls. Till the configuration complete, MIDI input from your controller is interpreted by SONAR directly. That can unexpectedly change some hard to find parameters.

For the reason I have explained before, we better check that the event types are going to be recognized. There are several ways to see what each Control sends. But we have AZC opened, lets use the simplest option. Press/turn/slide controls you are going to use and watch the upper part of AZC.

If you see (as I do) something like "Ch:4 CC:7 Value:38" or may be "Ch:4 N:72 Value: 127 OFF" for every control, everything is ok. If you see "Ch:4 PC:5", "Unrecognized ...", or nothing is changing there at all, you should find some way to reconfigure your controller (by switching hardware mode or using special software). If you see "Ch:4 N:..." for buttons, I recommend change it to "CC" if possible.

For the "Shift" button, check it generates On and Off events. Press the button and keep it pressed, check what is reported.
Now take your finger off. Does you see some other event? If yes, the button is suitable to use for Shift. Try with other buttons otherwise. For example: I see "Ch:4 N:72 Value: 83 ON" when the button is pressed and "Ch:4 N72 Value: 127 OFF" when depressed. Other example: "Ch:4 CC:1 Value:21" when pressed and "Ch:4 CC:1 Value:0" when depressed. Both buttons can be used as Shift. "Ch:4 PC:2" and it stay the same when depressed. Such button can not be used as Shift (or any other button in AMC since PC is not supported).

Do not mix that with "ACT Learn". It is completely different function.

For the "shift":

* Press "Shift learn..." button. All assignments for other controls are no longer displayed, indicating "Shift learn" state.
* Press the button you want use as the Shift on your controller. If the assignments are shown again, the plug-in has learned your shift.
For all other controls:

* Click inside lower colored boxed (there are 2) under the control name (for example, on box under "RTZ" for button "B1", on the box with "Off" for "B4").
* You should see "MIDI Learn..." for that control
* Press/turn/move your hardware control. If "MIDI Learn..." disappear, the plug-in has learned the control.
If "MIDI Learn..." is still there (no assignments displayed for Shift learn) after engaging the control, you have some problem to fix. Check that your controller is still specified as "In Port" for the Plug-in. SONAR can loose that setting under some conditions (for example if the controller was not ready during SONAR startup). If your controller is also specified for AZC, check that the control still produce the event. If still no luck, check documentation, official forum, CAKEWALK support. This post is too short for all (known) possible problems.

When you have learned something by mistake, simply relearn it correctly. In case you have learned some AMC control you do not want to use, you can clean the assignments. For example you have only 4 sliders, and you have learned you slider "1" as "S5" by mistake. After learning "S1", you can see that your first slider controls "S1" and "S5" simultaneously, bad idea for most cases. "Ctrl" click (Keep Control key pressed and Click with mouse) on the box you use for MIDI Learn. Enter "00" into "Status:" and "00" into "Nubmer". Click "Ok".

You can ask AMC "forget" everything learned by pressing "Clear MIDI Learn" in the "Options" tab.

It can happened that you have learned 2 different controls to 2 different slots, but you see that any of them change parameters in both slots. In this case both your physical control trigger the same MIDI event, for this (and any other) plug-in these event are not distinguishable. From plug-ins perspective you have only one control. Reconfigure your controller such a way that each physical control produce different MIDI Event.

You should have all controls learned by AMC by now. We proceed with AZC.

It is a bit more complicated here. AZC understand that several physical controls can producing the same MIDI Event and one physical control can produce many different Events. We are not going to use that here, but that is why we can not just assign things with one mouse click.

We should not assign the same MIDI event to both plug-ins. Please find some way to avoid that. You can use 2 separate controllers or 2 different "Programs/Presets" of your hardware controller with different settings for each control. If your hardware controller is so simple that it has only one preset and not many controls, to compare AMC with AZC side by side you are forced to switch "In Port" in SONAR Control Surface configuration every time you switch between plug-ins. If there is no choice (you have no other MIDI input devices in the system), you can install some "MIDI Loopback" driver (search the Internet, some are free).

For AZC "B1" please select the button which generate Note On/Off or CC On/Off. But if you do not have such button, do not worry. You will see possible solutions later.

* Switch to AZC "Hardware" tab
* Press the button you want to be B1 on your controller
* Select "B1" in the "Hardware Control" section
* Select "<New context>" right of it
* Select "<New control>" in the "Logical Control" section
* Press the physical button again. Is "Logical Control" changed? If yes, this MIDI event is already used by some other control (you should see which one in the "Last MIDI Event", after the event information). You should not use it again in this tutorial.
* If the event is not yet in use, "Attach" and "Assign MIDI" buttons should be enabled by now, press them both (in either sequence). "Attach" connects Logical Control to Hardware Control Context (and so to the Hardware Control). By "Assign MIDI" the Logical Control learn the MIDI Event (the last event registered)
Repeat the procedure for each Hardware Control ("B1".."B4", "R1".."R4").

When you touch any of your learned Hardware Control, you should see its name in the Last MIDI Event, also Hardware and Logic tabs switch to the corresponding Hardware/Logical Control.

Continued in the next post...

The Logic of Control Surface plug-ins.
Till that point ACT MIDI Controller (AMC) and AZ Controller (AZC) have learned what we send from our Hardware Controller. When we press "Button 1", they know that we have pressed "Button 1". But we have not discussed what to do once it is pressed.

When you move Volume slider on Analog Mixer, you physically change the volume on that strip. But when you move some slider on your DAW Hardware Controller, it just send a message: "I am moved". It is up to software to decide which parameter should be changed, that can be volume, pan, threshold for compressor, etc. When your are using some plug-in with completely predefined logic (like Mackie), you can just learn what it does. You can not change the behavior, more or less like with the Analog Mixer. With ACT MIDI Controller, Cakewalk Generic Surface and AZ Controller you define what should be changed (or use some preset, defined by other).

The logic can be quite simple. You can just say "When I move Slider 1, I want to change the volume of the First track", "When I press Button 2 I want Return current Time cursor to Zero (RTZ)". Cakewalk Generic Surface does just that.

But even in tiny project with 1-2 tracks, 2-3 FXes on each, plus some buses, you then need big studio Hardware Controller with hundreds of controls to have everything "in the hand" directly. Some hardware controllers have build in switches to change what each control trigger (these switches are called banks, programs, presets, modes, etc.). For example my MPK Mini, while it has only 8 pads and 8 rotors = 16 physical controls, can be seen from the software as having 8x4 + 8x4x2x3 = 224 different controls! But that is still not sufficient for normal project.

Plug-ins can implement additional "switches",banks,shifts, etc. in software to extend the number of controllable parameters. For example, AMC using 9+8+8=25 input controls can trigger up to 8x2x4x2+8x4x2+8x4x3 = 288 actions. I think you have already notices this article is "biased".... yes, AZ Controller can control virtually unlimited number of parameters using just 2 physical controls!

DAW can "help" as well. Cakewalk has defined ACT. SONAR provides some useful information about its current status to plug-ins.

Let see how available in SONAR and plug-ins "multiplicators" work:

* Bank and shift work the same way as in hardware controller. If plug-in think that "current bank is bank 2" it executes one command, but if "current bank is bank 3" it executes another one. The event which trigger that it the same. AMC has 4 banks for sliders, rotors and buttons. The "current" bank can be different for each category. Shift affect buttons only.
* AMC also has "Rotaries Mode", which can be seen as yet another "Bank" switch with 2 banks
* ACT. When some VST(like) plug-in (not MIDI Controller plug-in!) has the focus, its parameters are exposed throw separately configurable (individually for each VST) mapping to the virtual set of controls "ACT R1", "ACT B1", etc. Only one such VST can be controlled per time with such approach. In AMC we can define either some control participate in ACT (when ACT enabled) or not. So that is yet another "Bank" switch with 2 positions.
* "Current strip". SONAR expose current selected strip number to plug-in, so plug-in can make use of it. Again, only one strip in time can be controlled with that approach.
* Strip ranges. We can declare that we control only several strips simultaneously (8 in AMC), but we can switch the type of strips we control ("Control Group" in AMC) and move this "block" across our strips ("Next/Previous Track Bank" in AMC). In SONAR that technology is called WAI ("Where Am I").
* In AZC you can defined any number of build-in bank sets with any number of banks (called "Software States", to make it distinguishable from "Hardware State", corresponding to hardware banks/shifts/programs/modes of your controller, and "Banks" in MIDI ). SONAR expose current Context (Console, Track or Plugin) and that can be used in AZC (AMC knows that, but uses it for "ACT follows context" option only).
Continued in the next post...

What plug-in can do
SONAR has special API (a set of functions and definitions) plug-in can use to change something inside SONAR or your project.
You can find my interpretation in the post or (in case you understand IDL) in the source code provided by Cakewalk (they have publish the latest version on github recently).

In short, plug-in can:

* read/set strip parameters
* read/set values of ACT parameters
* ask to execute commands defined by SONAR
* execute several additional actions which does not fit well into other categories (switch ACT mode for example)
If plug-in has some logic (as explained before), several Actions are not reaching SONAR at all and serve plug-in internal purpose.

How AMC shows what it will do
In AMC you can see what is going to happened once you use some control. In "Controllers" tab under each Control name there are 2 boxes: the first indicate the parameter to change or the command to execute and the second display the current value for parameter in question (if make sense). Long strings are "compressed" and sometimes hard to read. Most such strings are command names. In the "Options" tab the third combo for "Buttons:" list all possible commands without the "compression". It is normally more or less clear which command has compressed form you see in the "Controllers" tab.

To see what will be done if some bank is activated you should switch to that bank first, either with controls or by "Bank" combos. The same is true for "ACT Enable" mode.

Note: "Bank" combo near "Shift B1" specify the bank for all buttons, also not shifted. In default configuration not shifted buttons have the same actions in all 4 banks. But that can be changed.

How AZC shows what it will do
Unlike AMC, you can define arbitrary complicated Actions list on each event. And it is hard to predict the result. The only way to find that is actually execute the Action list and see what happens. That can keep your computer busy all the time just to show what can happened, when configured wrong.

AZC has "Internal Display" for the purpose. To make use of it, there should be definitions of Monitors (Parameter name and value). That is an advanced topic, please read "Using AZ Controller Internal Display" to understand it.

You can see all defined action lists in the "Logic" tab. After the list is executed, you can see the result in the "Overview" tab. Note that only the last list is shown. For example, you want to see the result of "Shift + B1" action. You press "Shift", then press "B1" and then depress "Shift". And you will see only "Shift->Off", since the last event was "Shift depress"! Keep Shift pressed to see what "B1 press" has done.

Continued in the next post...


[0] Message Index

[#] Next page

Go to full version