[sdiy] Bus for digital patching of synths

Rainer Buchty rainer at buchty.net
Sat Nov 9 15:50:27 CET 2013


On Fri, 8 Nov 2013, cheater00 . wrote:

> On Fri, Nov 8, 2013 at 2:45 PM,  <rburnett at richieburnett.co.uk> wrote:
>> I think Paul Maddox played about with the idea of a digital modular synth
>> some time ago, (appologies if my memory serves me badly!)
>
> I think I've never heard of this. Has anyone more on this topic?

That was the OpenSynth idea. Not sure if the mailing list archives still 
exist, but I have an mbox file somewhere.

The crux pretty much was the digital bus where each module would put its 
data so that any input could pick it up based on the given patch 
configuration.

This is where sheer size and according scalability issues arise. You 
have $m modules with $o outputs each who want to place their data on the 
bus. Sounds like time-slice? Yes, but you would need to have 
sufficiently high data rates then to support the bandwith requirements 
of m*o*sizeof(audio word in bits)*sample frequency Bit/s

Each output alone will require at least 48kHz*16 Bits which is already 
768kBit/s (96 kByte/s, SI kBytes that is, not kibibytes). If you want to 
go 24bit/192kHz (and for the sake of "state of the art in studio 
technology", audiophiles, and whatnot we want), then it's even 
576kBytes/s, which is roughly 5MBit/s.

This was just *one* output. We have $m of those.

A single VCO with individual saw, tri, and square outputs would 
therefore already require around ~15MBit/s raw data rate. Each VCO's 
waveform should have its assigned VCA for waveform mixing (+3*5MBit/s 
for VCA outputs) feeding a summer (+5MBit/s for summer output if we 
assume that the VCF only has one, not 3 inputs) which outputs the 
waveform mix to the state-variable VCF (+3*5MBit/s for VCF output: LP, 
BP, HP), each output feeding again an individual VCA plus summer 
(+20MBit/s), finally feeding the final VCA (+5MBit/s for VCA output).

12*5MBit/s=60MBit/s so far and we don't have any modulation yet.

You want individual envelopes for all (7) VCAs? add 35MBit/s.
You want individual envelopes for pitch and filter frequency? add 10MBit/s

LFOs, too? Well, double those 45MBit/s above for ultimate flexibility.

Makes 150MBit/s already for this single-osc, single-voice setup (or 
around 100MBit/s if we go for a lesser modulation-friendly approach) and 
we haven't even touched protocol overhead (probably neglectable, as it 
is basically a couple of bytes of source address per module output and 
eventually an extra slot for configuration data), safety overhead 
for some FEC and checksumming (better drop one audio packet than play a 
defective one), and eventual issues arising from the modules detecting 
when it's time to put their own data onto the shared bus.

So skip the shared bus and go for a central crossbar chip. That puts 
less stress on the individual patchcord (which just needs to serve those 
~5MBit/s), but of course moves the problem as you then need a capable 
crossbar which should be able to handle at least something in the GBit/s 
area.

Possible? Today, yes. A Virtex 7 offers 96 transceivers of sufficient 
throughput and enough logic to build a fast enough crossbar.

Back then, i.e. around a decade ago, quite impossible.

Yet, still, I think that an programmable analog crossbar is the better 
solution in your case. Saves you all the hassles of dealing with 
high-speed buses and you don't even need tons of ADC/DAC. Plus, 
scalability is rather easy to achieve.

Rainer



More information about the Synth-diy mailing list