I made this synth after thinking about a discussion I had with Paul Slocum regarding the role of chipmusic hardware and emulation. I'm not saying that I'm now a fan of emulation or the idea of emulation, but I can definitely see the whole issue from a new light, a new perspective.
This idea that software-based synthesis can play a role beyond just imitating the sounds of the classic sound chips is interesting. It's possible of course that software-based synthesis can use some sort of idea inspired by limitations and mechanisms of the way that the classic sound chips produce waveforms and map data and so on, and still push everything forward.
My point is; I realised that the idea of emulation (and the related area of software-based synthesis) do not necessarily have to take on a descriptive role in terms of sound production, but can explore these concepts in new directions using prescriptive measures. In a way, I'm reminded of certain aspects of score notation in ethnomusicology and the purpose of the score itself in regards to musical performance and pedagogy. Of course, this point of view brings up that old issue of 'what is chipmusic?'.
I've been thinking about the idea of hardware and software-based 3Bit music lately, and so this morning I made a quick little 3Bit soft synth. Four voices, two three-bit pitch 'registers' and a three-bit amplitude 'register' controlled by an eight-step envelope generator. The frequencies are all based on divisions of an NTSC-based clock frequency. Includes (basic) MIDI control.
The patch can be downloaded here:
The frequency of a given square wave oscillator is given by the formula:
A / 2 * (B + 1) * (1 << (C + 7)) Where: A = the master clock (3579545 Hz for so-called "NTSC") B = the frequency identity (3 bits) C = the frequency divider (3 bits) This system of tuning the oscillators results in a set of thirty-six unique pitches (of a total of sixty-four possible pitches), because there is a certain amount of overlap in the frequencies produced by the division process when using different values for B and for C, as shown in the table below. Unique resulting frequencies are shown in bold. Tuning a synth in this way with such a course resolution results in a sort of interesting 'tonality', which sound quirky and strange but at the same time I quite like it. You can listen to an example of this sort of 'tonality' here (566KB).
The synth reads from a lookup table comprised of the unique 36 data values. As a result, the pitch range goes from C-2 to B0 and then wraps around from C1 onwards.
The velocity is scaled to a range of 0 - 7 and then the current value of the amplitude envelope generator is multiplied by the scaled velocity. This value is then divided by seven.
14-bit pitchbend data is used to change the frequency of the master clock by plus and minus twelve semitones.
The Envelope Generator
The envelope generator has eight steps, each step is an amplitude value from 0.0 to 1.0. Below you can see the envelope setting and a resultant waveform. Notice how precisely the actual amplitude of the synthesised waveform matches the envelope representation:
Application and Use
This synth can be used as a Max/MSP patch within the cross-platform Max/MSP environment or the free runtime environment, as a standalone application or as a plugin (RTAS / VST / AS etc) using the free Pluggo environment (which should be cross-platform compatible).
Here you can see a picture of the 3bitmusic plugin running as an RTAS insert in ProTools 7.3.2: