Tidal icon indicating copy to clipboard operation
Tidal copied to clipboard

Ableton Link experience report

Open jarmitage opened this issue 2 years ago • 5 comments

Ref: https://tidalcycles.org/blog/link_as_scheduler/

I've been testing Ableton Link sync in a few different situations (the main use cases for me):

  • Logic Pro x Tidal
  • djay Pro x Tidal

The setup is that I have a pattern like d1 $ s "[bd, cp*4]" and then the same in the other app, along with a sine tone. When the clock drifts, you can hear the sine tone wobble around, and the beat helps locate you within the bar.

Some notes:

  • nudge is always required to get a hard sync, i.e. the location in the bar seems to be off all the time
  • Using Transport in either Logic/djay to e.g. play/pause/seek will most often mean that nudge needs adjusting again
  • Changing tempo in Tidal will also mean that nudge needs adjusting again - which doesn't make intuitive sense to me, shouldn't nudge be proportional to cps?
  • Sine tone wobble in the other app seems to depend on the quality of implementation, in this case Logic Pro with 0 other Links will be stable, whereas djay Pro will wobble all over the place by itself! (reported this to them)
  • On macOS it seems there's an OS priority issue, since e.g. launching an app or playing a YouTube video will cause more clock drift.

So some of this is of course beyond what Tidal can influence, and I'm assuming quality of experience will differ across OS.

It's quite possible I'm missing something about the fundamental constraints of Link here, but... I'm really wondering why Tidal's Link doesn't seem to pickup the beat and nudge is required? Does this have anything to do with oLatency in startTidal?

I have Bitwig and Ableton so I could do more testing. It would be interesting to see how others are doing on other OS too.

jarmitage avatar Jul 01 '23 14:07 jarmitage

Thanks for the detailed report!

Having to set oLatency once is expected. Then you are configuring the time it takes from SuperDirt playing, to the sound coming out from the speakers. After that, I would expect everything to keep being synced up.

I had a quick look in https://github.com/tidalcycles/Tidal/blob/main/src/Sound/Tidal/Stream.hs and could confirm that nudge is in terms of seconds and does not scale with cps. But this is good! We would expect the latency from SuperDirt to be constant.

The strange thing is that there seems to be a new but stable new latency each time you use Transport? I can't see how that could happen from Tidal's perspective.

If you have time, going through the Link Test Plan would be really good. I have done it, but maybe I was sloppy.

Zalastax avatar Jul 01 '23 14:07 Zalastax

Ok, using rotL can help with adjusting the location within beat if needed. (Note: djay / rekordbox do not appear to attempt to sync within the bar at all, that is left to you to cue)

But otherwise still experiencing that the latency amount is not stable, either when changing tempos, or when using Transport.

Thanks for the Link Test Plan link - I'll check that out.

Perhaps we need our own test for Tidal x Link, e.g. a .tidal file with a bunch of different types tempo changes (including continuous changes as in https://tidalcycles.org/docs/reference/tempo/#cps), and then a means of recording and analysing the pulse.

jarmitage avatar Jul 01 '23 15:07 jarmitage

The tests sound like a good idea!

Here is LinkHut which they mention in the Test Plan, since it's a bit hard to find: https://github.com/Ableton/link/tree/master/examples/linkhut

Zalastax avatar Jul 01 '23 15:07 Zalastax

(while on my mind): it would be great to have getLinkClients that would display some information about current connected clients.

This could be used for status monitoring, see e.g. #1040

jarmitage avatar Sep 21 '23 00:09 jarmitage