VoidLinkAudio // Ableton Link Audio for Max/MSP and beyond (open-source, multi-host)

Julien Bayle's icon

Hi everyone,

I want to share VoidLinkAudio, a project we've been building at Structure Void over the past few weeks: an open-source multi-host integration of Ableton Link Audio.

The Max side gives you two MSP externals (void.linkaudio.send~ and void.linkaudio.receive~) packaged as a complete Max package with help patchers, refpages, and a vignette tooltip.

A note on context: I'm guessing Cycling '74 will release their own Link Audio Max package alongside Live 12.4 (May 5, 2026). We wanted to do some R&D of our own on this, exploring how the API behaves across very different hosts, what an open-source multi-host pattern looks like in practice, and how the timing primitives feel when exposed at audio rate vs as messages. The two efforts will coexist nicely, I think.

Thanks Peter for your CDM's post about it :

What I think might still be useful here:

Multi-host coverage in one project

The Max externals share a single C++ core (`LinkAudioManager`, ring buffer, threading model) that's also deployed across:

Pure Data vanilla 0.56-2+ / first public Pd implementation of Link Audio, to our knowledge

TouchDesigner / LinkAudioSend + LinkAudioReceive CHOPs

VCV Rack 2 / Send / Receive modules in the Structure Void browser category

openFrameworks / ofxAbletonLinkAudio addon in its own repo

VST3 / AU plugins for any DAW : here

So a Max patch can subscribe to a stem published by a Pd patch on another laptop, all in tempo with VCV running on a third machine. Single-machine inter-app routing also works (replaces BlackHole / Loopback / VB-Cable).

What's exposed in Max

Both objects expose Link timing as audio-rate signal outlets:

  • tempo~ — bpm as a signal

  • phase~ — beat phase (0..1, sample-accurate inside perform())

  • transport~ — transport state (0/1)

Plus R/W attributes for tempo and transport that propagate to all peers on the LAN. Change BPM in Max, every Link peer follows.

The signal-rate choice for outlets is deliberate: it lets you reset a phasor on phase wrap, scrub a sample by beat position, or modulate anything at audio rate from transport state — sub-block precision messages can't give you. Both objects also accept tempo/transport as input messages.

Builds

  • macOS Universal (arm64 + x86_64), Apple-notarized

  • Windows x64

  • Linux: planned for v0.3.0

Source and links

Disclaimer

Not endorsed, certified, or supported by Ableton or Cycling '74. "Ableton", "Live", "Link", "Max", and "Max for Live" are trademarks of their respective owners.

Bug reports, feedback, and questions about the Max integration specifically, very welcome here.

Cheers,

Julien

Ableton Certified Trainer · Max Certified Trainer

Julien Bayle's icon

Quick v0.3.0 update on VoidLinkAudio.

Linux support landed for VCV Rack 2 and Pure Data (x86_64 + ARM64). No change for Max users: Max stays Mac Universal + Windows x64, as before, since Cycling '74 doesn't ship Max for Linux.

Why mention it here: if you're running multi-host Link Audio sessions across machines, you can now have a Linux box in the mix as a VCV or Pd peer alongside your Max laptop. Same Link session, same sample-accurate sync, no driver and no virtual cable. Cross-platform Link Audio across Mac, Windows and Linux peers is now a thing.

Max/MSP and TouchDesigner remain Mac + Win only because neither Cycling '74 nor Derivative supports Linux on the editor side.

For those discovering the project, Peter Kirn's CDM coverage of the initial release:

Links:

Feedback and bug reports on the Max side still very welcome.

Cheers,

Julien

felipe vaz's icon

Hey Julien, this is AMAZING, thanks for your work!

In a quick test, it worked like a charm. I haven't tried yet and I don't know if it is "officially" supported, but how feasible would it be to have multiple of these, for instance, using Ableton channels as return tracks for audio generated in Max, or having it for mixing multiple Max audio channels in Live within the same machine?

Or even: "packaging" multiple Ableton native devices not available as .abl objects in a patcher that sends MIDI or audio into Live and gets audio returned to Max? For instance, using Wavetable as a "hacked" VST object inside a Max patch.

I ask about the feasibility before making extensive test bc the object setup seems to be very mono/stereo oriented (as Live is) and you've probably bumped into many use cases already.

Thanks!

Julien Bayle's icon

Hey, thanks, glad it works!

Short answers, in order:

1) Multi-instance / multiple Live return tracks. Yes, this is the intended use case. Both objects expose peer + channel selectors, so you can run several Send/Receive pairs in parallel: multiple Max audio streams into Live (each on its own return), or multiple Live tracks back into Max. Naming tracks meaningfully in Live keeps the Max side readable, since the discovery UI lists peers and channels separately.

2) Mono/stereo. Correct, the current API mirrors Live's channel model: each Link Audio "channel" is a stereo bus. For mono, use one side or sum it. For >2 channels, just instantiate several pairs.

3) Wavetable (or any native device) as a "hacked VST" in Max. Feasible, with two separate routing layers:

. Audio : Live → Max via void.linkaudio.receive~, with Wavetable on an instrument track whose output goes to a Link Audio send.

. MIDI : Max → Live via IAC (macOS) or loopMIDI / equivalent on Windows. Link Audio carries audio + transport/tempo, not MIDI.

Latency note: Link Audio adds a small jitter-compensation buffer, so it's not sample-accurate for tight feedback or FM-style abuse, but for "I want Wavetable / Operator / Drift / Meld available inside a Max patch", it works fine.

Feedback welcome once you've stress-tested it.