A collection of modules for VCV Rack:
- Baseliner, a 4x probabilistic attenuverting switch.
- Bsl1r, a single-channel Baseliner
- Customscaler, a quantizer for custom, CV-modifiable scales.
- Normaliser, an attenuator scaling values to an output range.
A 4x probabilistic attenuverting switch.
Baseliner returns one of two possible signals (High or Low), based on a gate input. In its basic state, it will return High if the gate is active and Low otherwise.
"I see that Low defaults to 0, so are you saying you re-invented the AND gate?" Yea, kind of (awesome, no?). But there are a number of ways to modify this basic behaviour which I often find useful in turning raw CV into music. They relate to shaping High and Low, and to deciding which signal to return.
The original motivation for this module was to pass on a signal if gate is on, but have it fall back to a definable baseline, not just 0, when it's off, hence its name.
The ways the two signals can be shaped are the same for both; the only difference is when they are returned. Both High and Low are computed as their respective input * att + abs. If no input is given, this lets you dial in a constant value via abs (-5V..5V). Once you provide an input, you can offset it using abs and attenuate it via att, which is an "attenuverter" i.e. also lets you invert the signal as its value can be set from -1 to 1. Outputs are clipped to -10V..10V.
The controls in the darker, lower area of the module can be used to modify which signal is returned when.
Besides the regular Gate mode, there are two modes, Latch and Toggle, which behave like the modes in Audible Instruments Bernoulli Gate (a software implementation of Mutable Instruments Branches). There is also a probability input which is computed as the sum of the knob value (0..1) and the CV input.
-
In Gate mode, High is returned if Gate is on - but only with probability p, determined each time Gate triggers (switches from off to on).
-
In Latch mode, Gate is only used as a trigger: When it triggers, the output switches to High with probability p or to Low otherwise.
-
In Toggle mode, Gate is only used as a trigger as well: When it triggers, the output switches from Low to High or from High to Low with probability p.
Gates are normalized to the left and the outputs are normalized to the right:
- Any unpatched Gatewill receive its value from its first patched input from the left.
- Any unpatched output will contribute its value to the right. The next patched output will return the sum of its own value plus all potential unpatched outputs to its left (until there is another patched output to the left).
- Note that in earlier versions, High and Low were also normalized to the left, but this was discarded, as it complicated having a proper zero baseline.
If High or Low inputs are polyphonic, their polyphony will be passed through according to Gate and att and abs modifications will be applied to each channel.
When daisy-chaining columns with different numbers of active channels,
single-channel columns will be added to all channels of polyphonic other columns.
For example, if column 1 outputs two channels and column 2 only one,
and output 1 is unpatched, the output 2 will be
(column1.channel1 + column2.channel1, column1.channel2 + column2.channel1)
.
However, if column 1 has 3 channels and column 2 has 2, output 2 will be
(column1.channel1 + column2.channel1, column1.channel2 + column2.channel2, column1.channel3 + 0)
.
- If you don't provide any input but just raise High's abs value, gate triggers will create another gate trigger at the output, allowing you to e.g. modify the probability of the trigger passing through.
- If you send signals only to Low and patch the right-most output, you have an improvised mixer where att controls the volume.
Check out the video below, which shows Baseliner in action. It serves as a rhythm generator, mixer, distorter, melody creator, and drum sequencer.
A single-channel Baseliner.
A quantizer for custom, CV-modifiable scales.
Customscaler turns a continuous input signal into V/Oct output, scaling the input value over the tones selected in the matrix. By default, it expects a 0V..10V input, but the context menu allows to switch to -5V..5V inputs. The input is distributed evenly over the activated tones, so if you have CDEF activated, 0-2.499...V will trigger the C, 2.5V-4.99...V will trigger D and so on. The center light in the bottom row corresponds to a V/Oct output of 0, C4 if fed into an otherwise unmodulated oscillator. Each row further up represents one half-tone higher, whereas columns to the left and right represent lower and higher octaves, respectively.
Next to the matrix, there are two areas with controls: The upper one contains all controls related to playing an existing scale, the lower one modifies the scale matrix.
- in receives the CV to be turned into V/Oct.
- oct range controls which of the octaves are used.
- v/oct sends the computed V/Oct.
- change sends a trigger everytime v/oct changes.
- base adds up to 11 half-tones to the output.
- base cv expects a -10V..10V input, adding -11 to 11 half-tones to the base knobs setting; the final base value will still be 0..11 (C to B,if you will).
-
v/oct receives a frequency. If the tone has a corresponding light on the matrix, it will be toggled when toggle receives a trigger. This means you can control the matrix from e.g. a keyboard or a sequencer (or another Customscaler, gasp). The base offset is not taken into consideration.
-
random randomizes which tones are selected in the matrix, according to p and latch/toggle, see below.
When you first trigger random, it will consider all active tones and determine whether to leave them on or off. If a tone is turned off, it will remain a "candidate" (yellow), such that at a future random trigger, it will be reconsidered for activation. Like this, you can define a scale and randomly select parts of it using this function.
If no tone is active when random receives a trigger, all tones become candidates, such that a truly random selection across all tones occurs, similar to the behaviour of the randomize trigger in an earlier version of Customscaler.
-
p and latch/toggle determine the behaviour when random is triggered.
p is computed as the sum of the knob value and the CV input, clamped to 0..1.
In latch mode, a tone will be activated with probability p.
In toggle mode, a tone will be toggled with probability p. This lets you, for example, create slowly changes in the scale over time, versus a complete re-roll on every random trigger as created by the latch mode.
As noted in the Baseliner documentation, this behaviour is modeled after the Bernoulli gate / Branches module.
-
reset will turn off all lights on the matrix.
If in is polyphonic, v/oct and change will be polyphonic as well, applying the different channels' input to the same scale and independently firing change gates when the resulting pitch changes.
As of 1.0.3, the toggle and corresponding v/oct inputs are polyphonic as well. When a gate on channel c of toggle is received, the tone on channel c of v/oct is toggled.
Check out the video below, which shows several instances of Customscaler in action.
The video below shows some less conventional uses of Customscaler
An attenuator scaling values to an output range.
Normaliser returns the input signal sent to in, scaled to a range from min to max. It keeps track of the lowest and highest values that so far have been sent to in, in two variables min_current and max_current. Mathematically, it returns (in - min_current) / (max_current - min_current) + min * (max-min).
reset deletes the current min_current and max_current.
freeze stops updating min_current and max_current from in; values outside those boundaries will be clamped to min and max, respectively.
poly changes the polyphonic behaviour. If poly is off, a single pair of min_current and max_current values will be computed from inputs on all channels. Set to on, each channel will track its own set of min_current and max_current.
The min and max outputs return the values for min_current and max_current. They will be polyphonic if in is polyphonic and poly is on.
Thanks to Andrew Belt for creating VCV Rack and the surrounding communities. Thanks to Jean-Sebastien Monzani, Dave Phillips, Mateusz Jedrzejewski, Existentia Virae, Alfredo Santamaria, Lars Bjerregaard, Patrick McIlveen, Pyer Cllrd, Steve Baker for testing, helpful feedback and feature requests.