Generating Synthesised Drums and Percussion in Linux using Yoshimi or ZynAddSubFX

“The kick drum of the 808 is little more than a bridged T-network sine oscillator, a low-pass filter and a VCA”

“All drums except for the hi-hats and cymbals are synthetically generated; there is an oscillator circuit with a dedicated filter and envelope curve.

(If you doubt that digital synthesis can produce an identical sound to an analogue circuit then watch this video by someone who knows what they are talking about).

Skip to the tutorial/guide if you think you know your stuff (are you a sound Guru?). But I’d recommend reading the preamble as it gives a good background to what we are doing in Yoshimi.


The drum. A simple instrument. Usually made of some kind of cylinder container, open at both ends with a skin stretched over one of its ends. If you have ever heard anyone playing a Djemba, or any other specially made drum, or even played one yourself, then you will know the enormous range of subtle expression that can be played on it and all of the various percussive rhythms that can be used. Rave culture or Dance Music has been defined by the basic drum beat or rhythm that calls people to dance and to gather in peace. This is no coincidence …

According to the Bamana people in Mali, the name of the djembe comes from the saying “Anke djé, anke bé” which translates to “everyone gather together in peace” and defines the drum’s purpose. In the Bambara language, “djé” is the verb for “gather” and “bé” translates as “peace”.[4]

The drum is much more than just a basic “hit hit hit” sound and is an instrument in it’s own right. When the drummer hits or strikes a drum, complex fractal wave forms are set up as shock waves move chaotically through the drum and drum skin and resonate the surrounding air. Mathematics cannot predict those shock waves, and resulting sonic waves, due to the “chaos” effect. You may remember Brownian Motion in your “O” Level science classes which describes a liquid or gas but its the same principle. The random motion of smoke particles hitting together cannot be predicted. So why would we bring a predictable electronic machine into the equation ? Simply put, who would ask a human drummer to carry out the repetitive drum patterns for hours at a time ? It reminds me of an avant-garde classical composer who I can’t remember the name of now, who composed extremely repetitive music for his orchestra. His musicians almost rebelled against him. It was just too monotonous for them to play. But I digress.

So electronic drums that originally started being used, en mass in the 1980’s, and with the arrival of the TR-808 and 909, came about as a matter of convenience, experimentation, and growing popularity of very repetitive trance inducing Dance Music. Add real drums into the mix and we have come full circle and the two actually compliment one another.

In electronic music composition samples of percussion and drums have become widespread. Even some dedicated drum machines such as the TR-909 use some samples. Samples may be appropriate in some circumstances. However in computer based music production, in this case using the Linux system, most people have access to a sound card or some kind of sound generator, that has a DSP chip. This can be programmed mathematically to produce various sounds. To synthesise those sounds. The various analogue circuits found in the first synths and drums machines are modeled using mathematics to produce what can be proved to be an identical sound to an analogue circuit. However science cannot model everything and along with psychological factors an original TR-909, TR-808 or TR-303 will always sound unique. But who’s telling ? Just don’t mention to anyone that you aren’t really using an original TR-808 and I won’t let on, OK ? You can always invest in vastly more affordable clones of things like the TB-303 if you have to. Or even make your own TR-909 ! There are plenty more clones attacking out there.

Bottom line. A synthesized drum sound is going to sound vastly superior to using a sample. The speaker is designed to move faithfully in response to the electronic reproduction of that sample. A speaker diaphragm behaves differently to a drum skin because its designed for a different purpose. Therefore we design our sound digitally and give it some kind of randomness and depth so it sounds as dynamic, natural, rich, and interesting as possible.

So without further ado, here is the tutorial/guide …


This guide is based on How to create drum sounds in ZynAddSubFX or Yoshimi, Part 1.

1. Start Jack and setup Hydrogen and Yoshimi or ZynAddSubFx.


Jack Audio Connections

Notice that Hydrogen has no audio connections. Yoshimi is connected using its main outputs, but we could use it’s individual outputs per part to mix sound in a DAW such as Ardour for example.


Jack MIDI Connections

The Hydrogen MIDI output connects straight to Yoshimi.


Hydrogen MIDI Output

Notice the areas highlighted in yellow in Hydrogen. This colour will be used throughout to highlight important interface elements. There are only two instruments defined. A drum and a percussion sound. The first is set to MIDI output on channel 1. the second is set to MIDI channel 2. The note is set to an appropriate pitch.

Now we can set up the synth. Here is a copy of my drum instrument as well as the synth state.


Yoshimi Main Window

Make sure the two “parts” are set to MIDI channels matching the Hydrogen outputs.

Now edit the part or instrument. You can use the edit button or middle click mouse on the instrument name.


Yoshimi Edit Window

Edit the ADDsynth (additive synth).


ADDSynth Global Parameters

First we tune everything to “A” (440hz). click on “Show Voice Parameters”.


Edit Voice Parameters

Here are the ADSynth Voice Parameters.


ADSynth Voice Parameters

Click the 440hz check box. Now we adjust the Amplitude Envelope as recommended in the guide

Back on the ADsynth Global Parameters window, lets turn the R.dt knob on the Amplitude Envelope to 62.5 to let the sound decay when a key is released. Next, change Octave from 0 to -3. This is what a kick drum’s pitch might rest at.

… and then …

Next lets use the Frequency Envelope. Turn A.val up to 117. Listen to how this has changed the sound. Next, change A.dt to a value around 35.4. Listen to how this has changed the sound.


I changed some of the recommended settings so the knobs won’t match what is recommended in the guide. At this point you should hear a deep base, rounded drum sound when you start Hydrogen sequencing Yoshimi. After a few adjustments I was happy with the sound I was getting but you might want to continue with the guide from “A more advanced kick drum”.

Here is a recording of the basic 4×4 beat that is produced on my system using this set up …

Download: Drum Basic Random.flac

To produce an even more dynamic sound that does not sound monotonous to the ear, Yoshimi and ZynAddSubFx both have randomisation controls. For example in the ADsynth Oscillator Editor …


ADsynth Oscillator Editor Randomisation Control

There are also other randomisation controls that can be used …


ADsynth Global Parameters Randomisation Controls

These can effect the sound as well as the actual timing and length of the drum sound to create a more interesting type of drum percussion. Of course, as always, nothing can replace a real human drummer ! But the two can work together very well.

Lastly as you become used to Yoshimi it may be worth creating a dedicated drum kit instrument, although I have not experimented fully with this yet.


Yoshimi Drum Kit

The sounds in the default drum kit are not very inspiring but with this guide you should be able to create much better sounds.

So that’s it, I hope you have enjoyed this guide. Go and create lots of drums ! But remember, find a human drummer as well or sample of human drumming, and knowing how to drum yourself always helps.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s