TDAbleton is a tool for linking TouchDesigner tightly with Ableton Live. It offers full access to most everything going on in an Ableton set, both for viewing and setting. The TDAbleton system contains a number of components for 2 way communication, and a framework for building custom components and new features.
TDAbleton operates through Ableton's MIDI Remote Scripts system and, when necessary, Max for Live (M4L) devices. Communication with TouchDesigner is via OSC (using UDP). It is fully network-capable, so TouchDesigner can be running on a separate machine from Ableton. The Python in TDAbleton extensively uses Ableton's Live Object Model.
Common Ableton Tasks
The following is a list of commonly used data from Ableton Live and where to find it in TDAbleton.
song/info/last_started_scene. Also available via callbacks.
- Time and Tempo Data:
song/info/time. Note: Include Time Data parameter must be
- Cue Points (a.k.a Timeline Locators):
LastLocatorPassed. Also available via callbacks.
- Output Levels:
.../output_meter_level. Note: Due to a bug in Ableton Live Object Model, these are only updated when the meters are visible in the Ableton interface! Also, Include Audio Data parameter must be
- Track Slots:
abletonTrackComponent, out_clips DAT output. When the Include Playing Clip Data parameter is on,
abletonTrack's CHOP output will also show clip time and loop information.
- Device Parameter Values:
- Control Ableton Parameters (without creating undo steps):
abletonParameterComponent. Also abletonRack Component.
- MIDI Data:
- MIDI Notes in a Clip:
- Audio Levels and Audio Spectrum Analysis:
abletonLevelComponent. This includes level data on a per-track basis, and can be combined with filters to provide spectrum analysis.
- Sending/Receiving Rack Macro data:
abletonRackComponent. This is also the smoothest way to receive parameter data.
- Ignore Parts of Your Ableton Live Set: Large Sets can be slow to load and change when TouchDesigner is connected. To ignore parts of your set, use the TDA_Ignore and TDA_Ignore_MIDI devices in your tracks. Everything from these devices forward in the device chain will be completely ignored by TDAbleton.
- Access obscure Live Object Model features: abletonValueListener Component.
- Get string data from Live: abletonValueListener Component.
- Ableton Live 9.7.2 and up.
- Max for Live 7.3.3 and up. (Note: Max 7.3.3 has a MIDI pitch bend bug. Use 7.3.4!)
- TDAbleton has been in Touch installs since TouchDesigner version 099 2018.28070. Features may or may not work when moving TDAbleton versions backwards through TD builds.
Install the latest TDAbleton system
Make sure Ableton Live is closed before installing TDAbleton. Note: your Live install must have been opened at least once for the installation to work.
- Drag the tdAbletonPackage component into your project from Palette>TDAbleton
- On the Utilities parameter page, pick which Ableton Live Install you want to install the system on.
- Click Install.
This sets up Ableton Live Remote Scripts and User Folders for standard installs of Ableton Live. If you have customized your Live install locations, you may have to set up the MIDI Remote Script Folder and Preferences Folder parameters yourself. Do this on the tdAbleton master component inside TDAbleton. Instructions for finding the correct locations can be found here for the remote script folder and here for the preference folder.
Set up Ableton Live
- Open Ableton preferences (in the Options menu) and select the Link MIDI tab on left. In one of the Control Surface dropdowns, select TouchDesigner. Input and Output should be set to None.
- Reload your Live Set
Set up TouchDesigner and Confirm the Connection
- If Ableton Live and TouchDesigner are running on the same computer, no additional network setup is necessary. If they are running on different computers, you must set TouchDesigner to connect to Live's address. On the
tdAbletonPackage/tdAbletonComponent, set the Ableton Address parameter to the network address of the computer running Ableton Live. The network address of the Live computer is displayed on the TDA Master Max device, which can be found (or dropped) on the Master track. The port parameters on the
tdAbletoncomponent should also match the port numbers on the TDA Master device.
- If the
tdAbletonComponent does not have a disconnected error flag, the connection is successful. (If you see error messages or are not connected, check the Troubleshooting section below.)
- TouchDesigner will open a dialog asking you to add a TDA Master Device to your set. You can also use the Add TDA Master Device parameter on the
If this is your first time using TDAbleton, the best way to learn the basics is the TDAbleton Feature Tour
These are instructions for updating a previously installed TDAbleton. You will have to make changes to both Ableton Live and your TouchDesigner project. All TDAbleton components have a version number on their TDAbleton parameter page which you can check against the version numbers in the palette package. The latest update is always available in the TouchDesigner palette.
- Close Ableton Live
- Delete the
tdAbletonPackagein your project. This will probably cause errors in your network until you finish this process.
- Follow the Install the latest TDAbleton system instructions above.
- On the
tdAbletonmaster component in
tdAbletonPackage, go to the Utilities parameter page and click the Update All To <version> parameter. This updates all the TDAbleton components deployed in your project.
- Reopen your Ableton Live Set
- You may have to update your TDAbleton Max 4 Live devices. See below.
Updating TDA Max Devices
When you install a new version of TDAbleton, you may have to replace TDA Max devices stored locally in your Live Set. This happens when you use the Collect All and Save feature in Live, because it creates local copies of the devices. To make sure you have the proper versions of all TDAbleton Max 4 Live devices, do the following in your Live Set:
- Go to the Master Track of you Set and right-click on the top bar of the TDA Master device. Select Manage Device File. A window will appear on the right side showing all Max devices in your Set.
- TDAbleton Max devices are always prefixed with "TDA_". If any of these devices say "Current Project" in their location column, you should update them.
- To Update A TDA Max Device: drag the device with the corresponding name from the TouchDesigner User Folder in Live's browser (see image) onto the device on the right. This will replace it with the updated copy.
The three locations for TDA devices are:
- TouchDesigner>TDA Project>Presets>Audio Effects>Max Audio Effect>Imported
- TouchDesigner>TDA Project>Presets>MIDI Effects>Max MIDI Effect>Imported
TDAbleton Feature Tour
The easiest way to learn the basics of TDAbleton is to explore the provided demo. To get started, run the TDAbletonDemo.toe file in the /Samples/TDAbleton folder (choose Browse Samples from TouchDesigner Help menu). In the same folder you'll find the TDADemo Live Set for Ableton Live. Inside that folder, open the TDADemo Set.als Ableton Set. Press play in Ableton Live and you should immediately see CHOP data moving in the TouchDesigner demo TDAbleton Components. If you don't, be sure you have properly set up Ableton Live (see Getting Started).
The TDA Master Device
On the Master track of the TDADemo Set, you'll find the TDA Master Max Device. This device shows if Live is connected to TouchDesigner and allows you to apply some master settings for your Live Set. TouchDesigner does not have a way to access the file name loaded into Live, so the Song ID is provided as a numeric field you can use to identify your song. The name of your TDA Master device will be used as a text song name that is readable by TouchDesigner. The Ableton Port is the network port that will be used by the TouchDesigner remote script to receive messages from TouchDesigner. The Max In Port is the network port that will be used by TDA Max devices to receive messages from TouchDesigner.
Tip: you can add a TDA Master device to a Live Set using the Add TDA Master Device pulse parameter on an
abletonSong Component (see below).
Anatomy of a TDAbleton Component
To look at the basic structure of a TDAbleton Component, we'll use
abletonSong1 as an example.
Data from Ableton Live
You will notice that the data shown in the viewer reflects the current state of the Ableton Live Set. You can see a number of channels reflecting time data (e.g.
song/info/beats) and a few others reflecting various states (e.g.
song/info/play). Data coming in from Live is generally CHOP data, and can be accessed by wiring from the TDAbleton Component, as has been done with the
nullSong CHOP. Look in the parameters of the
circle1 SOP to see one way of using this incoming data. Some data from Live come in DAT format, and can be accessed similarly from outputs.
In certain cases, incoming data may also come via callback. Examples of this can be found in the
abletonSong1_callbacks DAT. Python callbacks are beyond the scope of this guide, but if you know a little Python, looking in this DAT will reveal the examples which set the
Sending Data to Ableton Live
Data to be sent out to Ableton is usually sent via
parameters. If you go to the Ableton Song parameter page of
abletonSong1 you will see the Play, Loop, and Tempo parameters which set the corresponding values in the Live Set. The
abletonChainParameter1 Components show examples of using CHOP exports to automatically change an outgoing parameter and thereby change a value in Live.
These parameter values are kept up to date with incoming Live data only if the Auto Sync Pars To CHOP toggle is on. This option is provided because in certain cases Auto Sync can cause echoing changes between TouchDesigner and Ableton.
The Ableton Live Object Model (or LOM) describes all the aspects of an Ableton Live Set, including Tracks, Devices, Parameters, Scenes, etc. For more information about the Live Object Model, see: LOM Python Reference (another version here) and LOM Max For Live Reference.
For this section, we'll use
abletonParameter1 as an example.
In the previous section,
abletonSong1 shows data for the entire Live Set. Most TDAbleton Components are made for observing particular parts of a Set. For example,
abletonParameter is used to get and set the value of a single Ableton Device Parameter. As you can see in the Component's parameters, this one is set to work with Track: 1 Muugy, Device: Pitch, and Parameter: Pitch. In Ableton Live, navigate to that device and you will see that its Pitch value is being mirrored in TouchDesigner.
TDAbleton uses menu parameters to navigate the Live Object Model. For example, all available Tracks, including Returns and the Master, will be shown in the Track parameter. Once you have selected a Track, its available Devices will be shown in the Device parameter, and so on down. To see other examples of this, take a look at the
abletonTrack1 Component, which observes a single Track, and the
abletonChainParameter1 Component, which gives access to Ableton Device Parameters within sub-chains such as those in an Instrument Rack.
Note: You can change the Pitch value in Ableton by changing the Value Send parameter on
abletonParameter1, but notice that this stops Ableton's automation of that parameter. This is another reason why Auto Sync is not always desirable.
abletonMIDI1 Component has a unique feature: a Max For Live device is necessary in order to get MIDI data out of Ableton Live. Each
abletonMIDI component is connected to a specific TDA MIDI device in Live. If you look on the 1 Muggy Track in the Ableton Set, you will see the TDA MIDI device.
TDA MIDI devices in your Live set should be created from TouchDesigner by using the Add TDA MIDI Device pulse parameter on an
abletonMIDI Component. Just select the Track to put it on and press that button.
For more details about using TDAbleton MIDI features, see abletonMIDI.
The TDA MIDI device transmits MIDI data back to TouchDesigner, based on its position in its Track. In the image, for example, the changes in MIDI notes created by the Pitch MIDI Device (just left of it in the Ableton Track) will be reflected in TouchDesigner.
The TDA MIDI device can also be used to send MIDI commands to Ableton Live. To see this, use the
sendNote button and the
pitchBend slider next to the
TDAbleton Rack Devices
The smoothest way to control and watch Live's parameter values from TouchDesigner is using the
abletonRack component, and its corresponding Max devices in live. These racks can be created in Live using the pulse buttons on the
abletonRack component. For an example, look at the device chain in the "2 Muggy" Track in the Demo Set.
The TDA Rack devices are Live presets that include standard Ableton Live Racks with a special Max device on the first chain that sends and receives data between TouchDesigner and the rack macros. In the image, this Max device is called "TDA_Rack_OSC". For the most part, you won't have to interact with this device, though it does have on/off controls for incoming and outgoing values.
The general strategy for using these racks is to put the Live device whose parameters you want to control and/or watch into the rack. Then map the appropriate rack macros to the parameters you want to interact with. This will create a fast connection between those parameters and the corresponding abletonRack device. For more information, see abletonRack.
Using TDAbleton Package
tdAbletonPackage, you will see the
tdAbleton master Component on the top-left. This master component maintains the connection to Ableton Live and will generally not need to be altered once your connection is in place.
The other TDAbleton Components provide the actual real-time data to and from Ableton. To use these Components, copy them into your project from
tdAbletonPackage. In general, they use CHOP channels to transmit data from Ableton Live and custom parameters for Component set up and also for transmission of data to Live. For specific information about the Components see TDAbleton System Components.
The TDAbleton system also provides a number of features for creating your own custom Components. See Creating Custom TDAbleton Components for more information.
Setting Up Your Project
As you have seen, TDAbleton uses a separate Component for each aspect of the Live Object Model that you want TouchDesigner to interact with. To set up all your observers, just copy as many TDAbleton Components from
tdAbletonPackage as you need and set them up appropriately. As always, using select CHOPs for duplicate data will be more efficient than creating duplicate Components.
Caveats and Gotchas
- Most Importantly: the system will be confused by tracks with duplicate names and devices with duplicate names on the same track or in the same chain. In some cases, this is also true of names that are the same after being converted to valid TouchDesigner Channel names. TDAbleton will pop up a warning dialog if it finds duplicate names, and will give an option to automatically rename duplicates. This behavior can be controlled using the
tdAbletonmaster Component's Report Duplicate Names parameter.
- Automatic Ableton Track Names with "#" in them can cause some problems because Ableton does some strange renaming stuff behind the scenes. The best solution is to just rename your tracks without using the # character.
- Duplicate VST effects in the same chain are particularly nasty, because VST effects cannot be renamed. The auto-fix features will fail and you cannot rename the effects manually. There are two solutions for this. If you don't want to control/watch the effects in TouchDesigner, you can just ignore them by placing a TDA_Ignore Max device before them in the chain. All devices after the TDA_Ignore will be ignored. If you do want to control/watch the effects in TouchDesigner, place each one inside an effect rack. TDAbleton's abletonRack components will work particularly well for this.
- TDAbleton M4l devices on the same track (e.g. TDA_MIDI and TDAbleton Racks) will need different names to broadcast properly from Max.
- If Ableton Live objects are renamed when TDAbleton is not connected to Live, the connections will be broken when TDAbleton is reconnected. Connections will be maintained properly if renaming occurs while TDAbleton is connected.
- Ableton parameters that are selected via Comp menus will always report their data as float values, even if they are integers in Ableton.
- When using the TDAbleton Rack devices, you can't use spaces in Macro names.
- Ableton parameters that are being controlled by TouchDesigner are not disabled in the Ableton interface, as is common when a value is being controlled by another value. Once TouchDesigner has altered an Ableton parameter value, that value's Ableton automation can only be restored in the Ableton interface. Important: changing Ableton values from TouchDesigner will create Undo steps in Ableton, which can destroy your ability to undo if a value is constantly streaming into Live. You can avoid this by using the TDAbleton Rack devices.
Because TDAbleton is linked to Ableton Live's Python Remote Scripts via OSC and the Python Remote Scripts are linked to the Ableton app through a lower-level system, troubleshooting can be a bit tricky. If you are having problems, your most important tool is the Textport. Be sure to have it open while troubleshooting, as most errors will be reported there.
The most common issues with TDAbleton will have to do with connections. The simplest connection test is the Ping parameter on the
tdAbleton master. Press that and you should see a response in the textport. If not, you may have incorrect address or port settings on
tdAbleton. All TDAbleton Components, including the master, have a Connect parameter. Toggling that on and off will reset the connection and will often print useful error messages as to the problem.
If you are not connecting make sure that the Ableton Port (on the TDA_Master device on your Live master track) matches the Ableton Port parameter (on the tdAbleton component in TouchDesigner). If those are matching, you may have an OSC conflict with something else running on your system. Change them both to a different matching number. Unfortunately there is no way to tell if an OSC port is taken, so this must be done by trial and error.
If you are still not connecting try closing your external text editor and any other sub-processes of TouchDesigner. For some reason, OSC ports can be associated with these sub-processes and the ports will not reopen until the applications are closed.
TDAbleton will attempt to transmit any errors from the TouchDesigner Remote Script to the textport. In most cases this will be sufficient, but sometimes it may be necessary to look at the Ableton log file. There are Log file helper parameters on the Utilities page of the
tdAbleton component. To find your log file, see this Ableton help page.
Tip: the Log TDA Debug Msgs parameter turns on and off verbose debugging in Ableton's log file. If this parameter is off, only errors and the most basic information will be put in the Ableton log.