Melody Maker -Update 0.4.1
Tutorial | Apr 04, 2025
In this video, I introduce the latest update to my melody maker script, showcasing new features that allow for more expressive and randomized sequences with just one click. I demonstrate how the updates include randomized parameters like timbre, pressure, and release velocity, as well as advanced options like motif development and rhythmic emphasis for creating more dynamic melodies. Additionally, I discuss some technical challenges with the API and share plans for upcoming updates to my other music scripts.
You can watch the Video on Youtube
- support me on Patreon
- download (all scripts)
- head to my Github and download the files
- read more about Scale Maker
- read more about Melody Maker
- read more about Chord Maker
Summary #
Maybe you don't watch the video, here are some important takeaways:
Sure, here's a summary of the video in first person:
Hey folks, welcome back to another video! Today, I'm excited to show you the new update of my melody maker script, which can generate melodies or sequences with just one click. I'll walk you through the new features.
First, I demonstrate setting up a synthesizer on an empty instrument track, adding convolution reverb and delay to enhance the sound. I enjoy using the "Adventure Kid" serum wavetables because each index offers a completely different waveform. I also incorporate a sine wave as the fundamental to balance loudness across different waveforms.
Next, I create a new note clip and set it to natural minor D sharp. With one click, I generate a new sequence of random notes to see how it sounds. The update introduces randomization in timbre, pressure, and velocity, which you can control. You can turn off randomization or set it to 100% for varied settings. This makes sequences more expressive, affecting loudness, filter settings, and wavetable index.
I also explore a feature called release velocity. It's useful if your controller supports it, allowing each note's release to affect various settings. Although you can't edit this directly in the note editor, you can set it via the controller script. By modulating the release, you can create more dynamic sequences.
Another addition is motif development, which enhances repetition by selecting random note sections and repeating them with variations, such as playing backward or inverting them. This adds complexity and interest to the sequences.
I illustrate how to extend the clip length and loop range, and show the impact of different features like note length variation. The randomization and motif development make melodies more sophisticated.
The note channel count feature lets you route notes to different MIDI channels, enabling varied modulation. I encountered some API issues, so not all parameters work seamlessly yet.
Rhythmic emphasis prioritizes important scale notes at key positions in the sequence. When turned up, tonic, fourth, and fifth notes are more likely to appear at crucial points. This enhances melodic structure.
I also introduce generate alternative, which offers temporary versions of a sequence, allowing you to explore variations without altering your original sequence. This is useful for creative experimentation.
I briefly mention my upcoming updates for my Chord Maker and Scale Maker scripts, aiming for better chord progressions across genres.
Finally, I delve into the coding side, explaining how I'm writing and modifying notes in clips, and some of the challenges with the API. I plan to improve this over the weekend.
You can download the script from the description below and give it a try. Let me know your feedback! Thanks for watching, and see you in the next video.
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 to another video.
[00:00:02] I want to show you a new update of my melody maker script
[00:00:07] that can generate nice melodies or sequences
[00:00:10] with just one click in the added new features
[00:00:12] I want to show you in this video.
[00:00:14] So let's start by creating here a synthesizer
[00:00:18] on an empty instrument track.
[00:00:22] We add to also convolution reverb
[00:00:24] and we add just a delay to you
[00:00:27] just so it sounds kind of nice.
[00:00:30] I remove here my key tracking
[00:00:32] and I want to use a wavetable here
[00:00:35] and I kind of like or enjoy
[00:00:37] this adventure kid serum wavetables here
[00:00:39] because you have that each index,
[00:00:41] you have a completely different wave shape.
[00:00:44] So let's use this one.
[00:00:45] I also want to use here,
[00:00:48] I want to remove the fundamental
[00:00:50] and I want to bring in the sine wave as a fundamental
[00:00:53] because some of these waveforms
[00:00:55] have different loudness and so on.
[00:00:58] So I want to use this
[00:00:59] and then I want to create here a new note clip.
[00:01:03] Looks like this.
[00:01:06] Maybe I decrease the sizing a bit.
[00:01:08] Let's go with this
[00:01:10] and then I dial in your natural minor D sharp
[00:01:13] and I just hit generate new sequence.
[00:01:16] So I get some random notes.
[00:01:18] Okay, let's see how this sounds.
[00:01:20] (upbeat music)
[00:01:23] Okay, so the first thing that had changed
[00:01:33] and you can see this down here already,
[00:01:35] the timber is randomized.
[00:01:37] Also the pressure is randomized
[00:01:39] and the velocity is randomized.
[00:01:41] Okay, you can change this by going to this velocity,
[00:01:46] timber, pressure, randomized parameter here
[00:01:50] and it's at 70%, right?
[00:01:52] We can dial this down to zero
[00:01:55] and then just generate a new sequence
[00:01:56] and you can see all the velocity settings here are at,
[00:02:01] let me see, 50%.
[00:02:03] Timber is also in the middle,
[00:02:07] pressures in the middle, right?
[00:02:08] So you can completely disable this
[00:02:10] if you want to just by dialing down here the setting.
[00:02:13] If you pull this up to 100%,
[00:02:15] of course you get randomized pressure,
[00:02:17] timber and velocity settings.
[00:02:19] So this was not in before,
[00:02:22] before it was just randomizing velocity all the time.
[00:02:26] You couldn't change it, right?
[00:02:27] So this time you can change it
[00:02:29] and with this you can already do a lot of things.
[00:02:32] So you can influence the velocity, of course,
[00:02:35] which in this case here also changes the loudness, right?
[00:02:38] If you use this velocity sensitivity here,
[00:02:41] we can use timber for instance here
[00:02:45] for opening up the filter.
[00:02:48] (soft piano music)
[00:02:51] And we can use pressure for the index maybe.
[00:02:57] (soft piano music)
[00:03:00] So the sequence not only has different pitches, right?
[00:03:16] Different velocity settings with timber and pressure,
[00:03:19] you can make it more expressive.
[00:03:21] At each point you have a different, yeah,
[00:03:26] low pass setting or filter setting,
[00:03:28] a different a wave table index,
[00:03:30] and it makes it much more expressive.
[00:03:33] Then there's another thing where I ask myself,
[00:03:36] just actually this release thing, right?
[00:03:39] What is this?
[00:03:39] So if you open up the help,
[00:03:41] you can see it's called release velocity.
[00:03:44] And this is made for controllers that support this.
[00:03:48] So if you don't have a controller
[00:03:51] that uses release velocity or after touch,
[00:03:54] this is kind of useless.
[00:03:57] But it turns out you can attach this setting to notes
[00:04:02] from the controller scripts.
[00:04:04] So even though you can't edit this release thing here
[00:04:08] in the editor, you only have access to velocity,
[00:04:10] timber and pressure and chance, gain and pan and so on,
[00:04:14] as release velocity is not in here.
[00:04:16] But from controller script, you can set this.
[00:04:18] So when this is at 100% here,
[00:04:21] or at something above 0%,
[00:04:25] then release velocity is also randomized
[00:04:29] on each of these notes.
[00:04:30] You just can't see it, but you can use it.
[00:04:35] So we can use your release, open up the filter.
[00:04:38] You can see that it moves on each note.
[00:04:41] (upbeat music)
[00:04:43] I'm not 100% sure, but I think this release modulator
[00:04:52] is released or triggered each time you leave a note.
[00:04:57] I'm not sure if it's triggered with triggering a note
[00:05:05] or if it's just releasing a note,
[00:05:09] you have to figure this out for yourself.
[00:05:11] But at least it's doing solving
[00:05:12] and I can randomize the value for each note.
[00:05:17] So now you can use the full expression modulator.
[00:05:21] So then you can influence how much the expression modulator
[00:05:24] modulates all these things here by just adding a macro.
[00:05:27] Right, then you use the macro.
[00:05:30] You click on the whole expression modulator thing here.
[00:05:34] And then you can see on the left side pressure,
[00:05:36] release velocity is modulating cutoff and so on.
[00:05:39] And we just click here on this name.
[00:05:41] You can see down here the macro, right?
[00:05:46] This is our macro changes how much the amount
[00:05:50] of this modulation.
[00:05:51] And so you can change with this modulator now
[00:05:53] the modulation strength of each of these
[00:05:56] individual modulations here.
[00:05:58] So we can call this amount.
[00:06:01] So if you have this at zero here, nothing is modulated.
[00:06:05] (upbeat music)
[00:06:08] (upbeat music)
[00:06:11] So even though you have this randomized,
[00:06:21] if you pull this down, nothing is modulated.
[00:06:24] So you can fade in or morph
[00:06:26] between different modulation amounts with this.
[00:06:30] Pretty easy.
[00:06:31] Okay, so this is the randomization here.
[00:06:35] This is new.
[00:06:37] Also new is motif development,
[00:06:40] which is kind of an advanced version of repetition.
[00:06:43] So repetition repeats notes,
[00:06:46] but motif development is more like,
[00:06:48] I take the first three notes, the first four notes,
[00:06:51] the first five notes and so on,
[00:06:54] selected at random, basically.
[00:06:56] And then I repeat these sections here.
[00:07:01] And I say this is a motif, right?
[00:07:02] Repeat this throughout my sequence.
[00:07:05] And it's not just repeating.
[00:07:07] I also move this up or down in certain intervals.
[00:07:11] And sometimes I play it backwards.
[00:07:13] And sometimes, you know, I invert it.
[00:07:15] So upper notes or down notes and so on.
[00:07:19] Just alternate between different versions of this motif.
[00:07:24] And then repeat it throughout my sequence.
[00:07:27] So motif development goes up.
[00:07:28] You can see it looks more like
[00:07:33] the logarithm playing this, right?
[00:07:36] (upbeat music)
[00:07:39] So it's probably more interesting if this is longer.
[00:08:00] So we can choose here how many bars, two bars.
[00:08:04] And this is also new.
[00:08:05] When you click now, generate new sequence,
[00:08:07] the ending position here and the loop range
[00:08:11] is also changing.
[00:08:13] So watch this here, right?
[00:08:16] So it extends basically the clip length
[00:08:18] without you doing it manually.
[00:08:21] So now we can generate a new sequence here.
[00:08:24] And then we have the motif development in there.
[00:08:26] (upbeat music)
[00:08:30] (upbeat music)
[00:08:32] Maybe use your also note length variation.
[00:08:35] (upbeat music)
[00:08:42] I have to do this with longer.
[00:08:47] (upbeat music)
[00:08:49] (upbeat music)
[00:08:52] So you get the idea.
[00:09:12] So repetition and motif development
[00:09:15] is kind of the same thing.
[00:09:17] Motive development is a bit more advanced,
[00:09:19] I would say.
[00:09:20] I just wanted to add it in there as an experiment.
[00:09:24] Maybe you can find it useful.
[00:09:26] So try it out, giving feedback.
[00:09:28] Let's put 100% for fourth octave here.
[00:09:34] This is okay, octave range, two octaves.
[00:09:37] So this makes it more spread out.
[00:09:41] (upbeat music)
[00:09:43] (upbeat music)
[00:09:46] Yeah.
[00:09:54] Then I added something called note channel count.
[00:10:01] So this is kind of a problematic one
[00:10:04] because I run into API problems.
[00:10:07] If you switch this on and you hit generate,
[00:10:11] then you can see here,
[00:10:12] each note has a different MIDI channel on note channels.
[00:10:16] The first note has channel one.
[00:10:19] The second one has channel two.
[00:10:21] The third one is channel three.
[00:10:22] So you can route different notes to different devices
[00:10:26] or do different modulations to these notes
[00:10:29] if you want to here with the channel modulator, right?
[00:10:33] So you can see each note plays a different channel.
[00:10:40] Then you can use these modulators
[00:10:42] and do different things to each note.
[00:10:44] That's possible.
[00:10:46] What you can see here,
[00:10:47] the timber is only modulating or randomize the first note,
[00:10:52] also pressure, also velocity works kind of.
[00:10:57] I run into problems here with how you can set note data.
[00:11:04] I think the API is a bit buggy in these records.
[00:11:09] I maybe can show you this later on in the video,
[00:11:12] what I did there.
[00:11:13] But when you choose here to use note channel count,
[00:11:17] timber and pressure and release velocity
[00:11:19] is not randomized anymore.
[00:11:21] If you choose no, then it works.
[00:11:24] If you have yes, then it doesn't work.
[00:11:28] So you have to use either the one or the other
[00:11:30] for the moment.
[00:11:31] That's maybe a solution.
[00:11:33] Someone pointed me in the right direction
[00:11:35] in the API forum on the Discord,
[00:11:37] but I have to try it on the weekend.
[00:11:39] But yeah, you can now set also different,
[00:11:44] or you have a different note channel
[00:11:47] for each note if you want to.
[00:11:49] Then below that we have rhythmic emphasis.
[00:11:53] So this idea is more or less to use important scale notes
[00:11:58] on important positions,
[00:12:04] which means if this is at 0%,
[00:12:06] everything is just randomized.
[00:12:08] If you turn this up to 100%,
[00:12:10] then on important positions inside of the sequence,
[00:12:14] let's say the first position or this position here, right?
[00:12:17] The first quarter note.
[00:12:19] On this position, the probability of having a tonic note there
[00:12:25] or a fifth or fourth is dynamically increased.
[00:12:29] So it's not random then anymore, right?
[00:12:33] So we have here down there, the tonic is 30% chance
[00:12:37] of being played at a certain point.
[00:12:40] Then here the fourth and the fifth and so on, right?
[00:12:43] It's 20%.
[00:12:44] But when you turn this up here, then it's probably 100%
[00:12:49] for the tonic, for the fourth and the fifth,
[00:12:53] at the first position, at the first quarter note,
[00:12:55] the second quarter and so on.
[00:12:58] So it gives you probably more better cadences
[00:13:00] or better melodies, whatever.
[00:13:05] Let's turn this down here.
[00:13:08] So we can see here, this is basically a fifth.
[00:13:12] This is not a fifth, this is the sixth here or the seventh.
[00:13:18] This is here a fifth and so on, right?
[00:13:20] This is the fourth.
[00:13:21] So on strategic important positions,
[00:13:26] you have important scale and notes.
[00:13:28] So this was the idea with this one.
[00:13:31] I have to change the loop length here.
[00:13:40] Okay, let's continue here.
[00:13:58] So this is rhythmic emphasis, also an idea I had
[00:14:02] and I think it's maybe a good addition.
[00:14:04] So you can influence how the melody builds
[00:14:06] or how the sequence is built, right?
[00:14:08] Instead of just dialing in here,
[00:14:11] probabilities for each different notes.
[00:14:13] Down here, I added also something, the name clip.
[00:14:17] I think this was in before.
[00:14:20] So you can see this here, you press name clip
[00:14:23] and then you have natural minor D sharp,
[00:14:26] which is what you select up here.
[00:14:29] Then we have generate new sequence, repaint sequence.
[00:14:34] And now there is also a button called generate alternative.
[00:14:39] So this is a temporary generation.
[00:14:42] So if you have generated your new sequence
[00:14:44] that looks like this
[00:14:46] and you want to have a different alternate version from this,
[00:14:49] you can hit generate alternative
[00:14:51] and it just changes a few notes in terms of pitch.
[00:14:56] You can do this over and over
[00:14:57] and it gives you a different version, right?
[00:15:02] But you can always go back to the first sequence
[00:15:06] by using repaint.
[00:15:07] So this is the first.
[00:15:09] And this is kind of alternative.
[00:15:13] So it's in the, or it's temporary.
[00:15:17] It's not like something I override my internal memory.
[00:15:22] With this, you can generate a sequence.
[00:15:25] You have a melody here.
[00:15:26] And then you can create, let's say, another clip here,
[00:15:29] go into this clip and then say generate alternative here.
[00:15:33] And then, you know, move from this one to this one
[00:15:37] and back and forth and or maybe use
[00:15:40] three repetitions of the first one.
[00:15:45] And then on the fourth, you use an alternative version.
[00:15:47] Maybe interesting to you, I have no idea.
[00:15:51] I just, I put it in there.
[00:15:52] Maybe at some point, I need to rework this
[00:15:55] because the script is already so complex.
[00:15:58] I have to just take out the best ideas
[00:16:02] and make a new one, maybe and only use what works best.
[00:16:07] So maybe giving feedback on this
[00:16:09] because it's already pretty big here.
[00:16:12] I put this in the description below
[00:16:15] so you can download it for free and updates.
[00:16:17] You probably run into problems.
[00:16:21] I already see the comments,
[00:16:23] but I also update my zip file
[00:16:26] so you can just download the zip file
[00:16:28] and put it into your controller script folder.
[00:16:30] You probably have to go in here
[00:16:35] and sometimes it works at least for me.
[00:16:38] Let me see where it is here, it's a melody maker.
[00:16:41] Sometimes it helps just to switch this on.
[00:16:44] Off and on, switch it off and on again.
[00:16:47] And then it works.
[00:16:48] Sometimes you have to completely delete the script
[00:16:56] and put it back into the directory, delete this
[00:17:01] and bring it back in.
[00:17:03] You find a way to make it work.
[00:17:07] It's a bit buggy sometimes,
[00:17:09] but for me, it always works.
[00:17:10] Of course, I'm the developer, so yeah, that's that.
[00:17:16] What else can I tell you?
[00:17:17] Yeah, I also want to update here.
[00:17:19] Of course, my chord maker and my scale maker
[00:17:22] pretty soon I have some ideas for that
[00:17:25] so we can generate better and more code progressions
[00:17:30] in different genres, right, at least that's my idea.
[00:17:35] So there's also an update coming soon.
[00:17:37] I'm working on this and it's coming.
[00:17:41] I also want to show you here
[00:17:44] how it looks like inside of my editor.
[00:17:48] And yeah, I also see this here.
[00:17:51] That's basically my method of writing notes into a clip, right?
[00:17:57] I take the cursor clip, which is the current selected
[00:18:00] note clip, and then I just write notes into this clip.
[00:18:06] I can define a channel, a MIDI channel, a position,
[00:18:10] which is measured in 16 note steps.
[00:18:13] So one is the first step, two is the second step and so on.
[00:18:16] And then we have your note pitch, which is the y-axis,
[00:18:20] which is measured in MIDI numbers or, yeah,
[00:18:26] I think on note numbers, so 60 is C3.
[00:18:30] Then velocity and note length.
[00:18:34] And you can't set timbre and pressure
[00:18:37] and release velocity.
[00:18:39] You can't do this.
[00:18:40] Maybe that's because this is the first iteration of the API
[00:18:44] when it came out 10 years ago.
[00:18:45] So when you want to set timbre and pressure to these notes,
[00:18:51] you have to first write this into a clip.
[00:18:53] And then I schedule here a task,
[00:18:58] which is just a delayed function call
[00:19:01] by 100 milliseconds because I need to wait
[00:19:05] for this thing here to complete.
[00:19:09] So it writes all the note into the clip,
[00:19:11] and then I wait a few milliseconds or 100 milliseconds
[00:19:14] and then I execute the next method,
[00:19:16] which is called modify notes in clip.
[00:19:19] So this one here.
[00:19:21] And here I do the same thing.
[00:19:22] I iterate over all my notes in my internal array.
[00:19:27] So I go over each note and then I get these notes back
[00:19:31] into the script from the note clip.
[00:19:33] And I need to define also here the note channel,
[00:19:38] note position, note pitch and then the Bitwig API
[00:19:41] gives me back basically the note.
[00:19:43] And then I can define on these notes the timbre,
[00:19:48] pressure and the release velocity.
[00:19:50] So it's basically writing notes to a clip,
[00:19:53] then waiting a few milliseconds
[00:19:55] and then getting all these notes back out of the clip,
[00:19:59] setting the new metadata and writing it back
[00:20:03] into the note clip, which is a bit tedious.
[00:20:06] But here, something goes wrong with the get step method
[00:20:10] because when I have different note channels,
[00:20:13] let's say note MIDI channel one,
[00:20:15] so a note has for instance, note channel two,
[00:20:19] I can get the right note back into with the get step here.
[00:20:24] This works, but get step reports me this note
[00:20:28] as note channel zero or note channel one,
[00:20:32] which is wrong, but I still get the right note.
[00:20:36] But it says it's the wrong channel.
[00:20:38] And then when I try to set the timbre, the pressure
[00:20:40] and the release velocity, then it doesn't work anymore.
[00:20:43] So I can't set, I receive the right note,
[00:20:46] but you can't set data on it.
[00:20:48] So I guess get step is kind of buggy,
[00:20:53] but other people also reported this with the Java API.
[00:20:59] So it's basically the same there.
[00:21:03] So they pointed me in the right direction
[00:21:05] of using a note observer, which I haven't done yet.
[00:21:08] I probably do it on the weekend.
[00:21:11] So I make this a bit slimmer or a bit better working here.
[00:21:13] This is kind of a workaround.
[00:21:15] So this is why when you select here,
[00:21:18] this note channel count, pressure and timbre
[00:21:25] and release velocity is basically not randomized
[00:21:28] because this is giving me back the wrong information here.
[00:21:33] So that's why this is, and I want to show you this.
[00:21:36] Anyway, not super important, only important for me.
[00:21:40] So you can download this in the description below,
[00:21:42] link is there, just download the whole zip package
[00:21:45] and package it into the controller script directory
[00:21:48] and then have some fun.
[00:21:50] And next week there are coming updates
[00:21:53] to scale maker and chord maker.
[00:21:56] Thanks for watching and see you in the next video.