Monday, September 15, 2008

3bit Music [2]: Soft

Overview
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.


Download
The patch can be downloaded here:
http://milkcrate.com.au/_other/downloads/max_patches/3bitmusic.zip


Screenshot


Tuning
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).


MIDI Mapping
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:

5 comments:

10k said...

You are a fucking madman. I am so impressed with this.

Sebastian Tomczak said...

thanks for reading, tom!

vincent said...

is the patch available?

Sebastian Tomczak said...

Hi Vincent,
Yes, I've edited the post, so you can download it :)

Tristan said...

hi sebastian,

jacob sikker remin pointed me to your post. interestingly, i think that software emulation is a way of engaging these concepts in a more abstract form. software can generate a sound file that is an exact model of the synthesized sound wave, while hardware by definition outputs it in real time, where it can be captured imperfectly as a sound wave. i was using software to emulate my 1-bit waveforms earlier on for convenience, before i realized that what was as interesting or more so than the synthesized 1-bit waveforms was the complex signals that resulted from mixing in 1-bit too. ultimately, i think there's something interesting in there about emulation and hardware. imagine one were able to hack the hardware so the output could be captured while it was still in software. then you have a stream of data from hardware but not exactly yet synthesized. is playing that back emulation or something else?