Well, it's been way too long since the last music post, so here's a big one! The system has made a lot of progress over the last two months, and it's great to hear how well the Dropship went down at Priceless, especially when there are still a lot of improvements yet to be made. Every section of the patch has received attention since the last post, so I'll go through them in sequence, starting with the ambient section in this post.
The ambient section (a.k.a. pre-build-up) is probably going to be heard for the longest period of time on the Playa, and therefore needs a lot of variety packed into it. Stylistically, 140BPM can allow for some interesting genre mixes including moody electronic sounds (e.g. Objekt), dub/reggae-inspired smoothness (e.g. Brookes Brothers), generic vocal-driven dubstep (e.g. Zomboy), and even rhythms so simple and sparse that they act solely as a vehicle to get to the drop (e.g. Bassnectar).
The ambient section currently sounds a bit like a mixture of the first and last options and currently consists of four simple elements - keys/piano, bass, drums and vocals. Let's have a look at these each in more detail, as well as looking at how the arrangement currently works. Here's an excerpt of the current patch to listen to while you read...
Keys and bass
As discussed in previous posts, some musical elements are better off being imported as static assets rather than generated completely procedurally. One such element I believe is the style in which the keys and bass play their parts i.e. for the keys, are there simple stabs on the off-beat, or a more spread out arpeggiated pattern? For the bass, is it simply playing the root-note every quaver, or is doing more of a walking syncopated bassline? MIDI files are great for this as they can be quickly and easily authored in any DAW. The patch now reads from a bank of MIDI files which all define how the chords and bass can play their parts. But we don't want to bake the actual chord sequence in to the MIDI file, as then we would need a different MIDI file for each combination of chord sequence and playback style. Therefore, the MIDI files are written completely independently of the chord sequence. In actual fact, they are all written in C major, and this note information is transposed into the different chords of the desired chord sequence procedurally.
There are a number of products in existence which will produce chord sequences procedurally, such as the excellent Liquid Notes. Sadly, however, my knowledge of music theory simply isn't up to the task of recreating such a system, and with no obvious way of tapping into the underlying logic of any existing software packages, I needed a different approach.
The principle in use is that of combining MIDI files with chord sequences on the fly. MIDI files provide the rhythmic information for how the instrument should be played, including velocity, and when it should move on to the next chord in the sequence, but are completely independent of which chords are actually being played. The chord sequences are stored separately in text files, and provide the harmonic information for the MIDI files to be transposed into. This means that with a relatively small amount of different MIDI files and chord sequences, a huge amount of permutations are possible. Furthermore it becomes a very easy system to expand, with small additions causing exponentially large gains in variety.
Each chord consists of its root note and a mode e.g. root note = A, mode = major/Ionian. Each mode has a list of intervals associated with it, so Ionian (major) consists of intervals 0, 2, 4, 5, 7, 9, 11, whereas Lydian (major7#11) consists of intervals 0, 2, 4, 6, 7, 9, 11. These intervals are stored as tables in Pd and the relevant one is referenced whenever the current chord changes.
The process from separate chords and MIDI files to final MIDI note sequence that is fed into the synths is the following: 1. Notes from a randomly selected MIDI file are converted into a 'keyless' format from their original key of C major, so that only the scale interval information remains. Now we have intervals of the scale, rather than notes per se 2. Each interval is referenced against the current mode table and transposed to the target note 3. The chord is transposed into the right key, rejoined with its original velocity information, and fed into the synth
The MIDI file also contains information for when to move onto the next chord in the sequence. This comes in the form of a MIDI note 127. Some MIDI files progress the chord every bar, some only ever let the first chord happen (i.e. no note 127s), and a few keep the first chord in the sequence going right till the fourth bar, at which point it fires three quick note 127s to skip to the last chord in the sequence for the last bar.
The above process of joining MIDI files and chord sequences is exactly repeated for the bass, except the current chord is slaved to whichever one is defined by the piano i.e. there are no note 127s in the bass midi files.
Full credit for the implementation of this system goes to Pd demon, Mr. Joe White.
Comparatively simply, the drum engine for the ambient section is basically identical to that of the drop. Randomly selected snare and hi-hat loops, layered with some procedural hi-hats and ride cymbals, and generatively produced extra kick and snare rhythms. Jobs a good'n.
Adding vocals to the ambient section has really helped take the feeling of the music to a higher level. For obvious reasons, they add a really human element to what can otherwise sound very clinical. Vocals were taken from various acapella sites, nudged into 140BPM using Ableton and transposed wherever needed into C or F so that it would work over the current chord sequences. Shout out to our intern, Jack, who helped with a lot of that work!
We've now got quite a few elements to play with in the ambient section, so finding an interesting way of making their arrangement fluid and flexible was next. Essentially, the ambient section is on a loop of 88 bars, with a different musical event happening every 8 bars. An event could be something like introducing a new instrument, taking one away, or triggering an automation curve on an effect etc. Some events will trigger the same action every time e.g. the 7th event always triggers the breakdown, where the kick, snare, drum loop and hi-hats are switched off, whereas other events are grouped and trigger the same group of events every time, but in a random order. This is demonstrated on the left-most tree of objects here, labelled INTRO. This guarantees that these three events will happen on event 1, 2, and 3 (a new drum-loop being chosen and activated, a new bass file being chosen and activated and a new chord file being chosen and activated), but their order is randomised by the [c_urn] object.
The vocals are split into two types - shorter intro phrases (random-starting-vox), and longer verse-like (random-verse-vox) files.
We get a new chord sequence every two whole cycles i.e. 176 bars, so there is some consistency across the changing chord and bass lines half the time, and it also makes the limited number of chord sequences go further before needing to repeat them.
Finally, in this patch we also handle the dropouts of various instruments which happen every 8 bars. It's surprising to hear just how much of a boost these give to the arrangement, and makes it all flow better. Again, we're choosing a random instrument to drop-out (either all the drums, just the snare/hi-hat loop, or just the bass), and a random length to drop it out for e.g. 2 bars, 1 bar, 2 beats etc.
Instrumentation and next steps
As you can hear, there isn't a huge amount of variety in the actual instrumentation of these elements. It's always the same synth and bass sounds (simple sine wave synths at the moment), so with that alone there is a lot of scope to add variety. Piano, organ, guitar sounds etc. are all on the hit-list. Furthermore, there isn't much extra production going on in terms of effects. Despite this, this ambient system does churn out lots of perfectly listenable music. The structure of the patch is all ready to go now, so adding layers of interest should just be a case of adding more options for each individual element e.g. chord sounds, build-up effects, vocal samples etc.