TDAbleton - TouchDesigner Ableton Connection

Hi Corey

Nice to see people going deep with this.

Fascinating problem with a somewhat complex solution. I have built a tox with the main features you need. It’s a bit thrown together, so I imagine you’ll want to clean it up some. At the very least, it will get you started with some deep methods for this sort of thing. Check out the red Operators in the tox… all the work is in there with just a one line change to the main extension (search for ‘detail_clip_listener’).

Please send me changes and feedback. I will make a more polished version for a future TDA release. Or maybe you will!
abletonDetailClip.tox (9.28 KB)

Wow, Ivan this is great.

Really smart to set the parent’s custom parameters for the target track and clipslot in the OSC callback.
It gives people way more functionallity out of the box than just dumping the clip details in table and leaving it to them build something to get data from the track that their highlighted clip lives in.

I do think however that the most useful information someone would expect to pull from the detailClip property is the name / slot of the selected clip, so I added a select that picks the highlighted clip’s row from the out_clips table and out DAT to the tox, so you can wire that to straight to DAT Execute and script a callback. There’s nothing stopping anyone from doing this outside the component of course, I just thought it would be convenient.

Other changes:

  • When you use the arrow keys or mouse to move your detail selection from clip to clip in the same track, you always get just one message in the OSCin DAT, but if you move it from a clip to an empty slot, or from a clip to a clip in a neighbouring track, or if you are moving it from a track header to a neighbouring track header, you’ll get two or more messages in the OSCin DAT. I’m not sure what the implications are for performance here, I feel like setting the parent().par.Track and Slot.MenuIndex parameters in the callback even if they haven’t changed probably isn’t too expensive but in any case I edited the callback to avoid settings those parametes if the last received message == the current message.
  • Line 77 in AbletonTrackExt was throwing KeyError: ‘hasMIDIOutput’ whenever the detail clip selection changed. I fixed that.

Some things I noticed:

  • When you move your clip detail selection from on track to another, the ‘Include clip playing data’ channels disappear from the CHOP output until you triger another clip in that track.
  • The ‘Include clip playing data’ toggle seems to be broken for me.
  • When you have a midi clip highlighted and the next clip you highlight is an audio clip you get the error below:

[code]# TDA Remote Script Error #
Traceback (most recent call last):
File “C:\ProgramData\Ableton\Live 9 Suite\Resources\Python\lib\SocketServer.py”, line 290, in _handle_request_noblock
self.process_request(request, client_address)
File “C:\ProgramData\Ableton\Live 9 Suite\Resources\Python\lib\SocketServer.py”, line 318, in process_request
self.finish_request(request, client_address)
File “C:\ProgramData\Ableton\Live 9 Suite\Resources\Python\lib\SocketServer.py”, line 331, in finish_request
self.RequestHandlerClass(request, client_address, self)
File “C:\ProgramData\Ableton\Live 9 Suite\Resources\Python\lib\SocketServer.py”, line 652, in init
self.handle()
File “C:\ProgramData\Ableton\Live 9 Suite\Resources\MIDI Remote Scripts\TouchDesigner\OSC.py”, line 1797, in handle
self._unbundle(decoded)
File “C:\ProgramData\Ableton\Live 9 Suite\Resources\MIDI Remote Scripts\TouchDesigner\OSC.py”, line 1779, in _unbundle
self.replies += self.server.dispatchMessage(decoded[0], decoded[1][1:], decoded[2:], self.client_address)
File “C:\ProgramData\Ableton\Live 9 Suite\Resources\MIDI Remote Scripts\TouchDesigner\OSC.py”, line 1741, in dispatchMessage
reply = self.callbacks[addr](pattern, tags, data, client_address)
File “C:\ProgramData\Ableton\Live 9 Suite\Resources\MIDI Remote Scripts\TouchDesigner\TDA.py”, line 307, in onMsgListener
msg[4] if len(msg) > 4 else ‘’)
File “C:\ProgramData\Ableton\Live 9 Suite\Resources\MIDI Remote Scripts\TouchDesigner\Listeners.py”, line 55, in add
returnAddress, id)
File “C:\ProgramData\Ableton\Live 9 Suite\Resources\MIDI Remote Scripts\TouchDesigner\Listeners.py”, line 191, in addSpecial
addInfo = addFunction(property, returnAddress, extra)
File “C:\ProgramData\Ableton\Live 9 Suite\Resources\MIDI Remote Scripts\TouchDesigner\Listeners.py”, line 256, in addMIDINotes
clip.add_notes_listener(callback)
AttributeError: ‘NoneType’ object has no attribute ‘add_notes_listener’

End TDA Remote Script Error #[/code]

I’ve attached my version of the .tox, note I was working in the current stable build.

I’ll continue testing this in my project and report back with any problems or improvements. Thanks again for your speedy response!

Regards,
Corey.
abletonDetailClip_1.tox (9.47 KB)

There are problems with TDAbleton in latest experimental versions and 20k branch. We are working these out.

