I included this project as it was a little bit different from all the others. This one, in particular, was something that myself and 3 others constructed as part of our final project for the CS3220: Digital Audio and Applications module of 3rd year. Now I, personally, know very little about music theory, so when it came time to select a project of our own choosing, my best contribution was to continue on with the work that we’d been doing previously on speech modulation. Thankfully, however, in my team were two rather experienced musicians, who both agreed upon the idea of a procedural walking bassline. I, of course, had absolutely no idea what this meant so, after much research, I ultimately agreed on the idea and we began drafting plans for how to approach developing such a concept through the use of the Pure Data visual programming language.
Due to the nature of Pure Data as a Visual programming language, we were able to make a User Interface directly within the language itself (as you can see in the main.pd window in the GIF above) to abstract out all of the complicated procedures that must take place in the background. It is worth noting, before we continue, that as the concept of a walking bassline is more-or-less compatible with every instrument in existence (and we only had a few weeks) we opted to follow the “12-bar blues” chord progression format.
Anyway, once the user reaches this UI, they have a number of options available to them:
- Volume/Amplitude: Obviously the user will not hear any music if this slider is left on 0, as it’s default.
- Tempo: The tempo at which the notes will follow, which can be anywhere from 60 to 180bpm
- Chord: This represents which chord the generation will start from, and thereafter, acts as an interface to show which chord the generator is now on (if no chord is selected, the generator simply selects one at random).
- Phasor: This option, which is deselected by default, alternates how the notes are generated, whether that be through a rather complicated ADSR envelope with numerous filters, which will result in a fairly natural sounding bass guitar, or, instead, have the notes simply produced through the use of sawtooth waves
(I heavily recommend the former).
- Play: As you might expect, this begins or pauses the music generation.
- Fret Board: Here you can see a visual representation of what note is currently being played on our bass guitar
- Finally, for the sake of posterity, below this interface, we have also included links to all of the other patches (or source code files) that are included within this project and can be opened and viewed at any time simply by clicking on them
As one final deliverable, we decided to implement the ability for the user to use their keyboard to play the bass guitar, if they so desired. While not necessarily nearly as technically complicated as the rest of the project, we decided we should take advantage of the remainder of the time that we had until the project deadline, which came about as a result of us under-estimating quite how quickly we would progress with the assignment.
This project taught me a lot about musical theory, not just that of walking basslines, but how notes compliment one another more generally. I also learnt a great deal about procedural music generation, something which, since then, I have been incredibly excited to fit into to a future project of mine. A link to the final Pd project can be found here: WJSW.xyz/RHUL-CS_Walking_Bassline.
(Although be warned, GitHub cannot parse .pd files, so you’ll need to pull it and subsequently open it within PureData yourself to be able to see the ‘visual’ element of this visual programming language)