Well, it’s been nearly a year since my last post – good grief. Rest assured, I was busy with projects throughout 2014 – I simply didn’t get the chance (or sometimes inclination) to blog about them. As I’ve said before, I’m very poor at keeping a good record of what I’ve been up to. For those interested, throughout 2014 I’ve worked on a Trombone Harmoniser (using the pedalShield project), A soundboard for a travelling theatre, programmed & wired lighting for a giant wave pendulum, and become increasingly involved with Code Clubs in Manchester.
One important thing I learned in 2014 – I’m much more productive when I’m working on an idea I like. One of the reasons I haven’t put myself out there as a general purpose hacker for hire is the risk of being given an idea to work on that I’m not passionate about, or interested in. Perhaps I’m not being realistic, but I’d rather focus on my own projects, and those others suggest that get me excited, than risk doing uninspiring work on something I’m not sure about.
So that’s 2014, but my plans for 2015? Much of the same! I’ll be helping with more Code Clubs in Salford, and working on whatever catches my interest. One of my main intents is to blog & document more, with the aim of others being able to reproduce my work if they wish.
Now, Dub Sirens. I was asked late last year if I could make a dub siren by someone at Drop Productions. I said “probably”, and after some research I had a reasonable idea of what a Dub Siren is: It’s a simple synthesiser, most often used with Dub music. They’re not especially well defined in terms of capabilities, as they are usually improvised; circuit bent; homemade – there are some commercial models, but these are very small scale. The main common ability is producing simple tones, alarm sounds, bleeps, bloops, wails – that kind of thing. These are usually combined with a tape echo or, more often these days, a digital version of the same, such as the Boss Space Echo.
After looking at 555 based oscillators, and similar analog methods (there is a great tutorial here, if you fancy this approach); I decided to go fully digital instead, and produce something using the Arduino Due, as I’d become very familiar with using it for audio processing in 2014. Using this post as a starting point, I implemented a simple lookup-based sine generator. From here, I’d planned to add a few more waveforms (saw, square, etc.) and an LFO, but decided that I could probably do a tape echo sim as well. I added this, some basic filtering, a choice of waveforms for the main synth and modulation, and a feedback value. Getting this up and running was a little harder than I thought, but I was able to do all the programming in a weekend.
Over the following week I designed and laser cut a case (thanks Hac-Man), connected some potentiometers (pots) and switches for control, and put it all together:
For the benefit of anyone who might be interested, I’ll quickly run through the signal chain and controls: Firstly, the LFO phase accumulator is incremented based on the ‘mod freq’ pot; the oscillator (osc) value is then looked up from a table that is chosen by the waveform switch for the LFO; this is added to the main osc phase accumulator that is incremented from the ‘main freq’ pot; lookup from same tables as per waveform switch for the main osc; ASR envelope multiplier then used based on whether trigger is pressed, released, and how recently (A & R approx 12ms); the delay buffer lookup value is incremented using the value from the ‘delay’ pot; the ‘oldest’ sample in the delay buffer is moving-average filtered, multiplied by ‘feedback’ value, and added to the output; output value is put in the delay buffer (some extra stuff happens here to make it a tape echo); output value is written to the DACs.
Don’t worry if none of the above makes sense to you – this is what it sounds like, and how it is used:
The insides are pretty basic – the switches and pots are wired the usual way, albeit messily:
For my first real attempt at a digital synth, I’m pretty happy with it. The only things that I wish I could include: a better FIR-based low pass filter in the feedback loop, but couldn’t add one as it wouldn’t fit within the 44100kHz interrupt with everything else; perhaps a larger delay; and proper log pots for volume, main osc freq, mod osc freq – I’m using linear pots with a log lookup table.
If you’re interested in making your own, or analysing and improving my messy, messy code, you can find the files required on my Github – https://github.com/ChrisBall/Dub-Siren-Files.
Best wishes for 2015!