Here I wanted to cover the design philosophy and the process I used when making the VCV Rack Drums sound engine.
Nowadays you can have any drum sound you want. Probably the simplest way of getting that sound is by using samples. I used to accumulate samples, some by buying sample packs or getting them from magazines like Computer Music. But I have to admit that I'm terrible at organizing samples. Therefore, finding "the sound" was a complicated process of scrolling through my catalog and previewing each drum. At some point I stopped using samples and I moved them out of my main hard drive (because I needed space). Then I tried a few soft synths to generate my percussion sounds. However, some of the synths I tried had so many options that my search consisted of scrolling the presets.
At some point I decided to just use one of the drum synths I had and roll with it. Instead of scrolling presets, I tried to make it sound the way I wanted.
Drums with charm
If you like synthesizers and drums, it is hard to avoid the king of drum machines: Roland. As part of my DIY explorations, I stumbled upon the schematic of the 909 kick drum and I tried to build one. Since I didn't have the components necessary, I made a basic simulation model and ran the code in one of the Eurorack modules I made using a Teensy 3.2 board.
As I kept digging deeper into the electronics of the Roland drum machines I found that these electronic circuits have a lot of "charm" (a trait that fascinates, allures or delights). Not only the electronics are interesting, but they are a lot of fun to play with. By performing a few modifications, the circuits found in the 606, 808 and 909 can produce a wide variety of sounds.
When I started making modules for VCV Racks I tried to preserve that "charm". The result of my drum explorations is reflected into Trummor 2 and Knock. These two drum synthesizers are not by any means clones of the Roland drum machines, but the individual blocks are inspired by the behavior of those analog circuits.
One day I got contacted by Andrew Belt offering me the possibility of designing the sound engine behind the VCV Rack Drums collection. If you are reading this you already know that. But you may not know how much it took to get the final results.
It took me almost a year and during that period I built over 15 prototypes, including PCBs, breadboard circuits and even a full drum machine. During this period, since I didn't want to reveal that I was working on this, I made very few post trying to not show much.
The design philosophy
As with most of the projects that I work on, my initial step is to establish a design philosophy. Having a philosophy helps me take decisions on the different aspects of the project. For example, if the philosophy is "making a monstrous machine" then I know that any solution that leads to simplicity is out of the scope. These are some of the ideas that I defined for the drums:
- they must have the analog "charm".
- the internals must have the constrains found on the electronics of the era.
- the controls must be simple but effective.
- they don't need to sound identical but they must sound great.
I wanted to make the (homemade) drum machine that I would have created in the 80's.
I used a very similar approach to what I do when modeling any other circuit or system: build it, model it, improve it, optimize it.
Modeling Analog Drums
My first step was trying to find if I could get hold of DIY or open source/hardware versions of the different drum modules. I found commercial PCBs for the Kick, Snare, Clap and Rim. They are from a manufacturer that I don't know if wants to be mentioned. But if you look for 909 PCBs (or pay attention to the pictures) you may find them. These modules are analog. I attached a bunch of test points in order to measure as many signals as possible.
Once I took the measurements I followed my usual procedure of creating a simulation model and run tests on it in order to listen to the impact of the different abstraction levels of the components. In the picture below you can see the noise section of the Snare drum including a detailed view of the noise filters.
In this specific case, the filter consists of a passive DC blocker (HP) and two Sallen-Key filters, one LP and one HP. Once I have validated the simulation models, I turn them into optimized code that can run in VCV Rack. I have shown the detailed steps I follow when modeling linear filters in my blog post on the Wolfram Blog and also on 6the coding streams on my YouTube Channel
One interesting thing I found when building the analog circuits was that the 909 uses the same structure of oscillator for most of the drums but each oscillator sounds slightly different. Apart from the obvious changes in the tuning, the oscillators have different harmonic content due to the small differences in the components used. These oscillators produce triangle waves that are run through a nonlinear stage (two diodes) in order to shape those triangles into something closer to sine waves. If the triangle waves have a small DC offset the clipping will be different. In the following picture you can see the waveforms of two oscillators that use exactly the same components.
My models need to be able of capturing these small imperfections in case their impact is relevant to the sound. This kind of behaviors can only be noticed when building multiple instances of the same circuit.
Other issue I found when building these modules was that the noise generation part uses an obsolete IC (a shift register). Fortunately, it was easy to figure out the logic behind the pseudo random number generator and build an equivalent. In my case, I used an ATTiny85 and wrote an algorithm performing the same operation. Eventually, I ordered the obsolete ICs and some months later they arrived.
By the time I got the obsolete ICs, I already had a smaller SMD version of the noise generator that I could use in other modules.
For all other drums, I designed PCBs and added a bunch of test points in order to take the measurements. The board shown below is the one used for the Low, Mid and High toms. This was a quick prototype. You may see that the components are all spread around. I did it that way so it was easy to route.
The model I made for the Toms is the one that differs the most from the 909 sound. The main reason is that I don't like very much the 909 Tom sound. Once I had the initial (accurate) model, I started modding it until I got something that I liked. The result is a drums sound that can be dialed to be somewhat realistic but also dialed to be synthetic.
My initial plan was to model only the 909 sounds, but at the same time I started analyzing the 808 drums. The first one I made was the kick drum because is a simple and fun circuit to model. I did a few small modifications. I'm planning to write a detailed analysis of the 808 kick drum in the future. Stay tuned.
The remaining sounds are the cymbals, which in the 909 are not fully analog.
The cymbals in the 909 are in fact samples. These samples are stored in a ROM and they are played back when the sound is triggered. It would have been very easy for me to replicate the analog part of the circuit and use a copy of the original samples in order to match the sound. Since I don't know the legality of using these samples, I didn't want to do that. The second easy approach I could have implemented was to take any other samples and use those instead. But at the end I decided on a different approach: creating a simple synthesis engine that uses less memory than a sample.
I got myself in a bit of trouble here because of my rule of "the internals must have the constrains found on the electronics of the era". This forced me to think on designing a hybrid synthesis engine consisting on noise generation, analog filters and envelopes, and a sparkle of physical modeling.
My cymbal synthesis engine consist of two sections: the impulse and the ringing generators. The impulse generator is responsible for the initial hit of the sound. The ringing generator is responsible to create the metallic sound of the cymbal. Since I wanted to make the sounds somewhat realistic, I got a few public domain samples from freesound.org and run them through my analysis algorithms. From the original sounds I extract the parameters to generate sounds containing (an approximate) frequency content of the initial hit and the ringing part. This resulted in a chunk of data of about 16kB of data size. Using that data I perform the resynthesis of the cymbals. Basically, the data tells me the frequency content of the hit and ringing. Along these two oscillators I used the envelopes and VCAs I modeled for the analog drums.
My final prototype consisted of a simple microcontroller board that can synthesize both the cymbals and the analog drums.
Making a full 808
After doing all this work I got excited and decided that I was going to build a full drum machine. When I was doing the research, I found about the Yocto and Nava projects by http://www.e-licktronic.com I got one and carefully started building it.
It took me several days to assemble but at the end everything worked on the first power on. Drums are very interesting for me and there exists a wide variety of cool circuits to try.
I have a few ideas on circuits I could design using interesting analog resonators and small digital sections. But maybe you (or myself) are tired of drums sounds. If not, there's the possibility of a Trummor 3(?)
This was a very fun and long project where I learned a lot of new things. I tried to stick as close as possible with the design philosophy I defined at the beginning. Even when you can have any drum sound in the world, I believe that my models will be interesting for you. I tried to keep and improve the charm of the analog drums. The cymbals use little resources and hit a good compromise between realistic and synthesized sound. Even when these modules have a reduced number of controls I feel like they can provide an interesting variety of sounds.
These drums will feel familiar but also unique.