AZ Controller plug-in for Cakewalk SONAR > Tutorials

TouchDAW with AZ Controller (or "Mack.. Logic Control explained")

(1/4) > >>

azslow3:
Prewords

Some mystery surround Control Surfaces. Producers of that type of devices have a good reason for that: more mystery means more money. Some Control Surfaces looks like Digital Mixers, and with a bit of "smoke" they can be sold like something equally valuable. The fact is: while controls and the body look the same, instead of preamps and DSPs inside you can find one (cheap) chip with USB/MIDI interface. This chip has near nothing to do, everything your Control Surface does is happening in software within the DAW.

The marked is flooded with cheap MIDI controllers. Some of them have complete documentation what they do. Also DAWs have some support for them, from as simple as "Assign MIDI" to more complex like "ACT MIDI". But all that is more or less transparent for users, they see that the hardware part is "simple".

So hardware producers have started to use a trick: they hide the way the information is sent, put some fancy labels on "dedicated buttons" (hardware is still the same) and call the result "Ultra/Super/Hyper/Human/Logic" Control. Once they have written a nice (sometimes not) peace of software, they claim "Deep/Tight/Special" Integration with DAW. One table with two columns and 20 rows for 10-20 most rated VSTs and they can already write "Auto/Seamless" mapping.

In the following I am going to show how (always!) simple input from Control Surface can produce so "deep integrated" results within DAW. I will go step by step filling "small gap" between "smart" Control Surface speaking "complete/complicated/magical" Mack.. Logic Control Protocol and CakeWalk SONAR DAW.

Please do not understand me wrong. Good Control Surface has its value! Faders, encoders, buttons, displays can be horrible or perfect. The body, layout and design are also important and can be pricey. But the rest... when it comes to what your computer receives from these devices there is no difference between cheapest possible applet on your phone and $Xk surface.

And please do not underestimate the software component. While AZ Controller is "free" ~100kB plug-in with old style interface, it is compiled from ~20000 lines of handwritten lines in C, implementing an interpreter of specially invented for the purpose visual scripting language plus IDE (Integrated Development Environment).  You can imagine what that can cost if developed on commercial basis.

azslow3:
Quick start

Insert AZ Controller into the list of Control Surfaces, attach input (and output!) of your MC (compatible) device to it, visit "Options" tab, click on "Tweak current configuration" and select "Mack.. control". Do not forget to remove the original Mack.. Control plug-in(s) from the list.

Go to the "Overview" Tab. In case you see "Device (Online)" there, the plug-in has recognized your controller. You can try to use it and please report any bugs you spot and everything you do not like. And you can skip the rest of this topic.

If you see "Device (Offline)", your device was not recognized as MC. Try to switch off the device and switch it on again. If you still have no luck, check that it is recognized by the original plug-in (unlikely). With other plug-ins it is time to shout "It does not work...". But AZC is fully configurable so most probably you can make it work with your device.

Introduction

I do not have real Logic Control. Neither I have some other compatible device. But thanks to Humatic, everyone with Android phone/tablet can taste how that works. Sure, touch screen is nothing in comparison with well made hardware. But the price is nice and it takes no extra space.

If you want to follow the text and configure AZ Controller (AZC) yourself, please read the manual and ACT MIDI Explained tutorial first. In this text I assume you already know how to define Software State Sets, Hardware and Logical Controls and add Actions with Conditions. There will be step by step but not "click by click" instructions.

I also assume that you have got your Device  (Dev) (TouchDAW or whatever LC/MCU compatible) somehow working with sonar. Solving problems with connections and MIDI configuration in SONAR is not the topic here. In case you already have some other Control Surface (CS) plug-in configured for your Dev, please detach it. Two plug-ins for one device will not work (it sometimes make sense for ACT MIDI/Generic Surface combination, but not for Mack..).

First of all, AZC support complete Logic Control (LC) MIDI specification. It understand what LC "say" and can send everything LC understand. In case you already have AZC in sonar with Dev connected and you press/move/turn controls, you just can see something changing in the "Last MIDI Event". But SONAR keep silence, no fader movements, no transport changes and Dev display is empty.

May be your slowly start to think: "this man tries to fool me, hi DOES NOT support LC! At least "Play" button should work! My device/program speaks Mighty Protocol, it is not plain MIDI!". Sorry to say, but your device is plain MIDI. "Play" button sends "Note 94 with Velocity 127 is pressed". The Mighty Protocol just define that "Note 94 with Velocity 127" is sent when the "Play" button is pressed. No more, no less. Are you confused? I hope not  ;)

