Routing Tidal audio to Ableton

I do the same. I kill the SuperCollider server, restart SuperCollider, and eval a different startup file if I need to monitor outside my DAW. I do not use an auto-startup file because my configuration changes day to day.

1 Like

Of course! Completely forgot that that was even an option :slight_smile: . Thank you!!

I was finally able to get multichannel recording into Ableton with ASIO4All thanks to the information you provided here. Thanks again!

1 Like

Hey guys,

I'm trying to route multi channels through blackhole into logic. However, if i play more than one channel within atom through different orbits (e.g. 'orbit 6' and 'orbit 8') everything still through 0, 1 as shown on supercolliders meter. Within Logic i only receive audio through inputs 1-2 no matter which orbit i use.

I have attached my startup file for reference.

@1528DD What steps did you take to send multi channel to blackhole and then your DAW?

If anyone has any idea of where im going wrong it would be greatly appreciated as i'm stooped

Thank you!

Edit: no longer having all audio through channels 0-3 just restricted to 0,1 atm

include("SuperDirt")

SuperDirt.start

Quarks.gui

s.options.numOutputBusChannels = 16;

s.waitForBoot{
	~dirt = SuperDirt(2,s);
	~dirt.start(57120, [0, 2, 4, 6, 8, 10, 12, 14]);
	s.meter;
	s.latency = 0.0;
}

MIDIClient.init;

~midiOut = MIDIOut.newByName("Pro40", "MIDI");

~midiOut.latency = 0;

~dirt.soundLibrary.addMIDI(\midi, ~midiOut);

Hi @harry - it might be because you are running SuperDirt.start which runs dirt with the default 2 channels... so then when you try to open dirt with more channels later it doesn't work.

Maybe try removing those lines from your startup file

include("SuperDirt")

SuperDirt.start

and see what happens

3 Likes

PS. I'm no SuperCollider expert.... but I did just try running your code with a couple of tweaks and it has opened 16 channels for me and Tidal is routing audio to different ones... so maybe try this with your setup and let me know how you get on

(
s.options.numBuffers = 1024 * 256;
s.options.memSize = 8192 * 16;
s.options.maxNodes = 1024 * 32;
s.options.numOutputBusChannels = 16;

s.waitForBoot{
~dirt = SuperDirt(2,s);
~dirt.loadSoundFiles;
~dirt.start(57120, [0, 2, 4, 6, 8, 10, 12, 14]);
s.latency = 0.0;
};
)

s.scope

4 Likes

Its worked!! thank you very much, thats absolutely ideal

@harry great news :slight_smile:

@heavy.lifting thank you, this worked for me as well using BlackHole...ugh, what a mess! i did, however, need to specify the orbits in my SC startup else the audio was all garbled (in case anyone else is struggling with this...).

anyone here have any luck / advice for getting the midiclocking to sync between Ableton and Tidal? the docs for midi clock synchronization did not pan out well for me...can't really figure out if these are sequential evals that i'll need to do for every session or what...

You can simply synchronize TidalCycles and Ableton Live with Ableton Link: https://tidalcycles.org/index.php/Link_synchronisation
This is much more accurate than a MIDI clock.

Therefore you need the carabiner software started and then type sock <- carabiner tidal 4 (-0.14)in your current session (or you add this line in your startup script).

Note: Unfortunately this link synchronization feature is not implemented in TidalCycles directly, because someone needed to build a connector to the c++ api in haskell.

2 Likes

hey @mrreason thanks for letting me know. i have linked Ableton and Tidal with the carabiner but my latency is still a big issue. Ableton is about 1/32 of a beat late and i have been tweaking for an hour trying to iron it out.

Just to be sure, does Ableton Live and Carabiner looks similar to this?

And can you change the global speed in Ableton, so that it's effects the TidalCycles speed?

If this is the case, try to change the latency in your startup script. I set the latency for me in this way: s.latency = 0.3
In which OS do you try it an do you use your onboard sound card?

[Edit:] Now that I rethink about it, I don't think the sound card should cause a problem because the problem seems to be with the internal audio routing. So it's interesting to know if you're running Windows with Jackd or MacOS with Blackhole.

