Creating Reactive Visuals with TouchDesigner and Bitwig Studio
Tutorial | Sep 29, 2023
In yesterday's video, I showed how to connect TouchDesigner and Bitwig Studio using TD Bitwig, but many viewers were more interested in creating visuals in Bitwig. So in today's video, I demonstrate how to create generative visuals in TouchDesigner and synchronize them with music in Bitwig using TD Bitwig. I explain the steps to create a noise texture, mix layers, map audio envelopes to visuals, and use macros and remotes to modulate parameters for an interactive and visually appealing experience.
You can watch the Video on Youtube - support me on Patreon
Questions & Answers #
Maybe you dont watch the video, here are some important takeaways:
What was the goal of today's video? #
Today's video aimed to show viewers how to create visuals inside of TouchDesigner and make them reactive to music created in Bitwig Studio. The goal was to provide a tutorial on connecting the two programs and integrating visuals with music.
What were the main steps demonstrated in the video? #
The video demonstrated how to create a generative pulley grid in Bitwig Studio, create visuals using noise textures and compositing in TouchDesigner, and then connect the visuals to the music using TD Bitwig. The use of macros and math operations in TouchDesigner allowed for further control and modulation of the visuals.
What are some possibilities for modifying and expanding upon the techniques shown in the video? #
Viewers could explore using different parameters from Bitwig Studio to control various aspects of the visuals, such as color, size, or movement. They could also experiment with different effects and modules in TouchDesigner to create unique visual effects. Additionally, incorporating user interactivity into the visuals could add another layer of engagement and creativity.
What are the limitations or considerations to keep in mind when using TD Bitwig for music visualization? #
TD Bitwig relies on the use of Bitwig Studio and the Bitwig remote feature, which may limit the compatibility and versatility of the integration. It is important to have both programs set up and running properly in order to achieve the desired results. Additionally, understanding the basics of both TouchDesigner and Bitwig Studio will be helpful for users looking to customize and expand upon the techniques shown in the video.
This is what im talking about in this video. The text is transcribed by AI, so it might not be perfect. If you find any mistakes, please let me know.
You can also click on the timestamps to jump to the right part of the video, which should be helpful.
[00:00:00] So in yesterday's video, I showed you how to connect TouchDesigner and Bitwig Studio with TD Bitwig.
[00:00:05] And it seemed like in the comments, a lot of people are actually more interested in how to make visuals for music in Bitwig than controlling Bitwig from TouchDesigner.
[00:00:16] So in today's video, it's about that we create some kind of visuals inside of TouchDesigner.
[00:00:22] We create also a bit of music inside of Bitwig.
[00:00:25] And then we try to make it, you know, a bit more reactive to the music inside of TouchDesigner using TD Bitwig.
[00:00:33] So that's the goal of today.
[00:00:35] So I'm switching here to Bitwig and we probably want to create something generative at first.
[00:00:44] Let's say maybe we create a pulley grid first.
[00:00:54] And then we use the pulley grid to create sounds and then we use TouchDesigner to create some visuals to it.
[00:01:03] OK, so these are here my notes.
[00:01:07] I'm using one tiles on.
[00:01:11] I'm making some, some, yeah, generic stuff here.
[00:01:17] Nothing really special.
[00:01:21] One also here for a step mode.
[00:01:22] Step mode gets gets randomized.
[00:01:26] Maybe I use bipolar here first.
[00:01:28] Yeah, go to zero then I'm modulating the notes maybe by 20% or something like this.
[00:01:35] I go down out the steps to maybe seven.
[00:01:39] This is something uneven.
[00:01:40] And maybe let's duplicate here this.
[00:01:44] Make this a bit longer.
[00:01:47] Let's say let's go for 16 steps here.
[00:01:51] And you want to change with this one here.
[00:01:55] We want to change the octaves.
[00:01:56] And these are pitches.
[00:02:02] OK, so this one is a bit slower.
[00:02:05] This one is faster, 16 notes.
[00:02:08] OK, let's see.
[00:02:11] BPM 85, we use a wave table oscillator here.
[00:02:17] We use a nice wave table, of course.
[00:02:22] Let's go with Klazzi.
[00:02:26] And maybe we use a sub oscillator here.
[00:02:31] Now pre-chord and of course a sample note.
[00:02:39] For both of these oscillators.
[00:02:44] And we trigger this 16 notes and the clock one tileser here.
[00:02:54] Trigger mode, let's down here.
[00:02:58] We use this to actually sample and hold this and AD.
[00:03:03] Maybe mixer in front.
[00:03:09] Let's bring here the sub and the main oscillator together.
[00:03:13] Yeah, we trigger this.
[00:03:16] We don't need here the record.
[00:03:19] We also use dice module.
[00:03:21] Trigger the dice module and use this to step here through the wave table at random.
[00:03:27] We use here sub as a sub oscillator.
[00:03:32] This looks nice.
[00:03:35] Maybe some uneven numbers here for the trigger.
[00:03:39] Let's use a mod delay here at the end and a blend.
[00:03:44] Let's just gather.
[00:03:50] Use out here.
[00:03:52] Inside of Xbox use of course a convolution device and use delay plus.
[00:03:59] I really like to combine here multiple things in between like a convolution,
[00:04:05] then a delay plus here with a space algorithm.
[00:04:08] Just mix it in a bit.
[00:04:09] Then at the end delay two maybe.
[00:04:14] Yeah, and then we go out here.
[00:04:20] Let's see how this sounds.
[00:04:31] Yeah, maybe a filter, maybe a low pass at some point.
[00:04:36] Something like this and to use another step mod to change the filter frequency.
[00:04:52] And we need to octos step mod here.
[00:05:05] Let's put this in between here.
[00:05:33] Yeah, let's go for two.
[00:05:35] That's enough.
[00:05:36] Let's put this into a unison mode.
[00:05:39] Okay, we can also use another dice here.
[00:05:54] To modulate the decay time.
[00:06:09] And maybe something to change the loudness.
[00:06:12] We have some kind of velocity feel minus 10.
[00:06:32] So now that we have this running.
[00:06:36] We can use this maybe to.
[00:06:38] Yeah, create some visuals for it.
[00:06:42] Okay, so in between itself in the settings here under controllers,
[00:06:51] I still have here my touch or touch designer extension running.
[00:06:58] So in touch designer, we have an empty project here and scroll out like yesterday.
[00:07:06] There's nothing in it.
[00:07:07] Go back in.
[00:07:09] So first we want to create some visuals and I want to go for a bit of noise.
[00:07:14] It looks like this.
[00:07:19] It gives you basically a random noise texture.
[00:07:21] What I do most of the times is to change the resolution here to the maximum value of
[00:07:28] the community edition of touch designer, which is 1280 by 720.
[00:07:34] That's the maximum resolution.
[00:07:36] If you want to go higher, then you need to buy the professional version.
[00:07:43] So we have a bit of noise here and then we want to change maybe the seat period.
[00:07:51] Let's go for eight.
[00:07:53] Make it really blurry.
[00:07:57] Harmonics want to go down maybe to one.
[00:08:01] That's that's OK.
[00:08:04] And then we want to duplicate this second one.
[00:08:07] And here we change the seat.
[00:08:10] Different outcome.
[00:08:12] And then we can do multiple things.
[00:08:16] We can mix it together with the composite.
[00:08:23] That's like working like in Photoshop where you have multiple layers, right?
[00:08:27] You have this layer and this layer.
[00:08:28] Then you combine these two layers and inside of this comp here, you can change
[00:08:33] the coloration, how you blend these
[00:08:37] layers together and say add, you can say chroma difference here, right?
[00:08:43] Or just difference and so on.
[00:08:45] So now when we change basically one layer of noise here, let's go to transform,
[00:08:51] say translate, which means you basically offset this noise texture in one direction.
[00:08:58] Let's go to 10.
[00:08:59] You can see it changes any other outcome because you layer different
[00:09:03] areas from this and this noise together.
[00:09:07] And because of the blending mode, you get different outcomes.
[00:09:10] So this really simple idea.
[00:09:14] And what we can do now is we can use some bitwig stuff.
[00:09:19] Let's say Bitwig main to connect to the bitwigs already connected.
[00:09:25] And we can use Bitwig track to get informations from the bitwig track.
[00:09:30] And we select here polygrids and instrument.
[00:09:35] And we want to check here, let's say
[00:09:39] read audio envelope.
[00:09:41] You can see we get now here the informations
[00:09:45] from Bitwig Studio.
[00:09:47] It's kind of an audio envelope of envelope follower.
[00:09:52] These regards, so what we want to do is we want to select this.
[00:09:56] We could just select this and then
[00:10:00] let's let's say go to this noise texture here
[00:10:07] and just track this on to translate and say job reference or export job.
[00:10:12] Something like this.
[00:10:14] Now you get this outcome here, right?
[00:10:18] By the way, you can also use this display button here.
[00:10:21] So you see the outcome of this in the background of TouchDesigner,
[00:10:24] which makes it sometimes a bit better to focus on what's going on.
[00:10:30] So now you can see the sound here of Bitwig.
[00:10:36] Kind of defines how this visual looks looks like.
[00:10:41] It's a super simple, easy setup, right?
[00:10:45] So we can leave it at that.
[00:10:48] But we can also remove here the export.
[00:10:52] Let me see.
[00:10:53] This is the expression.
[00:10:55] I can say we want to export this first.
[00:11:01] So the select node basically is something where you can select
[00:11:05] different values from another object.
[00:11:09] So here, when you create this connection,
[00:11:10] you can see we have the same values or parameters in here than here.
[00:11:17] But you can use the select and the channel names
[00:11:21] instead of using the stars and bull between select all values.
[00:11:25] You just select track slash audio envelope.
[00:11:32] So now we get only this value in here, right?
[00:11:36] And the reason for that is because we want to add another node
[00:11:41] that it's called math
[00:11:44] and math does all kinds of operations, math operations on this value.
[00:11:50] It gets inside of this
[00:11:54] inspector here.
[00:11:56] So we can define the range, map the range from zero one,
[00:12:00] which is currently happening to zero to two, maybe.
[00:12:04] Or we can say we want to
[00:12:08] pad this here with a zero negative value, maybe zero, or maybe too much
[00:12:15] to and then multiply by two.
[00:12:18] So we get higher values.
[00:12:22] Yeah, something like this.
[00:12:23] And then we actually are lack to smooth.
[00:12:26] Actually, the movement you can see it's a bit too
[00:12:29] steppy, but the slack module here makes it really smooth.
[00:12:35] It's maybe not on point with the modulation, but you get a bit of smoother signal.
[00:12:40] But we can go down to zero dot one, zero dot one.
[00:12:46] Yeah, something like this.
[00:12:49] And then we maybe use here at a new object.
[00:12:55] To use that as an output, you can use that.
[00:12:59] But maybe you want to add more
[00:13:03] math operations to it later on so you don't need to update basically your
[00:13:08] reference here, your job export.
[00:13:11] So you just use this as an export.
[00:13:13] And if you want to add some operations, you hook them up in between here.
[00:13:17] Right. So that's the idea.
[00:13:20] So let's use a noise to
[00:13:25] and let's use this here for the translate job reference.
[00:13:32] So now you see the background, what's happening,
[00:13:35] but you can influence this a bit here with math and say, maybe I want to have
[00:13:39] higher values. Let's go to five.
[00:13:44] Right. So I feel like this.
[00:13:49] Then it's a bit too like an white here.
[00:13:53] And so.
[00:13:56] Let's use an out here.
[00:13:59] Disable this and use this as out.
[00:14:03] So now we can insert here something like a look up look up table.
[00:14:09] This one basically does look up kind of.
[00:14:13] Yeah, let's put down here.
[00:14:16] This look up maps basically
[00:14:18] bright and dark areas, what we have here with black and white, of course,
[00:14:24] to a certain kind of table.
[00:14:27] So it's more like a look up table.
[00:14:30] And you can add here maybe a color ramp.
[00:14:34] Oh, that's great.
[00:14:38] And this way and you as yeah, what is in here?
[00:14:43] And now you can define with the ramp here some kind of color setting.
[00:14:47] So let's say I want to go here to.
[00:14:52] To blue.
[00:14:57] Maybe do you two plex at the.
[00:15:06] The end.
[00:15:09] Can add more colors if you want to, of course.
[00:15:15] Something like this depends on what you like, right?
[00:15:24] So it basically tries to map from the dark areas of this image to the white area
[00:15:31] of this image, it tries to map basically this ramp to it.
[00:15:35] I can also use pictures and stuff like this.
[00:15:37] You don't need to use a ramp, actually.
[00:15:39] So what we also can do now is we have a lot of options now.
[00:15:42] We can change the face of the ramp so we can move the offset the ramp.
[00:15:46] As you can see, right?
[00:15:48] So it changes the mapping, basically.
[00:15:53] So we can also modulate this.
[00:15:56] And we already used the outer and audio envelope for that.
[00:16:00] So what we want to do is we want to use some.
[00:16:04] Macros, the only way actually to map something from Bitwig to
[00:16:09] touch design at the moment is using remotes for some reason.
[00:16:13] I don't know why they why they did this.
[00:16:15] But it's that's how it is.
[00:16:17] So what we need to do is we need to use here.
[00:16:22] A new page.
[00:16:25] Can we actually rename this page here?
[00:16:27] Maybe use it.
[00:16:29] Probably touch design or something like that.
[00:16:33] And then we use a macro here.
[00:16:36] All this maybe M1 and we can now use the.
[00:16:42] The pictures here.
[00:16:45] To output the values of this.
[00:16:49] Now we map a macro here to M1.
[00:16:53] You can see it's modulated now.
[00:16:57] Back in touch design, we need to know new module and it's called a Bitwig
[00:17:05] remote device so we can track this in.
[00:17:10] And we need to select the device.
[00:17:13] Let me see.
[00:17:17] Polly grid is selected and we get here already
[00:17:22] the value of the pictures basically.
[00:17:24] So this is this macro.
[00:17:27] Maybe I put in here a smoothing option.
[00:17:30] Let me see.
[00:17:34] To write the movement is a bit smoother here.
[00:17:53] So now we get this value here
[00:17:56] and we can use this for maybe the face of the color.
[00:18:03] So we do the same thing here.
[00:18:04] We use a select.
[00:18:07] And in this one, we select here.
[00:18:12] Our zero slash.
[00:18:17] Motulation value.
[00:18:21] We get this value here.
[00:18:23] We do the same thing.
[00:18:24] We add here maybe a leg.
[00:18:27] And then we put this into.
[00:18:32] What's it?
[00:18:36] We use this as a modulator out.
[00:18:43] So now we go back here to the ramp
[00:18:47] and say I want to modify here the face of that chop reference.
[00:18:53] Right. You can see now
[00:18:56] this remote controls basically the face of the color, which makes it really flashy
[00:19:01] in the background.
[00:19:03] Maybe I put I need to put some kind of trick or warning when I start the video.
[00:19:08] So yeah.
[00:19:10] OK, to give you some more ideas here are some
[00:19:14] more things you can do.
[00:19:16] For instance, inside of Bitwig, we use here this dice, I think.
[00:19:22] Or this dice to modify here the wave table position.
[00:19:25] So we can use here another macro
[00:19:29] called as M2 and let's say
[00:19:34] I use a modulator out here.
[00:19:38] I'm a modifiers.
[00:19:39] So I know exactly the value of the value of the wave table position here.
[00:19:46] They can use this as a remote and then use this inside of touch
[00:19:51] liner here to actually vary this parameter one.
[00:19:57] So we select everything here, duplicate this.
[00:20:02] And in here we select
[00:20:05] parameter one.
[00:20:07] So we have a different value here than here, right?
[00:20:10] It's a different remote and so on.
[00:20:12] So here we have our flashy noise texture.
[00:20:16] So what we do now is here to use maybe a circle.
[00:20:23] output resolution as 1280 by 720.
[00:20:31] Which changed the circle size to 0 0 5 maybe.
[00:20:40] 0 0 5 something like this.
[00:20:44] And then we use here translate.
[00:20:53] Transform as a scaling option.
[00:20:55] I mean, we could just do this on here
[00:20:57] and change the radius.
[00:20:59] But I usually like to use a transform for some reason.
[00:21:02] And then use the output of that to scale it maybe.
[00:21:11] Chop reference.
[00:21:14] Chop reference.
[00:21:18] And see it's slowly moving in size.
[00:21:20] And that's the wave table position, by the way.
[00:21:24] So we have a leg in place here and we have we have a math.
[00:21:31] So now it becomes handy that we have this output here.
[00:21:34] I can
[00:21:35] hook some additional modules in between
[00:21:38] without needing to update here my reference.
[00:21:42] So that's the math.
[00:21:47] We add maybe.
[00:21:50] Multiply by three.
[00:21:57] Something like that, maybe more.
[00:22:04] So you get the circle here.
[00:22:12] Then we could.
[00:22:16] From this transform, we go into.
[00:22:23] And we also go into a feedback.
[00:22:29] Let's put this over there.
[00:22:32] So feedback works kind of the same way as an audio.
[00:22:36] You play basically stuff into a buffer.
[00:22:39] Here we go on the comp.
[00:22:41] We go into over.
[00:22:45] And you want to insert here.
[00:22:49] It's called level.
[00:22:52] With this year.
[00:22:53] This capacity.
[00:23:14] Something like this.
[00:23:15] Maybe we should also change the position.
[00:23:20] So let's use here some.
[00:23:24] Some random mods inside of Bitwig.
[00:23:29] Just a random.
[00:23:36] Maybe sync this.
[00:23:40] And then use macro.
[00:23:43] Called in three.
[00:23:52] So modify this.
[00:23:54] Duplicate this and modify this.
[00:23:59] Then you map this.
[00:24:02] Maybe a bit faster off node.
[00:24:12] And we use this for the position.
[00:24:17] Of the dot.
[00:24:19] So let's extract these values.
[00:24:22] Select the device again.
[00:24:25] This should be.
[00:24:30] Parameter two.
[00:24:40] And this is parameter three.
[00:24:44] OK, so if you transform here,
[00:24:48] use this for the translate.
[00:24:52] Use this for translate up and down.
[00:24:56] So now we need to change the math to apply one.
[00:25:02] Apply one.
[00:25:08] If the range is too big, zero dot five.
[00:25:11] Zero dot five.
[00:25:15] So back to the level here.
[00:25:20] And we need to, I think, we need to drag here.
[00:25:28] This one onto that.
[00:25:30] Yeah, now we have a real feedback.
[00:25:34] So we basically, while dragging this on that,
[00:25:38] we create kind of a feedback loop and in between we have this level.
[00:25:41] It's exactly working like a reverb or like a delay feedback.
[00:25:46] And here you can then change the opacity.
[00:25:51] So we are slightly out of range here all the time.
[00:26:03] Maybe change the range to.
[00:26:07] Oh, that's the wrong map in here.
[00:26:18] Or minus zero dot five.
[00:26:22] It should be better.
[00:26:24] And here also minus zero dot five.
[00:26:33] And then when we have this bouncing ball, we mix this together here
[00:26:38] with our flashy background.
[00:26:41] Insert comp.
[00:26:44] Bring this into that.
[00:26:48] And then we get something like this.
[00:26:52] Maybe it's better to change it.
[00:27:01] Don't color.
[00:27:07] Maybe make the initial circle a bit smaller.
[00:27:17] That's a lot of testing and drawing out stuff.
[00:27:19] What looks good and what looks bad, right?
[00:27:23] This is way too trippy.
[00:27:26] But I want to give you some ideas, right?
[00:27:28] I want to show you what's possible.
[00:27:30] It's not really a touch designer professional by any stretch.
[00:27:37] Let's see.
[00:27:49] We can increase here the speed, maybe.
[00:27:53] Change the order here.
[00:27:56] OK, I think that's it for this video.
[00:28:02] I'm disabling this here.
[00:28:04] So I tried to show you all the important parts, how to extract the audio
[00:28:08] envelope from Bitwig from a track, how to extract some remote controls here
[00:28:13] from Bitwig from the track.
[00:28:15] So I'm going to show you the audio envelope from Bitwig from the track.
[00:28:20] How to extract some remote controls here from Bitwig from a device.
[00:28:25] Then use some math operations to smooth out the signal or prepare it.
[00:28:31] Then how to create some basic visuals here also with feedback.
[00:28:36] How to use noise textures and look up modules, how to use modules here.
[00:28:42] And then, of course, how to use these
[00:28:46] these values coming from Bitwig and modifying certain things here inside of our visuals.
[00:28:52] We can also put this into a perform mode here on the top left.
[00:28:57] Looks like this.
[00:28:58] And you can let it play alongside your grid patch.
[00:29:02] Maybe in the future, we can look into how to make this visual interactive
[00:29:07] and then also modify at the same time, modifying stuff inside of the grid patch.
[00:29:13] So to make it completely reactive and pleasant to play with.
[00:29:21] So I think that's it for this video.
[00:29:23] Thanks for watching.
[00:29:24] Leave a like if you like the video.
[00:29:26] Leave a comment if you have some questions and if you want to see more of this
[00:29:30] of these kind of tutorials, please let me know.
[00:29:34] Subscribe to the channel.
[00:29:35] Thanks for watching and see you in the next video.
[00:29:37] (upbeat music)