azslow3:
Initialization

LC protocol is bidirectional. It defines some "greeting ceremony" procedure. I can only speculate for what it is good, but let say the intention was to let the device know we understand with what we are working and check that the device is there (and not just to show respect to the producer of the device and make everything incompatible). Some devices (like TouchDAW) do not require this procedure, but I still prefer to do this for the first guessed reason: we can be sure the device is connected and ready (quite important for TouchDAW since it is just an applet communicating throw network).

MC preset has the initialization described here. But you can try to configure it yourself (starting from empty preset) to get the idea how it works.

Important: AZC needs  "Hello" in any case. The device ID specified there is used in all other LC commands.

If you follow the tutorial with TouchDAW, after it is started you can see some messages incoming (Note 24/25) (in the Last MIDI Event). Just wait till there is no more changes.

Dialogs in AZC are configured throw Control/Monitor combinations and may be the most hard to understand feature of the plug-in. You can read "once more how it works" at the end of this post to see what we try to achieve. First we define:

* Software State Set (in the Option Tab), lets call it "Device" with the following states (in the order of definition, so "Offline" is the last defined): "Online" (rename "Default" to it) and "Offline". Go to the Overview Tab and set "Offline" as the current state (I will not repeat that, but you should do this every time you define new Software Set, to set as current the state which is default on plug-in/preset reload).
* One hardware controls: "Hello". Leave the type "Unknown" (we change it later to "System")
The initialization dialog has (up to) 4 steps:

* Hello from AZC.

* In the Hardware Tab select "Hello" HW Control and press "Attach". That will create new HW Context and Logical Control.
* Then go to the Logic Tab and select that control "((None)) Hello :" (most probably it is already selected).
* Now add "New" Action and configure it as "Monitor" "Timer" "Once", add Condition "Device":"Offline". We set it to "Once" to avoid it triggering till we are ready.
* Switch to the Feedback Tab and add (to "Hello :  : Timer")  Action "Prod. spec. send" (Product Specific Send) "LC/MC/C4 Hello" "MCU"Keeping this Action selected, press "Play". Watch "Last MIDI Event". Do you see "MCU EHLO" here? If not, your device is either not connected or it is not in MCU (compatible) mode or its ID is different. Try select different IDs instead of MCU (LC, etc) and every time press "Play". In case you could not get "EHLO", there is no reason to continue. Try to solve that (checking routing, configuration in SONAR and device, etc.).
* Ehlo from Dev ("EHLO" is not a typo...). If you see it, device has recognized us and we have recognized the device. But we are not done yet.
* Connect.

* Switch to the Hardware Tab and "Assign MIDI" (EHLO) to the "Hello" Control.
* In the Logic Tab, add Action "Prod. spec. send" "LC/MC Connect" (do NOT press "Play" yet). BUM! Original SONAR plug-in does not send it. Actual version of TouchDAW, while accept it and reply correctly will no longer reply on any Hello/Connect till restarted. So, add this Action only in case your Dev need it.
* Add new Action  "Set State" "Device" "Online".
* Select Timer Action and move it on top (with "Up" button). So in the Action List you should have now " 'Device:Offline' - Timer", "Device -> Online" and as the last "LC/MC Connect" (if you define it).
* Now select "LC/MC Connect" (if your have it) and press "Play".

* Confirm. If your decide to send "Connect", you done all right and the device is really LC/MCU compatible, you should see "Confirm" in the Last MIDI event. There can be other messages coming quickly (the last version of TouchDAW send many of them). Or there can be no messages at all.  Most important, you should see no "Error" (let me know in case it is there, that means I have calculated "Connect" incorrectly). The last operation:

* In "((... EHLO)) Hello:" change "Monitor" "Timer" from "Once" to "Slow"Save AZC preset, close sonar and switch off the device (exit TouchDAW). Now start everything as usual, so turn on surface, start sonar and load/create project.
You should see "Device" "Online" in the Overview Tab within a second. Try to set it to "Offline" and check that it goes to "Online" again. Change Hardware Control Type for "Hello" (in the Options Tab) to "System" (do not forget to press "Save"...). We have "programmed" the greeting dialog!

Once more how it works. We have "Timer" which "Slow"ly (every 1 second) send "Hello" in case our "Device" is "Offline". In case Dev reply with "Ehlo" we remember that in "Device" "Onlice" state (so, we no longer send "Hello") and possibly send "Connect" (once). Sound simple when written in words, is not it?  ;)

