[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