Building a Step Sequencer for VSTs in TouchDesigner - Tutorial
ฝัง
- เผยแพร่เมื่อ 11 ก.ย. 2024
- Get access to 200+ hours of TouchDesigner video training, a private Facebook group where Elburz and Matthew Ragan answer all your questions, and twice-monthly group coaching/mastermind calls here: iihq.tv/Trial
With the exciting addition of VST support in the recent experimental release of TouchDesigner, you might be looking for an opportunity to start to working with VSTs! In this video, Jack DiLaura walks you through building a simple percussion step sequencer within TouchDesigner based around the Beat CHOP. Besides the underlying step sequencing functionality, you’ll get a bit of experience writing Python code and building a user interface along the way.
How to Install VSTs for TouchDesigner: interactiveimm...
Discover the best free VSTs for TouchDesigner here: interactiveimm...
Beautiful work.
Thank you! Cheers!
Awesome
I always get an error message: "reset" and "channames" can't be found qwq
But the tutorial was very nice!
Hi! This sounds like the code might not be pointing to the right operator. I'd recommend double checking that all of your code matches what we have in the video starting at 27:00 or so.
Especially important is that all operator references will be pointing to a level up in the network (outside of the Container COMP). So for example if we want to change something on the beat1 CHOP, we have to start the reference the operator with *op('../beat1')* -- the *../* portion is what tells TouchDesigner to look outside of the container1 COMP. Hope that helps! :)
Thanks for this.
I couldn't get the expression you gave working though. So after about an hour of reading I came up with this that might help others...
list_steps = [op('null_kick')[index].name for index in range(16)]
on_only = [item for item in list_steps if op('null_kick')[item].eval() == 1.0]
op('../select_kick').par.channames.expr = on_only
No idea why this works and yours doesn't! But glad that I've leant a little about list comprehensions.
I just tested the original code with 2023.11510 and am not seeing any issues, so it might've been a syntax error causing the issue. That said, glad to hear that you were able to find another solution!
For anyone else that runs into a similar issue, here's the code from the video for you to compare or copy/paste:
currentVals = [op('null_kick')[index].name for index in range(op('null_kick').numChans) if op('null_kick')[index].eval() == 1.0]
op('../select_kick').par.channames.expr = currentVals
Interesting. Must have missed something along the way.