If at some point you want "renegotiate" (your device was temporarily off but you do not want restart SONAR/ reload AZC preset), you can just put "Device" into "Offline" again. In case you follow corresponding recommendations below, that will update the device (send Hello, set Displays, Rings, Faders and LEDs).

If you still think why you need all that... Just imagine your have got some device with unusual imagination how the initialization should be done. What you can do with "normal" SONAR plug-in? You can write into Forum, submit bug report, fill "Wishes" and hope for the best. With AZC you just fix it yourself within a minute and then happily use your device. And the same for any aspect which is buggy or does not work as you want.

azslow3:
Time display

If you do not have special Time display you obviously can skip this part (except the last "Monitor reset" "All" Action). Please note I assume you work with preset from the previous post and you see "Device" "Online" in the Overview Tab ("Hello" was sent):

* We define HW Control "Time" with "System" type.
* Define (Attach) Logical control to it.
* It's Action list is just "Monitor" "Timer" "Once" (again to avoid it during following steps). Set "Device: Online" conditions (we do not want it trigger till the device is there)
* In the Feedback for the Timer (it will be "Time : : timer") we add 2 Actions
* Set the first one (from top) to "Text" "Fixed" and type "123456" into the value field. Press "Play" (to set current value)
* Set the second (and the last) one to "Prod. spec. send" "LC/MC Time display" "Update" "SysEx". Press "Play"Do you see 123456 on your display? If not (on TouchDAW for example), change "SysEx" to "MIDI". Press "Play" again. Still no luck? Your device is not LC/MC compatible... As with everything else, you can inform me to find some solution.

If you see the numbers, change "Text" from "Fixed" to "Time" "MC MBT" "No format" "Replace". Then go back to the Logic Tab and activate the timer (change "Once" to "Fast"/"Ultra"). You should immediately see the real time on display. Try to change current time in SONAR (play for example). You should see it works as expected.

There are some limitations for now: MBT time in 2 formats is supported. SMPTE and/or other formats can be added on request.

The last "touch". I like to have 2 actions from Time monitor ("Text/Time" and "Time display") also at the end of my "(EHLO) Hello" action list (right after "Device -> Online"). With one small change: in the "Time display" action, instead of "Update" set "Set". That will send the whole time on any "reconnect". The first variant (inside Monitor) just send updates to whatever it think already there. This saves quite some MIDI traffic (especially in "Ultra" speed) and I prefer to explicitly send the whole time once (or on reinitialization).

And since we are here... I also add "Monitor reset" "All" to the end of "Hello" Action List. As with Time display, that should resend all indication (display, LED) to the Dev on reconnect (in assumption we define it with monitors, as I am going to explain in the corresponding sections later).

azslow3:
Buttons with LEDs.

All buttons of LC use the same simple rules:

* "Note X ON, Velocity 127" is reported to the DAW once the button is pressed
* "Note X ON, Velocity 0" is reported to the DAW once the button is depressed
* "Note X ON, Velocity 127" transfered to LC ask corresponding LED to light
* "Note X ON, Velocity 0" transfered to LC ask corresponding LED to switch off
* "Note X ON, Velocity 1...126" transfered to LC ask corresponding LED to blickSeveral notes:

* All MIDI events are "Note ON". "Note OFF" is not recognized
* There is no "internal logic" between the button and LED. It is up to the DAW (plug-in) to decide what and how to indicate
* There is absolutely no difference between buttons across the surface, the only difference between "Mute" and "Play" is the note number in communication messages
To work with LC buttons and LEDs, we are going to take the following approach:

* We define buttons as "Pad" Hardware Control Type, so "Note ON Velocity 0" will be recognized as "Note":"OFF"
* We define one Hardware Context/Logical Control for each button
* In the Logic List for the button we define Monitor to work with LED. The Monitor type is the parameter dependent. For buttons attached to the plug-in internal states (transport, context, etc), that will be state monitor. For other parameters (mute, solo, etc.) that should be Parameter Value monitor.
* In the Monitor Action List with send back either 0 or 127, depending on the parameter condition. We you "<Use Ctrl MIDI>" MIDI message to avoid manual definition every time.
* We define reaction on "Pressed" (Note:On) and "Depressed" (Note:Off) signal from Dev

Navigation

[0] Message Index

[#] Next page

Go to full version