Especially for those of you using hardware modular synthesis: I have a question or two regarding software versus hardware:
- In VCV, as far as I know, each input and output can be used either for control signals or audio signals (it's all just a matter of voltage levels), so I can draw cables any way I want and use modules for whatever I want and still get a useful signal (with the exception of polyphonic versus monophonic). In Reason (which isn't truly modular, although it borrows from that world too), they differentiate between control signals and audio signals, so the two cannot be mixed. How does this work in hardware (or, more specifically, the hardware you are using)?
- What would you say the advantage of hardware is (compared to software)? I can imagine a couple, but I'd rather hear it from someone with practical experience.
- How easy is it to find and add new modules?
For me, as a beginner, software in general has the advantage of not taking up any extra space, and VCV in particular has the advantage of making it very easy to find and add new modules, with many of them also being free (just like VCV is), so I can try things out without spending a lot of money. Also, as someone with more programming experience, creating my own plugin would be easier than having to build the hardware for it (not that I would mind getting into that as well, but it would take a lot more effort (and beginner mistakes might have more severe consequences)).
The disadvantage of software is that it's clearly not as hands-on as hardware; turning a hardware knob is an experience that is hard to emulate. VCV in particular lacks a method of labeling a module, while Reason can do it (in hardware, it's easy with just a pen and some tape).
***
Today I have experimented solely with different methods of calculating an average in VCV:
- It turns out that the Unity module can be set to use either 6 or all 12 inputs for one average, so that made it easier to calculate an average for 8 inputs. This method can be expanded to work also for higher number of inputs (see below).
- Use two mixer modules to sum together all 8 channels. Then use a third mixer module to divide the result by 8, which requires a bit of extra math. I started by looking up the definition for dB (which is what the mixer module use for setting the level of an input):
dB = 10*log10(fP), where fP is the factor we want to multiply the power level with. For the mixer module, we instead need the change in amplitude:
fA = sqrt(fP) => dB = 10*log10(fA^2) => dB = 20*log10(fA)
fA = 1/n (n is the number of channels) => dB = 20*log10(1/n) = -20*log10(n)
So, with 8 channels, we must set the input level to dB = -20*log10(8) ~ -18.062 in order to calculate the average (to be certain I had calculated everything correctly, I used a Scope module to compare the result with that from method #1). This method can be extended if more channels are needed, but there will be lots of mixers (one per every fourth channel plus one more). We can also have some fun by routing the note gate values to each cv input on the channel mixers. This means that a channel will be counted as having a level of zero as soon as its note key is released, ignoring the release value of the volume envelope -- although the usefulness of this can be debated.- Use a sum module to add all channels together and then an attenuator model (VCA) to calculate the average. The attenuation factor is measured in percent, so it's easy to calculate its value in order to divide by 8 (i.e. 100%/8 = 12.5%). Easy to adapt for more channels and requires only two modules.
Averaging all channels, currently 8, solves the problem of clipping, but all channels are counted, not only those that are currently in use, so if only one channel is in use, the volume of it will still be divided by eight, so the fewer channels in use, the quieter the result (and vice versa). This could be considered an artistic choice, but it would be interesting to also be able to average only used channels. I can calculate the number of used channels by adding together all note gate voltages and then divide the sum by 10 (a gate is either 0 or 10 volts), but I haven't yet figured out how to divide something with an arbitrary number (i.e. the number of used channels). Counting only channels with active gates will ignore the release value of the volume envelope (as for method #3 above), so that would have to be solved as well (if we want a tone to fade out instead of ending abruptly).
***
And to answer my own question from earlier:
Yes, with a few exceptions: factorize the number of inputs and then use lower order average functions for each of these factors. This means that it's not possible if the number of inputs is a prime number (higher than the number of existing inputs), or if a lower order function doesn't exist for a given factor.
Example: Calculate the average for six inputs.
6 is the product of 2 and 3, so we use either 2 average functions of order 3 and one of order 2, or 3 of order 2 and one of order 3:
g(a, b, c, d, e, f) = g(g(a, b, c), g(d, e, f)) = g(g(a, b), g(c, d), g(e, f))
***
![]()