RESOLVED: Trouble hitting 200 fps for music sequencing

I’m not sure if this is a bug or just a limitation of TouchDesigner, but the documentation has been a bit scarce in this area. I’m experimenting with using TouchDesigner for sequencing music, and I am having trouble with holding high cook rates for a simple OSC sending test. Firstly, when I try setting project.cookRate = 200, it is capped to 120 - is this a function of my hardware display?

Secondly, for the attached project (minimally sending 1 osc message at 100hz), TD struggles to even hold 120hz (as seen by logging timestamps on outgoing OSC recieved in Protokol), despite the only work happening being to send a single osc message.

For reference, I am on an Apple M1 MAX, 32Gb, Macos Monterrey 12.4, TD build 2022.29850 (Apple sillicon native).

Is it possible that the variable framerate i’m seeing is due to the ProMotion display (is message sending inherently tied to frame draw)?

high_fps_test.1.toe (4.7 KB)

Yes, in the default session your framerate will be tied to the display refresh rate. If you change the Window COMP for your perform window to not have Vertical Sync on though, and go into perform mode, then things should be decoupled.
If you are drawing the node editing UI, then that will take up some time and I wouldn’t expect it to run crazy fast.

When I run either of these projects and send the messages to Protokol (Protokol | hexler.net), In the osc monitor, i do see it sending 120/200 messages per second (for projects version 3/4 respectively), but when I check the timestamps, they are mostly in blocks 16 ms apart (when I would expect about 8/5 ms between messages). This is with vsync disabled and running from perform-mode. OSC is being sent via python from a timer callback

high_fps_test.3.toe (5.8 KB)

high_fps_test.4.toe (5.8 KB)

When I run this version, with osc sending via OSC-out chop and timeslicing turned on, most messages only have one sample, but there will be several messages in a row with only a single sample, but still timestamped with the same time - this makes it seem like, even though individual frames are processed at 200fps, the osc-sends out from touchdesigner get batched and sent at 60fps
high_fps_test.5.toe (5.9 KB)

1 Like

Hi! Any updates on this?

If I use another TD instance running at 200fps to capture the data, and I use a Trail CHOP to get a history (perform mode with vsync off again), I can see I’m getting data at 200fps.
I wonder if Protokol is single threaded and hitting a 60fps vsync limit on it’s processing

I think you’re right about Protokool! I logged the delta time between messages using supercollider at 200fps and saw the expected avg of ~5ms. Thank you!