Flexible drop timings
The nature of an interactive installation such as the Dropship means that your creation is at the mercy of the public. Whatever preconceptions you have for how people will use and abuse it may occur some of the time, but mostly, people are going to find their own weird and wonderful methods to enjoy your work. With only two cranks and a button for people to interact with, our recipients have limited options, however one important factor is completely down to the burners - when they press the Drop button.
As mentioned in the previous post, the moments just before the Drop are really important for creating a big juicy, ground-shaking "PPHHHWWWOOOOOOOAAAAAARRRRRR!!!!" (technical term) effect, or, as Ned Stark correctly puts it
The Drop must be carefully crafted for maximum impact, yet we want the Drop button to be immediately responsive to when people push it so that they feel completely in control. If someone presses the button literally milliseconds before the beginning of a two-bar phrase, we want to hear the drop immediately. But what if the button is pressed two or three beats before the next convenient time to drop the beat? Clearly, we need something to occur immediately, but for the actual drop to only happen when it makes most musical sense. Here are a few of the Drop options that people have, meaning that they can press the button at any time and still have the beat rock in on a solid beat 1.
Up All Night and Day and Night and Day and Night Forever
Last weekend I was at MIDIHACK in Stockholm and met David Whiting, a data engineer at Spotify. For David's hack, he made an absolutely bad-ass algorithmic minimal techno machine in Scala. Here are a couple of excerpts:
Excerpt #1 // Excerpt #2
With David's permission, I'm going to recreate some of his techniques in Pure data and hook them up to our real time synths and drums. Boom! The Dropship now support minimal techno!
As I always like to do with big projects, I’ve started by covering a lot of the various elements in a small amount of detail, so as to better understand how the various components will work together, and identifying which will take the most amount of time so I know what to prioritise.
So far, I’ve set-up some basic elements for the following aspects of the Dropship:
- generative kick-drum rhythms
- generative bass melodies
- 4/4 and 12/8 time signatures
- random snare and hi-hat loops
- high-quality bass sound synthesis
- wavetable synthesis and recreating aspects of NI’s Massive plug-in
- build-up styles
- sample-synths (i.e. synths based on melodic one-shot samples such as a piano)
- synthesised effects (so far only sirens and atmospheric effects)
As I’ve said before, a dubstep Drop is only as good as the build-up before it, and, even more specifically, the 4 beats immediately before the drop are of huge importance. @kasima found this great page of Vines of exactly this moment.
These often feature a spoken word or phrase and/or a complete drop-out of all other instruments for maximum dramatic effect. This key element of the structure will help shape everything that comes before and after it so that’s going to be next on my hit-list. Then I’ll return to the melodies that the Drop bass plays, and then the quality and variation of the bass sound, itself.
In the meantime, here’s a little explanation and some Pd extracts for each of the elements that I’ve set-up, already.
Generative kick-drum rhythms
I started off by writing kick-drum patterns into tables, with the x-axis being the beat within the bar i.e. 1-16, and the y-axis being the complexity-threshold that that beat should occur above. The complexity threshold is a number from 1 to 7, with 1 being sparse, and 7 being most complex, and is set at random every time a new track is generated.
So, for example, kick-drums should occur on beat 1 at any complexity, so it has a complexity threshold of 1, whereas kick-drums on beats 4, 5 and 7 should only occur when the complexity threshold is higher, so they have a threshold of 5 or 6, perhaps. The good thing about this technique is that, because I input the patterns in the first place, it offers a lot of flexibility while still guaranteeing that the patterns always sound musical.
Generative bass melodies
In many genres, bass melodies are often repeated over the course of a few bars, so I’ve created a little sub-patch which generates a random string of numbers that can be read through multiple times.
Furthermore, in the case of dubstep, many bass lines only feature a few different notes, so I’ve chosen an approach which simply switches between three intervals relative to the root note. The message box just above the outlet on the right increases from 1 to 16 (beats of the bar) and queries the list to output the Nth item of that list, resulting in the string of 0s, 1s and 2s (corresponding to our three note options).
The notes that the note options actually correspond to are also chosen at random from a range of options. Here, the sets of numbers in the message boxes are in semi-tones, so the first note option is the root note, the second note option is two semi-tones higher, and the third option is three semi-tones higher. In the last message box, we have the options of one semi-tone below the root note, then the root note, and then three semi-tones above the root note.
Lastly, to prevent just a constantly changing string of bass notes, the resulting note value of the above two processes is actually only used if there is a kick-drum hit during that beat, which helps keep the bass and kick nicely synchronized.
We also re-use the repeating sequence trick for the rate of the wobble/tremolo for the bass, except with the wobbles we have four potential settings so it generates numbers from 0-3 rather than 0-2.
Here’s the whole chunk dealing with note-choice, tonality and wobble rate for the bass:
Swung-4/4 and 12/8 time signatures
There are some great examples of dubstep in swung-4/4 or 12/8 time-signatures and luckily it wasn’t too tricky to implement. It is, however, a bit of a distraction from the main aim at the moment so I’ve not gone into it further than just making it work for the drums and bass i.e. in order to make it useable in production, I would have to vet and include a bunch of snare/hi-hat loops in 12/8 and make sure we were always getting loops from the right bank - admittedly not a huge amount of work, so hopefully there will be time…
Implementing swung-4/4 was pretty easy - just delay the even-numbered beats by a small amount relative to the bpm of the track and Bob’s your father’s brother.
12/8 was slightly trickier, especially as I didn’t want to have to re-write all of the bass-drum rhythms specially for a different time-signature.
In the end, I basically ended up skipping the third semi-quaver in every group of four, and then spacing the remaining 12 beats out equally over the same time-period. Figuring out where to add the extra ticks for the offset took a bit of headscratching, but in the end it meant that all of the original bass-drum-rhythms would work out of the box.
Random snare and hi-hat loops
Dubstep snares are almost always simply on the back-beat i.e. 2 and 4 in the bar. I started out by getting a bunch of one-shot snares and playing them back, and that worked well enough. Hi-hat patterns tend to be a lot more complex, however, and they often interact with the snare rhythms a lot, so I decided to get a bunch of pre-made snare and hi-hat loops involved. This worked really well becuase, even with just 10 or so loops, when combined with the generative kick sound and rhythms you can still get a lot of variation. The effects and processing on the loops are still going to be done in realtime.
High-quality bass sound synthesis
What good is obnoxious dubstep without massive, dirty, filthy, disgusting bass sounds that literally make you screw your face and want to throw up? Exactly. The undisputed king of all things dubstep bass synth, when it comes to the world of synthesis, is Native Instruments’ MASSIVE. I met some people from Native a while back and they boldly claimed that their plug-in effectively shaped the whole sound of modern dubstep, and I think any producer would struggle to disagree.
I looked to MASSIVE for inspiration, and have ended up copying certain chunks of it’s functionality, as best as I can, in Pd. Simply playing around with the plug-in, watching some really great YouTube videos of people designing presets and sounds, and, of course, reading the manual, has really impressed upon me just how sophisticated this piece of software really is.
At its core, MASSIVE is a wavetable synthesiser, meaning that each of its oscillator sections actually generates audio by looping and scrubbing through table representations of single-cycle waveforms. Simple enough, right? Play back a wavetable of a sinewave at 440Hz and you’ll hear a sinewave at 440Hz. That example could be easily enough recreated with realtime synthesis, however with wavetables, you can just as easily be reading through a very complex waveform such as this:
, allowing you to get really rich, interesting sounds without having to figure out how to actually generate such waveforms in realtime.
I’m struggling not to go into loads of details about how MASSIVE works, which I may either do in a separate post, or just link you to the MASSIVE manual, which makes for fascinating reading if you’re into this kind of stuff. I also came across this awesome website (where I grabbed the above wavetable images from), which lists all of the wavetables along with their transformations when using the Wavetable-position knob in the oscillator section - the other absolute weapon in MASSIVE’s armoury.
I’m going to leave the deep-dive into recreating some of the MASSIVE sounds for a separate post, as it’s quite extensive and I’d like to improve it a bit more before explaining it. I can already tell that I won’t be able to recreate the sound exactly, but even my imitation of the methods and signal flow have already given me a lot of interesting and high-quality sounds to play with. For now, however, have a look at this little video of some growly sounds produced so far:
As I keep repeating, a big drop generally needs a big build-up to maximise its impact. I’ve done some analysis of build-ups in dubstep tracks and they often feature common tropes. I aim to have a bank of build-up styles in the patch that can be chosen at random. For the moment, I’ve implemented the sequence of events found in this Bassnectar tune.
Each instrument has a set of instructions to follow for the build-up range of 0-1. The nice things about this system is that you can let it gradually ebb back down to its natural state if the track doesn’t drop, for whatever reason.
I grabbed some samples of a piano and implemented them as a sample-synth so we can have high-quality 'real' sounds. This will work great for pianos, strings and brass instruments.
There's also a bit a of real-time synthesis for the backround atmospheric effects (although I’m not too keen on them at the moment - basically just filtered noise and delay), and turned to Andy Farnell’s bible on procedural audio, Designing Sound, to create the lovely siren sounds you can hear in the video above. Hopefully there will be room for some more synthesised elements in the Dropship.
More as I have it...
So, I thought it high time to share some thoughts on how the musical side of this project is coming together. After all, we need some drops to ship, right?
My aim within the Dropship is to create a generative music system that will constantly churn out fresh beats for literally as long as you care to listen. When you turn the cranks, the music should build naturally and seamlessly towards a dizzying frenzy that feels like it’s constantly rising without ever quite reaching climax. Finally when you smash the Drop button, the music should deliver the pay-off you’ve been working for with enough gut-inverting, booty-shaking decibels to make your bike’s inner-tube burst. After a few progressions of the post-drop beats, the music should gently and naturally decay down to a more relaxed state, from where the cycle begins again.
During the build-up phase, if our potential drop-recipients stop turning the cranks, the music should gently decay back down to it’s pre-build state. However, at some point during the build-up phase, the music will have reached a sufficiently cacophonous state to warrant the drop, and the Drop button will light up. This is ‘Drop Mode’, which should feel like an extension of the build-up, where the music infinitely shifts up in tone, until the Drop button is pressed. The Drop Mode allows people to ready themselves for the drop without being preoccupied with the cranks, and it also allows us to better quantize the event so that it definitely occurs at an effective point in the musical loop.
It seems to me that the most challenging part of this project will be to program enough generative possibilities to ensure that the music doesn’t get too repetitive over time. To aid this, we need to address the range of genres and musical styles that the Dropship will accommodate, the balance between real-time synthesis and loop playback, and the addition of any extra tricks and techniques we can employ to add variety.
The main genres will be dubstep and house, but really, it could be anything with a loud and obnoxious drop. Drum and bass also works well, and when it comes to the pre-build section of the structure, we could be listening to anything from dub and reggae through to baroque (seriously).
Synthesis vs. samples
Clearly it’s not feasible to simply playback loops of all the drops that we want to hear coming from the Dropship, so if we want to have a wide variety of genres, styles and sounds we’re going to have to indulge in quite a lot of realtime algorithmic composition. This means that no melodies, drum patterns or instrument combinations are absolutely hard-coded - rather, the algorithm contains sets of parameters within which thousands of permutations of these elements can exist.
For main melodic instruments such as basses and synths we’ll need to be doing realtime synthesis, rather than relying on pre-produced loops, as this allows us ultimate flexibility in terms of melody, structure and effects processing.
Furthermore, individual one-shot drum samples, sample-synths and vocal snippets will sit alongside synthesised elements to ensure that we have the highest production quality sound available. Extra processing and effects will also be layered on to these sampled sounds in realtime to add yet more stylistic range.
Once we’ve got a range of generative content in the system, we can start assigning their parameters to various external influences such as time of day, elapsed time and day of the week. This means that we could specify that, for example, dub pre-build sections only occur between the hours of midday and 3pm, and perhaps only on Sunday. Certain genres could appear at any time of day or week, but only appear when the Dropship has been roaming the playa for over 8 consecutive hours. These restrictions will guarantee a certain level of variety throughout the multiple days of BM.
We can also make the musical mood change at significant times like sunrise, midday and sunset, making the patch reactive to its environment.
Will be back with some more specific examples of how the patch is coming along, soon...
Our sound system has arrived. Rauri has put together a fine menu for us. It starts with a couple high-efficency class-D car amplifiers to squeeze the most sound out of our little 2000 watt generator. It's followed by four 12" full range cones. For the main, we have four 15" woofers. We finish with four 2" tweeters.
We have no idea how we're going to fit all this awesome into one hand drawn cart.
We ran into a small wrinkle with power. Turns out, our generator can only put out about 96 watts at 12VDC. We can only get the full 2000 watts on the 120VAC line. There isn't an obvious way to turn high voltage, low current power into low voltage, high current power. This thing would burn out your average 12VDC adapter as soon as you whispered, "Trunk Musik."
So what else runs in homes on low current and high power? I'm looking at you, nerds. That's right, high-end computer graphics cards. Making sweat bead off the forehead of your Navy SEAL in Call of Duty takes the same kind of power as making your car windows wobble from Tipper. We got 850 watt computer PSUs and soldered all the 12VDC lines together to get the amperes we needed.
It'll be fiiiiiine.