hey! thanks for the reply. below is what my setup looks like. i am using OSX Catalina with UA Apollo. i am curious if my overall latency in Ableton is causing the issue...47.0ms...

i had actually set my s.latency in SC to 0.0 but changing it back to the default 0.3 just now did not seem to help.

Aaaah I think I see the problem.

As you can see my buffer size is 32 Samples. A higher buffer size leads to latencies and a lower buffer size is at the expense of the CPU. But for me the low buffer size has never caused problems. The right balance between latency and CPU usage depends on your Mac.

Hope this helps!

2 Likes

ok, thanks! i tried using 32 samples, which reduced my output latency to 2.02ms but i'm still not in sync! any other suggestions for me to try? thank you for your assistance with this, by the way :slight_smile:

No problem, I'm glad to help :slight_smile: It seems to me that the output latency from your audio interface is high. Apparently, the problem is no longer TidalCycles and Blackhole. You can try recording something and see if the audio is aligned with the grid. For more information you can visit the Ableton help page for reducing the latency. There is a section "How to reduce audio interface latency".

so...this is interesting. i don't think it's the interface. it's actually the Ableton midi channel that's coming in late. when i do a test recording, Tidal (audio) is closer to the downbeat, and the midi channel follows shortly after. which seems strange...you'd think it would be the other way around.

also, when i increase the BPM in Ableton, i can hear it's increasing the CPS in Tidal. however, resending the sendMsg sock does not reset the BPM in Ableton even though the message itself works.

When you do something like this:

I think that final argument is the latency adjustment in seconds

Ah I missed this and you're totally right. In Sound.Tidal.Carabiner.hs I see:

carabiner :: S.Stream -> Int -> Double -> IO Socket
carabiner tidal bpc latency = do sock <- client tidal bpc latency "127.0.0.1" 17000
       [...]

So I'm just wondering, if this affects the the s.latency in SuperCollider?

Hey @kit-christopher

This is all good advice RE Link which should theoretically be much more stable than Superdirt MIDI.

However, for a different perspective... :slight_smile:

The somewhat hacky method I use involves midi clock rather than Link. You'll need an internal MIDI device (I'm on windows and I use LoopBe Internal MIDI) & set this up as a MIDI output in SuperCollider - you will need to run the code for this each time, but you can add it to your startup file if you don't want to do it manually.

(Because I use SuperCollider for a bunch of different stuff I don't have a lot going on in my startup file, instead I have a few different .sc files that I use as templates depending on what I'm up to - here's an example of one with a typical MIDI out setup).

In SC you want to do something like this (see the general SuperDirt MIDI tutorial for more detail):

MIDIClient.init;

Then the following (if you're using a different device you need to copy the name exactly as it appears in the post window in SC):

~midiOut = MIDIOut.newByName("LoopBe Internal MIDI", "LoopBe Internal MIDI");

Then boot SuperDirt as usual before running:

~dirt.soundLibrary.addMIDI(\midi, ~midiOut);

You can also adjust the latency here using:

~midiOut.latency = 0.45;

You can then use your MIDI preferences in Ableton to accept the sync data coming in from the internal device.

Now for the unpolished part :smiley:

I usually run something like:

d1 "midiclock" $ midicmd "midiClock*48" # s "midi"

And then I usually use (0.2 <~) and change the value to nudge things around until it all lines up...

Again I have a couple of standard .tidal files I use as templates with the MIDI stuff already set up. Here is an example file of me doing a lot of MIDI stuff.

The downside of this method is you can't sync tempo changes in Ableton back to Tidal, Tidal has to always be the leader. The upside is that if stuff is out of sync you can just nudge it around, which you can't really do with Link. Plus it's one less bit of software to worry about (not needing to run Carabiner). It's not very slick, but it does work.

I've used Link a lot in the past and it was particularly helpful in the pre Superdirt MIDI days since clock didn't really work with tidal-midi. Now I'm lazy and just use the MIDI clock since I tend to be syncing to hardware devices too and I find it easier to just have one set of timings to think about.

7 Likes