Excellent questions. Tim. I suppose on the face of it, throughput is most important.. but right now I'm looking for examples to pick apart to figure out why mine is not working.

This is for a rather strange application: a pantomorph. for this I need responsiveness, ie speed, with minimum DSP load. Actually I don't even need a multiplexer, I'm most interested in the demultiplexer; the multiplexer is inherent in the design.

Briefly: the pantomorph I am working on does not multiplex signals, but instead weights the signals using a matrix of control sequencers, which are controlled with a staircase waveform. These are then summed and placed on a bus. I need to demultiplex them using the same staircase. However, what I'm finding is that I cannot get the timing right: when I break the staircase down with an a/d and then use those bits to trigger S/H modules (or even T/H), I am capturing bad data: I cannot align the sample time properly with the multiplexed signal.

The full patch is complex and dependent on controller settings, which is why I am not posting it. I need to break the system down a bit to isolate the relevant components and then experiment with them. Perhaps then I will post an example. In the meantime, working examples would help a lot.

If maximum throughput is the prime consideration, things become more klutzy because some useful modules cannot run at audio-rate (eg. the mux modules) and others require triggering, which basically halves the system frequency.
Having all channel outputs available simultaneously is the next challenge, because this requires some kind of S/H-scheme which has to be efficient enough.

Here's a 8 into 2 multiplexer (one signal and one pointer channel) which meets the criteria of maximum throughput (8 channels @ 12kHz), all channels available, and max DSP efficiency. It's built around an exponential counter circuit which generates 8 consecutive one-sample 12kHz triggers when connected to a AD module. This is used to multiplex and de-multiplex the signals as efficiently as possible.

If max throughput isn't important, things become easier. In the above case, the DIY expo counter circuit could be replaced by an 8-counter module triggered at 48kHz. The throughput will be halved however (6kHz). If you go down back to control rate, things again become a lot easier, because now you have the mux and demux modules at your disposal. Throughput for 8 channels would be 3kHz in this case.

The biggest Houdini-style multiplexing schtick I ever had to pull off was 64 audio sawtooth oscillators through 2 channels via linear inter-/extrapolation.

Addendum:
The above patch utilizes a neat property of the AD module, but thus is limited to a fixed number of 8 channels.

Below is a more generalized concept for maximum throughput/parallel outputs multiplexing, which can run any channel count you like, with the throughput rate changing accordingly (96kHz divided by channel count). This demonstration features 16 channels at 6 kHz, but adding or deleting channels is very easy. (The numbering scheme of the required switch and compare modules is straightforward. Adjust channel count in the multiplex counter and you're done.)

Thanks a million, Tim. Your elegant and simple design beat the hell out of what I was doing. It works AND it uses less DSP. That staircase generator is a neat trick!

It works perfectly with the control-sequencer level multiplexing I am doing, but in the process it revealed a quirk of the control sequencer: the output lags the input by 8 clock cycles. See the attached example. You'd think that, with In 1 selected (what I labeled Channel 9) that slider 1 on the control sequencer would affect pitch.. but actually it is slider 9. Easy to correct for once understood. I do hope that the gate outputs stay in sync with the main output at this speed, because I am going to use them to switch in a few different signals.

It works perfectly with the control-sequencer level multiplexing I am doing, but in the process it revealed a quirk of the control sequencer: the output lags the input by 8 clock cycles.

The control sequencer has no lag. I have often used it in sample-accurate processes. It's robust.
What you are experiencing is interslot bus latency. The 4 busses are not sample-accurate, but have a delay of 24 samples. In your example, the multiplexed signal (bus 4) arrives 24 samples later at the demultiplexer stage than the pointer (bus 3), which, with a counter loop length of 16 samples, creates the effect of 8 samples delay (24 minus 16), but it's actually more.
The computationally cheap solution is to pass the pointer through another interslot bus at the multiplexing stage, so multiplexed signal and pointer arrive in sync at the demultiplexer. You lose an interslot bus though. Otherwise, you have to compensate at the demultiplexer stage by adding offset._________________

As far as I remember, no. Some of my patches require bidirectional communication between multiple voices (acting as macros) and the FX area (for controlling them) and I don't remember any extra latency being introduced by the VA-to-FX-part of the roundtrip.
In a way this makes sense. The DSP allocation algorithm flexibly assigns individual patch voices and their respective FX areas to different DSPs, so it would be undesirable (think phase cancellation effects etc.) if some of the voices of a polyphonic patch would have latency (because they are calculated on another DSP) and others not.
Why the interslot busses however DO have this latency is strange. Must be a bottleneck issue probably. If you think of it, at 4 slots with up to 32 voices each, there's potentially already quite some signal bussing between DSPs going on. (Also not forget things like LFOs in mono mode, which also have to be shared around.)_________________

You cannot post new topics in this forumYou cannot reply to topics in this forumYou cannot edit your posts in this forumYou cannot delete your posts in this forumYou cannot vote in polls in this forumYou cannot attach files in this forumYou can download files in this forum

Please support our site. If you click through and buy from our affiliate partners, we earn a small commission.