Chord Maker - Bitwig Piano Roll Extension
Tutorial | Feb 19, 2025
In this video, I introduced my new Chord Maker controller script for Bitwig Studio, which creates simple diatonic chord progressions in the piano roll. It allows users to choose modes, re-voice notes, and add bass or seventh notes, providing a great starting point for music creation with the ability to customize further. I also provided instructions on accessing and troubleshooting the script, inviting feedback for potential improvements.
You can watch the Video on Youtube
-
support me on Patreon
-
Download Chord Maker on GitHub
-
read about Scale Maker
-
read about Melody Maker
Summary #
Maybe you don't watch the video, here are some important takeaways:
In the video, I'm introducing my new controller script for Bitwig Studio called Chord Maker, which is designed to help create simple diatonic chord progressions within the piano roll. Previously, I showcased my Melody Maker and Scale Maker scripts, and now I'm expanding the toolset with Chord Maker.
I demonstrate how Chord Maker works with a launcher clip or a note clip inside Bitwig Studio's clip launcher, focusing on a four-bar section. To use the script, you first choose a musical mode from the options provided, similar to my Scalar JS script from last week. For example, you might select a D# natural minor scale. You then specify how many bars of chord progressions you wish to generate and decide whether to generate notes within the clip launcher or arranger, choosing the clip launcher for this example.
Upon hitting 'Generate,' the script creates a series of chords, one for each bar, resulting in a simple chord progression. If you want to further customize these results, you can use the 'Repaint' feature to alter settings such as revoicing, which adjusts the arrangement of notes within each chord to bring them closer together or apply different inversions.
I explain the concept of revoicing in greater detail, including features that adjust how close notes can be to one another by shifting octaves—useful when dealing with chords containing more than just triads. Another exciting feature of Chord Maker is the revoicing pedal channel, which aims to create a pedal tone by keeping certain notes constant through the progression.
Each note in the progression is assigned to different MIDI channels representing the root, third, fifth, etc., making it easier to understand each note's function within its chord. There is also an 'Add Bass' feature that generates root notes an octave or two lower, useful for creating basslines that complement the chord progression.
I delve into additional features like adding seventh or tenth notes to chords, enhancing the harmonic texture of the progression. If notes become too closely packed, you can adjust the minimum interval with semitone settings, ensuring smoother voicings.
I share a glimpse at the underlying script, explaining how I manage chord flows and probabilities to ensure the generated progressions make musical sense. Users can modify these probabilities within the script to customize the likely transitions between chords further. Although setting up sliders for these probabilities in the GUI would clutter the interface, changing values directly in the script allows personalization.
Troubleshooting tips are provided for ensuring the script appears in Bitwig Studio, including adjusting file lines to force cache refreshes if necessary. I stress that the code must be placed correctly within Bitwig’s directories.
Finally, I highlight the availability of the script on my GitHub, reminding viewers to download Scales.js if not already present. I acknowledge that while the script lacks rhythmic variation at this point, it offers a solid foundation for generating diatonic chord progressions without randomness, built instead on probability-based logic. Feedback and bug reports are welcomed, and I mention the imminent release of Bitwig Studio 5.3, urging viewers to stay tuned.
Transcription #
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] Hey, folks, welcome back.
[00:00:01] It's time to go back to the piano roll.
[00:00:04] And last week, I showed you two of my controller scripts called melody maker and scale maker.
[00:00:10] And today I want to give you my new chord maker controller script.
[00:00:15] It creates simple diatonic chord progressions inside of the piano roll.
[00:00:21] So here we have, let's say a launcher clip or a note clip inside of the clip
[00:00:28] launcher of Bitwig studio, we have four bars here.
[00:00:31] And all we have to do now is to go to the chord maker controller script
[00:00:36] and we can choose here a mode.
[00:00:38] And these modes are also coming from the scalar JS script I did last week.
[00:00:46] So you have all the same modes in here, also the same scales.
[00:00:51] Of course, we can choose a D sharp natural minor.
[00:00:55] And we can choose here how many bars of chord progressions you want to generate.
[00:01:00] And we want to generate here notes inside of the clip launcher or the arranger.
[00:01:05] But this time we want to create here inside of the clip launcher.
[00:01:09] Then all we have to do is basically to hit generate.
[00:01:13] And then it gives you here a bunch of codes.
[00:01:16] One chord for each bar, right?
[00:01:19] And it sounds very basic.
[00:01:21] Okay, and we can go back here to the chord maker.
[00:01:36] And I did it this time that you don't need to hit generate all the time.
[00:01:40] You can do this if you want to.
[00:01:42] But every time you hit generate, you create a completely new random.
[00:01:47] It's not absolutely random, but you create a new chord progression.
[00:01:52] But this time we can also change some settings here and then hit repaint.
[00:01:56] So we can say, let's re-voice all these notes in here, right?
[00:02:01] So we hit repaint.
[00:02:02] You can see now some of these notes are much closer together.
[00:02:07] And below that we have here re-voice minimal interval.
[00:02:21] And this means when you have multiple notes or when some notes are too close
[00:02:27] together, then they are split apart by shifting octaves.
[00:02:32] So this means here we can have while shifting notes around at least one
[00:02:39] semitone distance.
[00:02:40] I show you this later on because at the moment it doesn't make any sense here
[00:02:44] with the triads, but when you have more notes in a chord, then it becomes obvious.
[00:02:51] So we have then also your re-voice pedal channel.
[00:02:54] That's more like an experimental feature where you can say, I want to have
[00:02:59] certain notes here on the same note.
[00:03:02] So let's say you have multiple chords and some of the chords in here have
[00:03:07] the same notes, but in different octaves, you switch basically these
[00:03:12] notes to the same octave and you have like a pedal tone.
[00:03:14] So like a note that goes through all of the chord progression.
[00:03:19] And here you can choose basically which note it is.
[00:03:21] Maybe it's the root, it's the channel one or the third, which is I think three and so on.
[00:03:28] Another thing that you need to know is that all of these notes here have
[00:03:33] different MIDI channels.
[00:03:34] So when we switch the piano roll to note channel, you can see all of these
[00:03:39] notes have different channels, but they are kind of have a meaning.
[00:03:44] So here this note is channel one because this is the root of the chord.
[00:03:49] And this one has channel three because it's the minor third.
[00:03:54] If sometimes it can be also the major third, then it's also three.
[00:03:59] So this is the third of the chord.
[00:04:01] And then this one is five because it's the fifth, right, of the chord.
[00:04:05] And then you can see here this chord actually is in an inversion.
[00:04:11] So the root note is not the lowest note inside of the chord.
[00:04:15] It's actually here the fifth.
[00:04:17] So this is the this is basically the inversion zero or like the root position
[00:04:23] of this chord and the revoicing or the reverse feature here basically
[00:04:29] that changes to that.
[00:04:30] So this note is closer to this note.
[00:04:34] So this is the this is the idea behind it.
[00:04:37] We have multiple channels for different notes that have different meaning.
[00:04:42] So you always know what note is in what kind of inversion
[00:04:49] or what is the what is the function of the note.
[00:04:51] Then we have just something like at base.
[00:04:55] So we can choose yes and then hit repaint.
[00:04:58] And then it creates basically a root note.
[00:05:02] So here this is G, right?
[00:05:03] And this is G because this is the root note.
[00:05:06] So I take the root note.
[00:05:07] And paint it one or two octaves lower.
[00:05:12] So with this, we can create some kind of base sound.
[00:05:17] And also this note has a special channel, it's channel 16.
[00:05:21] And so it's the max channel, right?
[00:05:23] So base note, you can use this then and send it to a different channel,
[00:05:27] to a different instrument or maybe on the same channel or on the same track.
[00:05:32] You can send different notes to different instruments or use it for different purposes.
[00:05:38] So this was the idea behind it.
[00:05:40] You can also choose no here, repaint, and then it's, you know, the base notes are gone.
[00:05:46] We can also add seventh notes here.
[00:05:49] And you can see here, some of these notes are very close together, right?
[00:05:55] So this is here, let's go back.
[00:05:58] Yeah.
[00:05:59] So this is now here channel seven because it's the seventh note.
[00:06:05] You can see this note is very close to this note.
[00:06:09] But there's a gap between that, that's exactly two semitones.
[00:06:12] So what we can do now here is with revoicing, we can say, I want to have at least three
[00:06:18] semitones between notes and then hit repaint.
[00:06:22] You can see now this is here at the top because it's just too close together.
[00:06:27] So my script basically decides to take this note and put it one octave higher.
[00:06:32] It's the same note, it's just one octave higher.
[00:06:35] You can also go down to one and hit repaint and then hit here, maybe at 10th.
[00:06:43] It's repaint.
[00:06:45] You can see now we have here 10th note of the chord pretty close to B, right?
[00:06:51] It's just one semitone.
[00:06:52] And maybe it doesn't sound well or sound good.
[00:07:04] So maybe you don't like the sound.
[00:07:05] So you can say, I want to have at least two semitones between the notes.
[00:07:10] So hit repaint and then, you know, it skips the note up to one octave higher.
[00:07:15] Or maybe three, let's use three here.
[00:07:21] Then with the Revoise Paddle channel here, you can say, what's this?
[00:07:43] Maybe here B, this is channel three.
[00:07:47] I want to have like for channel three.
[00:07:51] I want to try to keep it on the same note, but it's not possible here.
[00:07:55] Let's go to five, maybe.
[00:07:57] So it reorders the notes.
[00:08:01] So you can, you know, try out and give it a different voicing just from this tool.
[00:08:08] But it's probably more easier than or easier to go into the notes here for yourself and then
[00:08:16] nudge it around octave-wise and get some different voicings.
[00:08:21] And this is the same chord progression from the beginning.
[00:08:33] So you can do all these changes here with the Repaint feature.
[00:08:37] And then you can also hit Generate and completely generate a new chord progression every time.
[00:08:45] I always start with the tonic, so with the one chord.
[00:08:48] So if you want to start with a different
[00:08:51] different chord, then all you have to do or what you usually do is you just start in a different position.
[00:09:01] So you start here instead in the beginning, right?
[00:09:13] So I tried to kept it simple.
[00:09:14] Also, it's it's all diatonic, so it's nothing like you can create modal chord progression.
[00:09:22] So it's very basic, very simple.
[00:09:24] But in my opinion, it's a great starting point.
[00:09:27] If you want to create something, it's also a great starting point for me when I make this script
[00:09:33] in the future, maybe a bit more, you know, complex at some features here and there.
[00:09:38] But it's at least something.
[00:09:40] It's a starting point.
[00:09:41] And you can create some nice diatonic chord progressions just with a click here of a button.
[00:09:48] So it's maybe a good way to start this.
[00:09:51] I also want to show you here the script.
[00:09:53] This is the name chord maker control JS.
[00:09:57] And it's here, chord flow.
[00:10:01] You can see this, maybe I can zoom in.
[00:10:04] So this is basically how I create chord progressions here.
[00:10:11] It's an array or it's an object with arrays in there.
[00:10:15] And this is here, the tonic, the root note, right?
[00:10:19] And then the flow is it can go so the tonic can go to all of the other chords.
[00:10:26] But you have a certain probability in here.
[00:10:30] So right, this is 35 percent chance to go to the five chord.
[00:10:35] So the probability is pretty high that we go from the one chord to the five chord.
[00:10:40] It's not so likely, but it's still high to go to the fourth chord here.
[00:10:46] And the lowest probability is here to going to the sixth chord
[00:10:52] from from the one chord to the sixth chord.
[00:10:54] So if you want, you can go into the script here
[00:10:57] and change the probabilities for each of these.
[00:11:02] Flows. So this is basically the first chord.
[00:11:06] This is the second chord.
[00:11:07] So the numbering is a bit odd because it's it's arrays, right?
[00:11:11] The first item or the first index in an array in JavaScript is zero instead of one.
[00:11:17] So it doesn't line up with the chord function.
[00:11:20] So zero is basically the one chord and one is the second chord.
[00:11:24] But you can see this here in the back in the description.
[00:11:29] Also here, this is the five chord.
[00:11:31] You can see the five chord goes with a very strong probability
[00:11:35] back to the one chord, which is then a plagal cadence.
[00:11:38] But it has also 20 percent chance to go to the five, which is the sixth chord.
[00:11:44] So here you can change this if you want to.
[00:11:47] I could maybe put in here sliders for that.
[00:11:51] But then you have, like, I don't know how many sliders.
[00:11:56] One, two, three, four, five, six, seven, eight, nine, 10, 11, 12, and so on.
[00:12:02] So a lot of sliders and makes the interface too complicated.
[00:12:07] But if you want to, you can change this here.
[00:12:10] If you don't prefer other chord flows or you prefer a certain type of,
[00:12:15] you know, going from one chord to the other chord or the certain type of intervals.
[00:12:20] So this is how this works.
[00:12:25] If you download the script and you have problems that it shows up.
[00:12:29] A lot of people have this problem.
[00:12:34] You have to go to settings here, locations.
[00:12:37] And then down here you see my controller scripts.
[00:12:40] You have to put the script into this direction, into this directory.
[00:12:45] That's very important.
[00:12:47] That's the main directory here for controller scripts.
[00:12:51] And then you go to settings, controllers, and then you click here down here, add.
[00:12:58] And then it should show polarity here.
[00:13:01] And then you can choose chord maker and add.
[00:13:04] If polarity doesn't show up, some people reported this.
[00:13:09] I think it's a caching problem for Bitwig.
[00:13:14] You put this into this directory and then you go into the script here.
[00:13:19] And then you maybe change just one line or maybe put this one line down and then you hit save.
[00:13:26] And then it should show up, in my opinion.
[00:13:31] I don't know if that's the problem, but I think Bitwig is caching these controller scripts.
[00:13:36] So if Bitwig doesn't detect any change or any difference between what's in the
[00:13:42] cache and what's in the directory, it doesn't update or maybe it doesn't, you know.
[00:13:47] Update or show the script at all.
[00:13:50] So there's a problem there.
[00:13:52] But maybe you just go in, change a line like this here and then hit save.
[00:13:59] So Bitwig detects there is actually a change in the script and then it updates the cache.
[00:14:04] I don't know if that's the problem.
[00:14:06] It's just my guessing because a lot of people said multiple different things.
[00:14:12] Some people said there's a problem here with the line, new line characters inside and they
[00:14:19] change it and it worked.
[00:14:20] Some people said they put your load API to the top and then it worked.
[00:14:25] But in my opinion, it's just cache problems.
[00:14:27] So everything you do to the file and then you hit save, Bitwig will detect.
[00:14:32] Oh, there's something different in the controller script.
[00:14:35] Let's update the cache.
[00:14:37] So I think that's the problem.
[00:14:41] Also, if you download QuartMaker here, you also need to download Scales.js.
[00:14:46] If you already have it in your directory, you don't need to download this, right?
[00:14:51] And yeah, you can download the script here on my GitHub.
[00:14:57] As always, you just go to my GitHub, you go to controller scripts here.
[00:15:01] And then there's then here the QuartMaker, you click on it and you use the download button.
[00:15:08] It should work.
[00:15:10] Um, last time I tried to upload a zip file, which, you know, lead to a lot of other problems
[00:15:17] with Windows Defender and, you know, saying there is some kind of virus in there, which
[00:15:22] is not true.
[00:15:23] So I guess this is the best method of downloading this.
[00:15:26] And yeah, like I said, the link is in the description below.
[00:15:30] So this is the QuartMaker.
[00:15:33] It's pretty basic.
[00:15:34] Let me know what you think.
[00:15:35] Maybe I add some features in the future.
[00:15:37] There's also no rhythm.
[00:15:39] So it's not like you can change that you have only one chord per bar.
[00:15:45] Um, maybe I add some rhythmic tools.
[00:15:49] We have, like, you know, different lengths or chords for certain type of chords.
[00:15:54] But I think for as a basic starting point, it gives you exactly what you want.
[00:15:59] Let's generate here and remove tense.
[00:16:03] So it's not really, it's not really random.
[00:16:20] Like I said, it's based on probability.
[00:16:22] So it should give you chord progressions that make sense in a way.
[00:16:27] If you know what I mean, so you shouldn't end up with chord progressions that are
[00:16:31] totally random, that's not the case.
[00:16:33] It's based on probability.
[00:16:35] Anyway, let me know what you think.
[00:16:37] And I also just got the message that Bitwig Studio 5.3 is coming out today.
[00:16:42] So thanks for watching.
[00:16:45] Leave me a like, leave a subscription and hit me up with the bug reports
[00:16:50] in the feature requests, right?
[00:16:51] Thanks for watching and bye.