Vector Signals in the grid

What problem(s) would this feature resolve?

Often, you have a chain of several signals that you all want to be processed in the same way. Take a delay for example. If you make some sort of note delay, you want to delay the gate, as well as the velocity. Of course, at some point you wish to process these signals differently, like attenuating the delayed velocity signal. But most of the time you wish to delay by the same amount. Currently, you have to duplicate a delay instance, and whenever you want to change the delay of one manually sync it up with the other one. The more signals you wish to delay, the more tedious and unmanagable this becomes.

I propose a concept of vector signals. A vector signal would be a fixed-size list of signals represented as a single signal, along with utility components to help create and manage them.

Grid modules and technical specification

Grid module: Vector merge

“Vector Merge” would be a module accepting a variadic number of input ports and have a single output port, similiar to the Mixer component. A “Vector Merge” with N inputs would produce a vector signal of length N.

How vector signals are processed

All components which have as input normal signals (all of the current modules in the grid) can also accept a vector signal. If any of the inputs in a module is a vector signal, then these signals would be processed in paralell and the resulting output(s) would also be a vector signal of the same size as the one put in.

When a vector signal would be connected to a variadic-arity module then the vector signal will be split up, each individual signal in the vector getting its own input port. For example, connecting a vector signal of size 3 to a mixer would create 3 mixer channels where you could adjust the gain of each one.

When one module has more than one vector signals as inputs, the vector signals must be of the same length. When multiple vector signals are inputs, they are processed like they are zipped and matched together with the other vector signal 1-to-1 with the same index. For example, consider two vector signals [0.2, 0.5, 0.0] and [0.3, 0.1, 0.7] being piped into a Addition module. The output from that addition module would be the vector signal [0.5, 0.6, 0.7].

Vector modulation

Of course, just processing the signals completely the same in paralell—while being very useful—is a missed oppurtunity. Bitwig offers many quick ways to add seperation to layers such as voices and stereo seperation and the same could be applied to vector signals.

In the Vector Merge module, for each input there would be a modulation out. These are somewhat special, in that they can only modulate the parameter of any module which has as input the same size as the output vector of that Vector Merge module. It would work similiarly as the Channel 16 modulator device, where it would be full modulation (1) when the signal processed has the same index as the input port and otherwise be on no modulation (0). Example: consider the grid schema
Pitch in → (M) Vector Merge
Pitch in → Transpose (+7 st) → (M) Vector Merge
(M) Vector Merge → Sine Osc → Distortion (+0 db)

So, two signals are fed into a vector merge module. One is the pitch in, and the other is the pitch in but transposed 7 semitones. Then the resulting vector signal is fed into a sine osc and then into a distortion module. Now, since there are two inputs to vector merge, two modulation outputs would appear on the module. We could take the second one of that, and modulate the distortion parameter with say, +3 db. Now, the result would be that the the sine wave with the base pitch would remain undistorted, but the sine wave a fifth higher would be distorted by +3db.

How does this feature fit in Bitwig as a product?

Enhances the grid giving you even more power to make short and very concise patches that still offer a lot of complexity and room for interesting ways to modulate.

Is there already an alternative way to achieve this on Bitwig?

In some scenarios, this is similiar to how voice stacking works in bitwig, though this is a generalization of the concept for the grid and offers more possibilities. This is also similiar to how stereo signals work in the grid, as all signals can be seen as a 2D-vector with the left and right channel seperated and can be processed individually.

Could it be implemented using Bitwig components or APIs, without Bitwig team’s support?

No, this changes the way the signal flow works in the grid.

Could it be provided by a VST or something else reasonably integrated with Bitwig?

No

Are there other products that offer this feature?

Not that I know of