Does GTL provide Link information to AUM?
I'm writing with Bram Bro's support about the possibilities of Mozaic Plugin Workshop (https://apps.apple.com/us/app/mozaic-plugin-workshop/id1457962653) which allows to script inputs/outputs of MIDI signals. I will use this to create more advanced controls using my iRig BlueBoard.
I asked the support:
One more question though: is there a way how Mozaic can sync with my favourite looping app "Group the Loop"? It supports Ableton Link. The thing is that I want to very precisely (on the beat) trigger some action, so it would be great to configure Mozaic that it will execute triggers always in time on a beat. For example, when tapping "A" on my BlueBoard between two beats, the corresponding action should be triggered exactly on the 2nd beat. I feel that "MIDI clock" could be of use here?
It would be even greater if Mozaic could know about the current loop’s length, so it would be possible to trigger actions at the end of the current loop. But I think "MIDI clock" doesn’t go that far, right?
The answer was:
Mozaic is obviously limited to whatever the AUv3 standard supports. Link is always handled by the host, not the plugin. The plugin only knows the current beat and the current measure, because that's what the host exposes to AU plugins. There's no way for plugins to get access to Link information itself.
So does GTL provide any information like that to AUM when both apps are running side by side?
Thank you.
PS: Mozaic seems very promising. Some more details from the answer, just for the records:
I would not use MIDI clock myself because it's not that great on iOS (which is not a realtime operating system) and MIDI clock doesn't contain timing information. It's just a pulse at regular intervals, once you're out of sync you'll never get back in sync. If you want something to happen on exact beats then I would use the OnNewBeat or the OnMetroPulse (if you want to set your own interval) events to make something happen at sample-accurate times:
@OnNewBeat
if HostBeat = xyz
// do stuff on beat xyz
endif
@EndSimilarly, if you want your Mozaic script to know about the loop length, then GroupTheLoop needs to send that information to the host in MIDI form first, otherwise there's no way for either the host or Mozaic to have this information. I don't know GTL, but I doubt it does that :-)
Comments
Hi @josh,
GTL and AUM share tempo and phase info via Ableton Link. So AUM does not know the individual loop lengths in GTL but it does know the general phase. Ableton Link phase allows the apps to keep sequences in time. For example, if you have two 8 bar loops they will start playing at the same time. As GTL can have many different loop lengths so only the longest even loops are reported to the Ableton Link session. It's possible to change this in Settings -> Clock Settings -> Sync Quantum. If you change the Sync Quantum to 4 bars, for example, GTL will always remain in phase with 4 bar sequences in other apps.
Presumably AUM sends timing info to its AUv3 plugins so if GTL and AUM are phase aligned via Ableton Link this information should be relayed to the plugin in AUM.
This sounds promising. With "general phase" you mean when the current group "restarts" playing, right? And it's determined upon the longest loop in the group, correct?
Yes pretty much although it's the longest loop playing, which also includes loops the master group. It's possible for GTL to fall out of phase with AUM/other Ableton Link apps if you have groups with different length loops in them and are switching between them. To avoid this you can set the "Force Phase Alignment" option in the Clock Settings. This will force all other apps to keep in phase with GTL.
Good to know! Thank you, Jack. I feel that I'm very close now to having set up everything I could ever dream of about live looping - and more and more possibilities seem to open up whenever I talk to you or the guys at Audiobus forums!
Hm, the people at Audiobus forum say that this info is not available from GTL. Can you please head over and clarify?
https://forum.audiob.us/discussion/40364/what-ableton-link-info-does-aum-get-from-looper-app-and-what-does-it-provide-to-auv3-e-g-mozaic/p1?new=1
Thank you.
Hi @josh,
Ableton Link is more like a third source. AUM and GTL both get their timing info from Ableton Link but do not communicate with each other.
So both AUM and GTL can get the Ableton Link beat and phase but not each others.
Hm okay, thanks. Still a bit foggy in my mind.
Another question: as soon as I activate Ableton Link in GTL, then AUM starts to indicate that it's running (a small line running from left to right below the back/play/record controls). This results in the weird situation where after stopping GTL (by pressing the big play/stop button in the upper left corner), and then restarting it (by pressing it again), I need to wait until this line reaches the end and starts again.
This is pretty nasty. Is this expected behaviour? Is this Ableton Link's timeline in the background? Can I reset it manually somehow, so I can start GTL exactly when I want it?
Yep that's normal as apps are expected to wait until the next repeat so they all start playing in time.
You can bypass this and start playing straight away if you turn the CUE button off before pressing play.
Also take a look at the Ableton Link dev docs. They may give you an insight into how it all works.
https://ableton.github.io/link/
Yes I get that, but who is setting the rules here? Is there some magic Ableton Link instance running in the background that starts at some random point in time and that every connecting app has to follow?
Shouldn't I be able to take the lead somehow and say: NOW I want you to start, Ableton Link!
Disabling CUE doesn't seem to be the right thing to do here, because in fact I want to share tempo/beat information with AUM, because there I have some Mozaic MIDI script running that relies on the
@OnNewBeat
and@OnNewBar
events.Yes that's right, Ableton Link has a timeline which starts from a particular point which all the apps follow.
If you turn off CUE GTL will still sync with Ableton Link. Just tap the loop at the beginning of the bar when you start playing and then again when you stop playing. GTL will automatically sync the recording to the nearest bar. So it still stays in sync with Link but you have more control over when the loop starts and its length. It does require tapping a loop or midi pedal when you start playing though so can take some practice. The important thing is it doesn't matter if you are slightly too late or early, GTL will account for this.
That's quite interesting. I will play around a little with CUE on and off. It's good to know that GTL will still sync beats with Ableton Link.
Just to understand correctly: when CUE is off, I need to hit my MIDI pedal pretty much exactly on the spot when I want to start recording, right? How "forgiving" is GTL? The thing is that I need to change some presets in AUM in the same moment, and they usually need a second or so to load, so they would be ready. So I need to provide the signal a little bit before the actual beat. Maybe I could have the general rule that I press the record button within the last 4 beats of the "previous" loop, and using Mozaic the execution of it would be postponed and timed exactly on
@OnNewBar
.A last resort (but maybe the most powerful solution) would be to disable Ableton completely, enable CUE (I think it's a very useful feature to have) and to keep track of all the information inside Mozaic (I only need to make sure that the tempo in both GTL and AUM is equal, I guess). As long as I only interact with GTL through Mozaic, I could probably keep a "mirror" of GTL's state inside my script and as such could create my own triggers which are tied closely to GTL's behaviour. I'm unsure though whether not any "inprecisions" would appear after a while, because in the end AUM/Mozaic and GTL are not "really" tied to each other, both keep their own timeline (which hopefully do not drift apart from each other)...
You don't have to be very accurate at all, GTL will sync the recording to the nearest half bar. So you could tap in one beat before the loop starts. It's worth noting that any audio after the tap will be recorded onto the loop so just make sure you don't play anything until beat 1.