For now, you can fix things by deleting the tdAbletonPackage2 component from your toe, if you have it. It comes in TDAbletonDemo.toe, so if you started with that, you might have it sitting around in your file.

Posted version 1.8.7

  • More fixes for “Doesn’t have send” errors

Hi there,

First off I am loving this touch-ableton pathway! thanks for making it :slight_smile:

I have a question regarding the song/time value at… what format this value
is in? (Seconds?) If so it seems to be running quite fast for a seconds counter? (have tried on multiple machines)

Also is there any example out there of having TDs Timeline or a timerChop slaved
to abletons song timeline?

thanks!

puck.

The time value is in milliseconds.

We don’t have an example of locking TDA to the Touch timeline yet, but it is on the todo list. If you make it happen, please share!

Hello, very good project, I have been experimenting on my computer without problem.
I recently started to add 2 mac, but it brings me some problems, for example, in the mac 1, when I try, everything works, except in the middle of signals midi in tda midi.
executing ableton 9.7.1, in the forum I saw that it said 9.7.2 or higher, I suppose it must be a compatibility problem, because in the other mac with windows 10 it works fine.
the version of max for live is 7.3.5.

Could it be that midi signaling does not arrive through a lower version of ableton to which you ask?

And my other question is if I can control from my Touchdesigner with TDAbleton, 2 macs each with ableton and TDableton components?

the idea is from my computer to send midi signals and parameter control to 2 macs.

Thanks and very good project!

cheers Ivan

So from what i can see the integer part of song/info/time is the
total number of beats and the float / decimal points are milliseconds .

I’ve work out a quick hack for getting TD timeline to sync by pulsing
the scrub function in /local/time. seems to work ok for the moment.

i’ve attached the 2 tox’s needed … if you replace /local/time with
time.tox and place the timeSync.tox into the tdAbletonPackage it
should work correctly … you can switch in and out of slave mode by hitting the
sync button.

thanks
puck.
timeSync.tox (1.72 KB)
time.tox (3.59 KB)

@puck: Thanks for sharing your work! I’ll check them out when I have a chance.

@tolchxxx: Yes, Ableton (actually Max) did have some issues with MIDI at one point in development. I’m not 100% sure which version that problem was in. This may or may not have to do with your problem.

What definitely will affect what you’re trying to do is that EVERY COMPUTER that receives MIDI information needs to have its own TDA_MIDI device. That’s just the nature of the beast because each device only sends to one OSC address.

I understand, I will try with more recent versions of max and ableton to see if it is solved.

With respect to connecting TD Ableton to more than 1 computer.
I see that the Touchdesigner project needs an Ip (Abletonpackage / tdableton), from the computer running Ableton. (Ableton Address: the IP address of the computer running Ableton Live. Also accepts “localhost”.)

In case you have 2 computers running Ableton, each with its own ip.
How can I assign the second ip, inside tdableton in touchdesiger?

double tdAbleton?

The 3 computers (1 Windows with touchdesigenr, 2 macs with ableton), connect by means of a router, through wifi.

Thank you

@tolchxxx

You have to create another tdAbleton, yes, with a different global shortcut. Then you have to change the TDAbleton Comp parameter of all the abletonComponents that you want to watch that new master’s connection.

Here is a package that is set up to work as a second connection
tdAbletonPackage2.tox (73.7 KB)

thank you very much I’ll try it.
in the case that one of the computers does not have a ableton suite, to run max for live, would it need a physical interface, which would send mid tdableton to the other computers without the ableton suite?

I know there are virtual midi programs, which I use successfully on my computer.

if they are connected in the same network, it is possible to configure midi out touchdesigner with this soft, and ableton live midi in. to receive midi data by network?

I leave one example: nerds.de/en/loopbe1.html

Thank you

I’m not sure of the details of that, but what you describe sounds possible.

TDAbleton interacts with Ableton Live, not Max directly!

What Max For Live was for the plugins that need to be incorporated into Ableton, like the tda midi.

Thank you

System requirements are in the wiki and at the top of this post

Hello good day, I have a query.
when the midi notes of touchdesigner are sent to ableton, for some reason these can not be written on the piano if I start recording the midi channel. as the image shows.
I’m using the abletonMIDI1 component of TDAbleton.

The idea is to be able to send midi pulses, and have these recorded on the piano.

Thank you.

abletonMIDI sends MIDI directly into the track chain. It basically appears wherever the TDA_MIDI device is, which is after the point where it would be recorded from an external source.

In order to record the signal, you can send the MIDI from the receiving track into a different MIDI track and record it. If you don’t know how to do this in Live, please start a new support thread with the question and I’ll go into detail.

@Ivan Is there a way to do some math to convert that osc data that is incoming from the new TDA_Audio_Analyzer max patch to look like incoming audio data like you would expect from a audiofileIN chop or audiodeviceIN chop?

The audio analyzer is sending level data, so it is really nothing like audio file in data, which is actual wave forms

Documentation coming soon!.

Gracias, me funciono enviando la señal midi desde el canal A, al canal B.