On the programming side of things, I have always been interested in artificial intelligence, and artificial creativity. I am here, to keep you updated on my progress on building an Artificial Intelligence program that creates dubstep using Ableton Live. Musically, I would love this to be a collaborative effort. So if you have any tips let me know.
First some Terminology I use:
1. Layers: tracks on top of other tracks in certain sections of the song.
2. Drop Melody: High based synths during the drop that compliment it.
So far what I know from making my experience in dubstep is:
Info about dubstep:
1. 140 bpm
2. Drum pattern with kick at beginning of each bar, and snare in the middle.
3. Hats can be brought in after the kick and snare to add more of an impact.
4. A good pattern for dubstep is, intro, buildup (optional), drop (i count the drop as the whole heavy bass section), beat down section, second buildup (optional), second drop, but a bit of a different sound, maybe double time?, then finally the outro.
5. A good dubstep song can start with the drum beat beginning in the intro or the drop, either one works.
6. The drums during the drop are usually different.
7. I repeat my drums after 4 bars, I'm sure this is just personal preference though, and is different for everyone.
8. The intro is usually absent of low end noises, to give the drop more of an impact.
9. The intro usually consists of a melody, and a background chord structure to go along with it.
10. The drop usually consists of a low end wobble, or dirty bass, it can differ from song to song.
11. The low end wobble usually has everything below 100hz cut out.
12. There is a sine wave bass in the drop to replace that 100hz section, with everything above 100hz cut out.
13. The transition from first buildup to drop doesn't need to be clean, it can be immediate (immediate is preferred? im not sure).
14. The transition from Drop to beat down has to be really clean, otherwise it sounds like you have two different songs.
15. The buildups have to have evidence of the intro or beatdown in them (whichever came before it).
16. You want to cover most of the frequencies during a drop in such a way in which it sounds good.
17. Melodies are comprised mainly of synths, or piano sometimes.
18. Ambience is a good tool.
19. repetitvness is good sometimes, but too much is bad (I learned that the hard way).
20. In the drop, it's good to stay on one note for longer periods of times then you would during the melody.
21. During the drop add evidence of the melody in some places.
22. The drop doesnt always have to be super intense or dirty (like brostep).
23. Use compressors with your kick.
24. Use Autofilters.
25. I know all the rules of a buildup, too many to list right now, maybe later when I have time.
26. Doesn't always need structure, could add some sort of non structured option - Nevalo
25. Intro is about 32 bars long. (usually) (so i will add variance) - Nevalo
For now thats all I can think of, and I should move on. Please if you can think of any others, comment, and let me know. I will add it to the list, and put your name next to it to give you credit. (Note, music theory will not go in this list, it will go in the following list).
Now here is my list of what I know about music theory, as you will see. I know little or nothing, and have been getting by pretty luckily with my music. This music theory only applies to dubstep though, so like use of a lot of staccatos. I'm sure its all very similar to other genres.
Music Theory
1. Pick a key and stay in it. (I know this isn't entirely true, but if someone can elaborate, that would be great).
2. Use chords in the key, and in melody, It's common to play each not of a chord separately in fast succession.
3. Don't use only minor or major notes/ chords, switch it up to give the emotion your looking for.
4. Needs sub bass, space, and presence to be at minimum a dubstep song - Nevalo
5. http://www.dummies.com/how-to/content/m ... compo.html - Frizzwah
6. http://www.link.cs.cmu.edu/melody-generator/ - Efrafa11
Please add to this list! I will give you credit. I mainly need things like, which note sounds best after an A in this key... etc. or which chords sound best behind which notes. I also need info about layers, like what layers of music in the intro sound good? I also need a lot of help with the music theory behind the buildups. I also need help with Drop Melodies.
I will now list all the steps I need for completing This program. These steps will start with a very general feel, then get more specific as I tacle each item. When I program, I start out with the layout, or foundation, and get more specific into each area. I also need to know when the ideal time for parts to come in is.
The Task List
0. File Startup of the Song (Not started)
This will set up the Ableton Live 8 file for the song, this is not a priority until I start getting into actually writing parts that will translate what I generate into Live.
1. General layout of the song (Completed)
This will randomly Generate what sections of the song it will need to build, like intro, Buildup (optional), drop, beatdown, second buildup (optional), second drop (double time or not), outro (optional). There will be probabilities assigned to each optional section, to see if it will be generated or not. I will also decide how long, or how many bars each section will be here also, by using probabilities to randomly generate time lengths. I will aslo on top of all of that generate a key for the song to be in, I'm doing research on which keys work best for dubstep. (apparently minor keys work the best, so thats what they will all be)
Completed Notes:
These are the results from 2 of my tests running the script I have so far:
Test One:
Code: Select all
intro Length = 24 bars
buildup one Length = 9 bars
first drop Length = 27 bars
beatdown Length = 20 bars
buildup Two Length = 10 bars
drop Two Length = 24 bars
outro Length = 7 bars
total bars = 121 bars
key = 4 (0=a, 1=b, 2=c, 3=d, 4=e, 5=f, 6=g)
Code: Select all
intro Length = 28 bars
buildup one Length = 8 bars
first drop Length = 22 bars
beatdown Length = 22 bars
buildup Two Length = 6 bars
drop Two Length = 22 bars
outro Length = 6 bars
total bars = 114 bars
key = 0 (0=a, 1=b, 2=c, 3=d, 4=e, 5=f, 6=g)
2. Intro (Completed)
This will generate the Main layout of the intro, It will decide where there will be a background to the melody, and how many layers. It will also decide whether or not a drum will be present at any point during the intro. It will then decide when these parts (including the drum) come in, using probability of what sounds goods and so on and so forth.
Completed Notes:
These are the results from 2 of my tests running the script I have so far:
Test One:
Code: Select all
The following are the lengths, in bars, of all the seperate sections of the songs.
intro Length = 27 bars
buildup one Length = 5 bars
first drop Length = 24 bars
beatdown Length = 24 bars
buildup Two Length = 5 bars
drop Two Length = 21 bars
outro Length = 10 bars
total bars = 116 bars
key = 4 (0=a, 1=b, 2=c, 3=d, 4=e, 5=f, 6=g)
The following are the entrances for the intro, plus the intro loop length, if a value is negative it means it will not be present in the intro.
Musically, everything will loop during the intro every 5 bars
The intro melody will enter at bar number 0
The intro chords will enter at bar number 5
The intro drums will enter at bar number 10
The intro rhythm will enter at bar number 10
Code: Select all
The following are the lengths, in bars, of all the seperate sections of the songs.
intro Length = 20 bars
buildup one Length = 6 bars
first drop Length = 28 bars
beatdown Length = 26 bars
buildup Two Length = 6 bars
drop Two Length = 19 bars
outro Length = 5 bars
total bars = 110 bars
key = 2 (0=a, 1=b, 2=c, 3=d, 4=e, 5=f, 6=g)
The following are the entrances for the intro, plus the intro loop length, if a value is negative it means it will not be present in the intro.
Musically, everything will loop during the intro every 5 bars
The intro melody will enter at bar number 0
The intro chords will enter at bar number 10
The intro drums will enter at bar number 5
The intro rhythm will enter at bar number 5
3. Buildup (Completed)
This will generate the main layout of the buildup. It will decide all of the buildup components, like wooshes, faster drum beats, rising tones, I will need a lot of music theory for this one, any help is appreciated! This section will tackle both buildups, as it will be an algorithm that will take information from either the intro, or beatdown (whichever I choose) and build a buildup based off of that information.
Completed Notes:
These are the results from 2 of my tests running the script I have so far:
Test One:
Code: Select all
The following are the lengths, in bars, of all the seperate sections of the songs.
intro Length = 20 bars
buildup one Length = 11 bars
first drop Length = 24 bars
beatdown Length = 23 bars
buildup Two Length = 0 bars
drop Two Length = 28 bars
outro Length = 10 bars
total bars = 116 bars
key = 0 (0=a, 1=b, 2=c, 3=d, 4=e, 5=f, 6=g)
The following are the entrances for the intro, plus the intro loop length, if a value is negative it means it will not be present in the intro.
Musically, everything will loop during the intro every 4 bars
The intro melody will enter at bar number 8
The intro chords will enter at bar number 0
The intro drums will enter at bar number 8
The intro rhythm will enter at bar number -1
The following are the conditions for buildup number one.
Will there be a buildup Woosh?: false
Will there be chords present in the buildup?: false
Will there be a one bar repeating melody?: false
Will there be a two bar repeating melody?: true
Will the drums be autofiltered?: true
Buildup two is not present in this song.
Code: Select all
The following are the lengths, in bars, of all the seperate sections of the songs.
intro Length = 21 bars
buildup one Length = 5 bars
first drop Length = 22 bars
beatdown Length = 26 bars
buildup Two Length = 9 bars
drop Two Length = 18 bars
outro Length = 11 bars
total bars = 112 bars
key = 0 (0=a, 1=b, 2=c, 3=d, 4=e, 5=f, 6=g)
The following are the entrances for the intro, plus the intro loop length, if a value is negative it means it will not be present in the intro.
Musically, everything will loop during the intro every 3 bars
The intro melody will enter at bar number 3
The intro chords will enter at bar number 0
The intro drums will enter at bar number 9
The intro rhythm will enter at bar number -1
The following are the conditions for buildup number one.
Will there be a buildup Woosh?: false
Will there be chords present in the buildup?: true
Will there be a one bar repeating melody?: true
Will there be a two bar repeating melody?: false
Will the drums be autofiltered?: true
The following are the conditions for buildup number two. (identical to number one, if number one is present)
Will there be a buildup Woosh?: false
Will there be chords present in the buildup?: true
Will there be a one bar repeating melody?: true
Will there be a two bar repeating melody?: false
Will the drums be autofiltered?: true
4. Drop 1 (Started)
This will generate a drop, it will decide placement of everything. In this general level, it will just specify how many layers there will be, and where they all come in. And it will also generate a brand new drum beat to go along with the drop.
5. Beatdown (Not started)
This will generate a beatdown section similar to the melody, in fact, a lot of the components of this part of the song will be based on what is generated from the melody. It will also need to take info from the drop in order to create a smooth transition. In this general level it will just place everything in similar order to the intro, and not add any new sounds into it.
6. Drop 2 (Not started)
Since the second buildup was covered with the first one, I don't need to program anything for it, so we will go straight onto the second drop. The second drop will use all the info from the first drop. Since I start on a general level, I'm thinking it will be the exact same, but only layout wise. Maybe a few different things. All the difference will come into play once we start looking deeper into the drop, and not so broadly.
7. Outro (Not started)
This can be as simple as just another buildup into nothing, or have another beatdown, but slowly trickle everything out. As there is a few possibilities for an outro, it will randomly pick one, and then lay everything out according to the rules of the option it picked.
8. Intro - Drum Beat (Not started)
Now that we have described the general layout of the song, we can start getting into details. This will randomly select a kick, a snare, and hats from a list of samples I will give it. It will then create a pattern following a set of rules. Each drum beat will be different every time you generate it, it will have different samples, and patterns, but always follow the basic rule of Kick at beginning of bar, and Snare in the middle.
9. Intro - Chords (Not started)
The next step is chords. It will pick an instrument, (or create its own if i get that deep into it) and create a chord progression based on the music theory rules (which hopefully I will have enough by the time of starting to make this to actually make it). It will randomly choose a synth, or create one, if I program that method in.
10. Intro - Melody (Not started)
The next step is the melody, which will be based off of the chord progression, and will be played at the same time as the chords. I will use the chord progression as a base, and use music theory to create a nice rhythm and variance of notes. But not too crazy, as I want it kind of repetitive at some point as not to distract from the rest of the song. It will randomly choose a synth, or create one, if I program that method in.
11. Intro - Other Layers (Not started)
I'm not sure about this yet, if I figure out what I will do here, I will replace this text.
12. Buildup - Drum (Not started)
This won't be much of a beat as much as it's a kick drum getting faster and faster, pretty simple.
13. Buildup - Chords (Not started)
The chords will still follow the general chord progression to some degree, but be rising in tone. It will also be auto filtered.
14. Buildup - Melody (Not started)
This melody will have a rhythm pattern that can be repeated quickly, and the actual notes will go off of the chord progression chosen during the buildup, this might or might not be auto filtered (it's the computers choice).
15. Buildup - Other Layers (Not started)
Other layers in the buildup could be ambiance, or risers. As I learn more about how to use them with certain melodies and such, I will post more.
16. Drop 1 - Drum Beat (Not started)
The drum beat for the drop will be similar, but a lot crazier, or in some cases, less crazier. It depends, and as I learn about music theory for dubstep, I will post more info.
17. Drop 1 - Main Wobble (Not started)
For now, this AI will only only have one wobble. Once I finish the program, I will add more wobbles. Anyways, it will choose the note/ notes based on the key. And it will create a rhythm, that matches up with the bpm, so it sounds nice. It will either choose from premade wobbles, or create it's own from massive if I teach it to. (program it in).
18. Drop 1 - Bass (Not started)
This will match the chord progression to some extent, it will not wobble. But it will be a sine wave with some modulation.
19. Drop 1 - Drop Melody (Not started)
I know not every dubstep song does not have a drop melody, but most do. I have always had trouble with it, so if I could have help with understanding it, that would be good! It would randomly choose a synth, or like I said before, create one.
20. Beatdown - Transition (Not started)
This will take information from the drop, and add it into the beginning of the beat down to create a nice flow from drop to beatdown section.
21. Beatdown - The rest (Not started)
It will take all the info from the intro, and apply it to the beatdown, and of course change a few things, make it longer, and add a few compressers or auto filters here and there.
22. Drop 2 - The second drop (Not started)
It will take all the info from the first drop, apply it to the second one, and switch it up a bit so its not a complete repition. I will switch it up based on what people tell me here, and what I find out/ already know.
23. Outro - The outro (Not started)
These last steps are simple, pretty much one step. It will take info from the beat down, or buildup, depending on which kind of outro it's doing, and apply it to the outro, switching things up so it sounds like the sound is ending.
24. Applying it all to Live (Not started)
This is the tast which is most daunting. I have to program a whole script to move the mouse and click on things in live and write the midi notes etc.. based on the song it made. This is much harder than it seems, as you need to take many things into account, like the current state of live and such. I'm not sure whether I will move the mouse to positions based on coordinates or image recognition of buttons and things. When I have done stuff like this in the past I always used coordinates.
Well That is all of the steps that I can think of! If I think of more I will add it of course. Any input musically would be an amazing help, as I know there are a lot of musically talented people in this forum. Anyone that helps will get credit on the program and in this forum.
For anyone that thinks this is immoral, and computers shouldn't do this or that etc etc... I am doing this to number one, be a challenge to myself, number two, understand human creativity more and how and where things come from. Number three, I will not sell any of the music it makes, but give it all away for free. Plus I'm sure they won't be really all that good. But who knows. If people say this is impossible, it is not, it has been done with other genres of music, like classical, which is much harder music theory wise than dubstep. If people are thinking, how can a computer make music without putting emotion into it. The songs that its making does have emotion, because the rules that it follows (will follow), were made by artists who do make songs emotionally, and have created these rules based on emotions, and what sounds best in their music. So the computer is taking the emotion from all the artists that input rules, and put it into the music, It's kind of like a middle man.
Well thanks for reading! I will post youtube updates, and of course update this page a lot! Please help by inputing your knowledge! And if you think something is wrong, feel free to say it, but don't unless you have a solution to fix it.
Thanks!
- Salfa