DIY MIDI drum synthesiser sound module
In May 2015 I made a drum / electronic percussion sound module capable of producing sounds similar to the Vermona DRM, MAM ADX, etc.
I wrote custom DSP synthesis software in C++ (accellerated by the excellent stk library) and a little bit of hardware work by modifying the housing of a MIDI controller.
The result is the xdrum nozenphoion drum synthesiser, a hybrid machine combining a Raspberry Pi to generate audio, and a Novation Remote Zero (SL Mk 1, with two LCD screens) for a control panel.
- Five drum sounds are available with a simple but flexible synthesis structure
- Each control on the control panel can be very quickly (re)associated with a (new) sound parameter for a specific drum
- Sound settings and parameter associations are saved automatically in one of ten "soundsets"
- On the fly randomisation and copy-pasting/swapping of drum sounds is possible
More information in the
What does it look/sound like?
Audio clip (soundtrack of the above video) here
DSP block diagram
Each drum sound has a sine oscillator and a noise generator with low pass resonant filter. Each have dedicated amplitude envelopes. There is an additional "bend" envelope which can affect the noise filter cutoff and oscillator frequency.
The noise generator is a periodic type which means that the noise can have a perceivable pitch. The noise resonant filter is self-oscillating and the sine oscillator has a noisy "jitter LFO".
In practice this means the sound character of the "sine side" and "noise side" of the drum synthesiser overlap. The "sine side" of the drum synthesiser can be pitched or unstable and noisy; and the "noise side" can generate fizzy noisy buzz or tuned whistling.
The bend envelope is bipolar which means a rising or falling sweep in pitch is possible. All envelopes are non-retriggering accumilating, which means a long-attack time with repeated triggers will cause the overall envelope output to gradually rise with each repeated trigger. This can be useful for cymbal swells.
Additional waveshaping features include
- a clipping stage which can be useful to add harmonics to the sine stage when the level is overdriven
- noise waveshaping via recursive rectification and normalisation; this can be useful for "clap" sounds
Here's an overview of the software system:
System overview diagram (clicky for big)
MIDI note events from an external sequencer are handled by the DrumKit
MIDI control events adjust drum synthesis parameters, and update the LCD display via MIDI System Exclusive commands
A MIDI event filter blocks messages on MIDI channels/ports other than the ones we need to listen on
Remapping of controls to synthesis parameters is handled via ControlPanelLogic
The ControlPanelLogic also handles saving of panel mapping and drum synthesis parameter values to SD card
A Raspberry Pi SD card image based on a minmal Arch Linux installation is available on request but it shouldn't be too difficult to compile and run the software on your own raspberry pi.
Sourcecode (substantially supported by the STK library) is available.
A user manual is available.