ADC Tracktion Graph Talk

I just watched Dave Rowland’s ADC Tracktion Graph talk (on YouTube) and it was excellent! Well done Dave!

It is a very clear explanation of the design decisions to build the new graph code and how it works.

I was interested to see that it eventually will be stand-alone code. And, since I am using the tracktion_graph branch on github, I am wondering about integration with TracktionEngine going forward. Will it always be a drop-in replacement? Or, will it eventually require glue code to use with TracktionEngine?

1 Like

You should never have to write any glue code yourself. This is just the first step to making the Tracktion code base more modular, testable, easy to use and ultimately more widely applicable.

It’s always been our aim to separate out bits of code in to self-contained libraries, it’s just good design. You can imagine in the future vocabulary types, audio file utilities, time code etc. all in their own libraries.

However, the main Tracktion Engine will always simply include these so apps will continue to work as they do now. That’s how we build Waveform and want to continue to do so.

That is what I thought you would say, so good news.

When switching between the legacy graph code and the tracktion_graph branch, i notice the sound feels “tighter”. I know that is subjective and not very scientific, but I feel like I can perceive that everything is handled more efficiently and the timing is better. So, keep up the good work! I am truly looking forward to the end result.

1 Like

Interesting, the multithread strategy reminds a little bit on the multithread audioprocessorgraph proof-of-concept i did in 2013, but in much more advanced way. Multithreaded AudioProcessorGraph Source-Code

Yeah, I think it’s a fairly standard way to do node processing in a multi-threaded way.

The difficult thing when doing multi-threaded processing like this is to ensure the CPU use is actually lower whilst still keeping jitter consistent. Having the odd buffer take a long time to process is arguably worse than a general higher processing time.


I should also point out that the method I describe in the talk is the simplest way to do this, there are lots of places you can optimise that kind of algorithm and we do so in the Tracktion Graph module, there just wasn’t time (and it’s not that interesting) to go in to them in the talk.