[sdiy] High Q Resonators/digital drums
Richie Burnett
rburnett at richieburnett.co.uk
Thu Jun 16 00:30:00 CEST 2011
> dan snazelle wrote:
> wow! sounds great
> what is the code like? did you do it in C? which board?
The code consists of sequencer, voice synthesis and mixer modules, all
programmed in dsPIC30F6012A assembly language.
> Tom Wiltshire wrote:
> Very nice, Richie. I can't hear the join. I think you've successfully
> copied 1980's technology with 21st century technology! ;)
>
> What's the dsPIC development board you're using, out of interest?
> Is it your own design or a commercial one?
It used a dsPICDem 1.1 plus board that I had lying around from a previous
work project (clinical diagnostic machine.) It's actually fitted with a
dsPIC30F6014 device but the firmware was coded to run on 30F6012A. The
first thing I did was cut the traces to the sh**ty on board 8-bit CODEC and
proprietary LCD and connected up a decent CS4335 24-bit audio DAC and
Hitachi industry-standard LCD. The dev board isn't really doing much more
than supply power to the dsPIC and act as a breakout from those tiny surface
mount I/O leads!
> Thomas Strathmann wrote:
> That sounds eerily close. The most obvious difference to my ears (on
> cheap speakers at the moment) were the bass drum sound. Would you mind
> describing some of the details of your implementation?
It's funny how different people hear different differences! I think the
hi-hats are the most innaccurately modelled voice, and sound quite different
from the actual TR-808 I recorded. I wasn't able to measure the frequencies
of the 6 free-running pulse oscillators that form the basis of the cymbal
sounds in the actual TR-808. Therefore, the DSP model for the cymbals is
not as accurate as it could be. There is quite a variation in sound between
different Roland TR-808 machines though, and even a single unit drifts a lot
with changes in ambient temperature!
Some details of the implemenation? I wrote the firmware about 6 years ago,
so my recollection might be a bit wooly...
The drum pattern was hard coded as a lookup table in ROM, and played out by
a basic sequencer routine that triggers the appropriate voice modules at
each step. The voice synthesis software worked in 1ms blocks (48 samples
for each instrument at 48kHz sample rate.) The outputs from all of the
instrument voice buffers are then mixed together into a stereo output
buffer. This is continuously DMA transferred over I2S to the audio DAC in
the background. The tuning, decay, volume, panning etc. of each drum sound
are adjustable but currently hard-coded values in software. A multiplexed
array of pots and User Interface would be on the to do list! Likewise a
proper MIDI parser.
The BD, SD, LT, MT, HT, LC, MC, HC, RS, CL sounds are all based around
digital state variable filter implemenations excited by 1ms gate pulses.
There are some differences between the voices like that the BD filter tuning
changes as the impulse response decays away. The SD is a mix of two ringing
filters, plus enveloped filtered noise etc. CP is filtered enveloped noise.
CB, CH, OH and CY were all made as follows: Mixture of 2 or 6 free-running
pulse oscillators, filtered, non-linear clipping, enveloped and filtered
again.
The dsPIC being only a 16-bit DSP isn't really aimed at pro-audio
processing. So there were lots of tweaks to the filter implementations like
using double-precision states and fraction saving to get good low-frequency
ringing performance. As always the trick is figuring out where to spend
your DSP resources and where to be thrifty to cram in the desired features.
-Richie,
More information about the Synth-diy
mailing list