Some VCVRack modules
New modules in 2.1.0: PAD2, µPad2, PhO, PhS, PHSR, SPL, YAC, Faders, PLC
New modules in 2.1.1: PHSR2, CSOSC, BWF, EVA, Ratio
New modules in 2.2.0: Osc1, Osc2, Osc3, Osc4, Osc5, Osc6, PRB, SPF, SKF, L4P, USVF, CHBY, AP, LWF, DRM, SWF, JWS, CLP, CWS, RndH2, AUX, OFS and OFS3
New modules in 2.3.0: Osc7, Osc8, Osc9, Drum, PPD
New modules in 2.4.0: FS6, Pulsar, OscA1, OscS, OscP
New modules in 2.5.0: X16, X8, X6, X4, CVS, DTrg
See also the demo patches on PatchStorage or on youtube
Table of Contents
The following modules are built for a modular phase distortion synthesis system which consists of:
Let's start with the last point:
A 16 harmonics additive phase driven oscillator. The harmonics are passed using the polyphonic input "Pts". When fed with a clean saw wave it outputs the additive wave. With the dmp parameter the harmonics can be attenuated with an exponential falling curve towards the higher harmonics.
Now lets take a look what happens if the phase is modified somehow. Here we take a wave shaper to modify the phase:
https://user-images.githubusercontent.com/1134412/170362396-4b37066c-5c43-41a2-8a09-3e62775e7e72.mp4
Other interesting possibilities are using all kind of filters (Fundamental VCF, VULT Tangents etc).
This module provides the shaper extracted from Valley's Terrorform module for shaping a phase. There are a lot of different shapes available as shown. Each shape can be adjusted with the Amt parameter and input.
Here an example:
https://user-images.githubusercontent.com/1134412/170367214-95789be0-5650-4afd-9f26-70ebfc70dae6.mp4
This module is a tiny Phasor module which can be used as start phase generator It provides a polyphonic V/Oct input, a reset input and outputs for a clean saw wave, a sinus wave and a clean triangle wave.
New in 2.1.1: Frequency modulation -- By using FM PHSR can be used as FM Operator. When used as carrier the frequency modulation is applied to the target where its phase is connected to. So FM can also be utilised on phase driven oscillators which have no FM implemented by their own.
An advanced Phasor with frequency modulation (including linear FM through zero). The phase can be distorted via moving the points (up to 16). The inner points (2 up to (Len-2)) can be modulated via the modulation inputs:
There are several modules which can be phase driven:
((x&(t*xc>>xa))|t*xd>>xb)*(yp+((y&(t*yc>>ya))|t*yd>>yb)*ym)
where t is an increasing integer depending on the input frequency (via Freq, V/Oct and Oct) (see also bytebeat or ByteBeat from Voxglitch, however this module is more intended to be an oscillator. In many cases a bytebeat can be obtained by going e.g. 6 octaves down).
Osc9 is a wave shaping oscillator providing two controls for shaping the sound -- try out!
SPL takes up to 16 points through the polyphonic PTS input and generates a smooth spline wave. Additionally, it outputs the line segments and step sequence of the points through the Line/Step outputs.
If SPL is fed with a phase i.e. the phase input is connected, then the V/Oct input is ignored.
Here an example. The spline wave is generated randomly and smoothly changed over time, and a bit strechted randomly over time with the PhS BEND shaper.
https://user-images.githubusercontent.com/1134412/170430990-c7cdd08d-1266-4b39-a2af-182c86453245.mp4
Geneticterrain is a polyphonic oscillator using wave terrain synthesis.
The 27 provided base terrains can be combined 4 times so each terrain is a "genetic" sequence with length 4 (sums up to 531441 possible terrains but don't worry many of them are similar). There are 10 different curves available and each of it has a curve parameter. The curves can be moved on terrain via dragging the blue circle or the X/Y Knobs. The view of the terrains can be moved by dragging not on the blue circle.
On the left side you can select the terrains, in v2 simple right-click on the knob and select. The polyphonic GATE input is mainly for the display of the curve for each voice and has no influence on the sound. If WYSIWYG make sure the GATE input reflects the GATE you are using for e.g. the VCA or ADSR.
On the right side there are the modulation parameters for the curve. The modulation inputs are polyphonic, so each voice can be parametrized separately as shown in the image above.
NOTE: There is no band-limiting implemented for different reasons, so you have to handle possible aliasing by yourself. In general: scale down the curves to cut down high frequencies.
NOTE: There are a lot of performance improvements implemented, but it costs still about 2% CPU per Quad Voice so maximal about 8% when using 16 Voices also depending on how many and which Terrains are combined.
If the phs input is connected when driving it with an external phase the v/oct input is ignored.
Geneticsuperterrain is the same as Geneticterrain but with curves produced by the superformula. (https://en.wikipedia.org/wiki/Superformula#Generalization)
Don't use it ;-)
And if you use it beware of the following issues:
The curves are not on all combinations of M1,M2 (aka Y,Z) closed and have poles (closed in infinity). For example if N1>0 and there exists an n,m in Z with 2*M1/M2 = 2m+1/n i.e curves with (3,2) (5,2) (7,2) etc and (5,4) (6,4) (7,4) (9,4) etc. have a pole which is noticeable when listening. If N1 < 0 then the curve is reversed and the poles go towards zero in this case (see https://web.archive.org/web/20171208231427/http://ftp.lyx.de/Lectures/SuperformulaU.pdf)
The speed of the point on some curves can vary dramatically which results in high frequencies (but also very interesting sounds) and may upset connected VCFs.
If you still want to use it, I'd recommend to start with simple curves e.g. M1=M2 and avoid sharp, pointy curves. (use rather the red curve in the image above and not the yellow one).
The SuperLFO module outputs super formula curves (x and y). It can be used as LFO and as normal polyphonic Oscillator by moving the freq button to maximum (261.63 HZ).
If the frequency is set to the lowest value it is treated as zero. Then it can act as phase driven oscillator by using the phs input.
The current curve can be visualized by placing the plotter module on the right side of SuperLFO.
AddSynth is a monophonic two-dimensional additive synthesizer. The first dimension is defined by the ratios of the partials and the corresponding amps which are modulated by the polyphonic amp inputs. The second dimension is defined by the wave which is applied for each ratio.
The incoming amps can be attenuated by an exponential falling curve towards the higher frequencies. A dmp value of 0 causes the strongest attenuation.
The ratios and waves are defined in res/addsynth_default.json in the dbRackModules plugin directory. You can copy this file to addsynth.json in the same directory and make your own version of it. If it can be read without errors it will be taken instead otherwise it falls back to addsynth_default.json (which should never be changed)
This module makes pads using Paul Nascas PadSynth algorithm. Simply checkout these beautiful sounds by playing around with the for parameters after connecting a polyphonic v/oct source. Hint: the partials amps used for the IFFT are randomly generated (parameter seed) using different methods (parameter Mth).
New in 2.1.0:
https://user-images.githubusercontent.com/1134412/175531007-b2eea729-f7a9-4a7a-b85f-fd39fe1a0094.mp4
This module makes pads using Paul Nascas PadSynth algorithm. It is maybe the first module implementing the PadSynth algorithm which is capable of smooth handling every parameter change. The wave is computed completely in the background not affecting any CPU usage inside VCV Rack. But it may turn on the fan of your computer if a lot of parameter changes are made in short distances e.g. connecting an LFO to the BW input. The background processing may occupy another CPU with about 20-30%.
Changes to PAD:
Here an example:
https://user-images.githubusercontent.com/1134412/175530867-e04047da-146c-4667-b8dc-3d69b7ba6382.mp4
Thanks to Paul Piko and Dave Benham for testing and feature requests.
This is a small version of PAD2. It has to be fully controlled by the partial inputs and inputs for BW and Scl.
The Faders module can be used for controlling µPad2. The following example shows how to transfer a sound from PAD2 to µPad2 using the Fader module. The Fader module has a special function for fetching the values of PAD2 by placing it on the right side of PAD2, placing the mouse cursor over the Faders module and pressing 'f'.
https://user-images.githubusercontent.com/1134412/175530919-0f10c530-6997-4db3-b431-832ff227e617.mp4
This is a port of Supercolliders gendy which is based on the work of Peter Hoffmann who has rebuild GENDYN from Iannis Xenakis.
A tiny sample based drum module with pitch, gain, decay controls.
Some alias-free oscillators which generate the wave form via adding 256-512 partials. The computation is done in the background and not in the main audio thread. Therefore, there is a menu which controls the buffer size used to communicate between the generator and audio output. If the oscillator makes noisy sounds the buffer size should be increased. The communication via the buffer on higher sizes may introduce a small delay of the audio output which can be compensated via a delay of e.g. 10ms on the trigger gates for vca/env module connected behind
A fast polyphonic Steiner Parker filter.
A fast polyphonic stereo Sallen Key filter. As the filter is reacting very sensitive on changes of the cutoff frequency, there is a slew limiter on the frequency input. The slew amount can be configured in the menu.
A fast polyphonic stereo linear 4 pole filter
A fast polyphonic unstable state variable filter with overdrive control
A fast polyphonic 4 pole Chebyshev type 1 filter
A polyphonic allpass filter. A building block for phasers and reverbs.
A cpu friendly polyphonic Rack v2 version of the Lockhard Wavefolder released in the JE-plugin for Rack v1.
A cpu friendly polyphonic Rack v2 version of the Diode Rimg Modulator released in the JE-plugin for Rack v1.
A cpu friendly stereo polyphonic Rack v2 version of the Sharp Wavefolder of the Agave Rack v1 plugin.
A cpu friendly stereo polyphonic waveshaper based on the De Jong Attractor algorithm of Nozoïd Sin WS.
A cpu frienfly stereo polyphonic clipper/waveshaper/satrurator/overdrive with 9 different selectable algorithms
sgn(x)*(1-e^(-|x|))
x/sqrt(1-x*x)
x/(1-|x|)
A cpu friendly polyphonic chebyshev waveshaper with up to 16 coefficients (to be passed in the polyphonic input)
This is a stereo polyphonic dc blocker.
Use the default order to dc block and the lower orders for stronger highpass filtering. This is a reimplementation of the Csound dcblock2 algorithm for Rack.
An fft-based pitch shifter from the gamma library.
Port from Csounds reverbsc opcode. This is an 8 delay line reverb.
Port of a 5x5 waveguide mesh reverb from Jon Christopher Nelson and Michael Gogins (https://github.com/gogins/csound-extended/tree/master/Opcodes/MVerb) with the following differences: There is no equalizer on each delay line (would cause 1000 biquad filter operations). The randomization of the mesh frequencies can be done by the frequency modulation inputs.
The standard presets are provided in the factory presets of the module.
New in 2.1.0: The MVerb can now be run in a threaded mode (the default setting in the menu) which puts the heavy computing into a background thread. It should now run below 1-2% CPU. If there are audio glitches the thread buffer size can be increased in the menu.
Yet another chorus, this one can be modulated.
Long time I wondered why chorus, flangers almost only have an internal LFO with a sine wave. So I built this one. If the ModL and ModR inputs are connected they were taken instead of the internal LFO. The rate parameter is ignored in this case and the depth parameter is used as attenuator for the incoming modulation signal.
Here an example using Caudal from VULT as modulator. With intent a just chord is used to avoid 'built in' chorus effects which occur in 12edo (de-)tuning.
https://user-images.githubusercontent.com/1134412/171022165-66ec0706-2f26-4b07-ad21-0d18babe37e1.mp4
A brickwall filter. Uses FFT to cut frequencies. It is more an effect as a filter ... The fft size which determines the latency can be configured in the menu.
A bpm controlled mono to stereo ping pong delay with sends and returns.
RndH is a polyphonic, seedable random and hold with 3 Outputs serving different distributions:
If Strength = 1 all outputs deliver a uniform distribution. The image below shows the difference between the distributions for higher strength values.
If the seed input is not connected or 0 the system time is used as seed on every RST trigger. Otherwise, the seed is built from the provided value 0<x<=10. In this case for each seed you will get exactly the same sequence on every RST Trigger.
The number of output channels can be adjusted with the Chn Knob.
When no clock is connected RndH outputs the noise as audio stream.
RndC is similar to RndH but outputs a (very) smooth polyphonic signal using cubic interpolation. Because of this RndC may produce lower/higher voltages as 0V/10V in unipolar mode and -5V/5V in bipolar mode. I have foregone to scale it as it is done better outside (and potentially different for each usecase). By scaling with 0.8 and adding 1V the normal range should be achieved. But this you may not want for the min distribution or weibull.
This image shows from left to right: min, weibull, tri with strength 10 and uniform.
Additions over RndH:
The module does the same as Count Modulas Clocked Random Gates but is full polyphonic, seedable and a bit smaller sized. The probabilities can be provided via the polyphonic prop input (-5V/5V, 0V = 50%).
RndHvs3 uses a 3d HVS Cube (similar to Csounds hvs3 opcode) filled with seedable random values of different distributions. The cube values are defined by a 3d lattice of size 7x7x7 where on each node in the lattice there are put 32 random values.
The values in between the nodes and on the vertices are linearly interpolated.
The x,y,z inputs (0-10V) define the (continuous) point in the cube for which the 32 values are outputted through the two polyphonic output ports. It will output a smooth signal on every output channel if the input is a smooth signal.
A polyphonic gaussian random trigger around a given frequency and deviation. The used random values can also be plugged in via the src input. If Chn > 1 then on each internal trigger the output channel is randomly chosen.
HexSeq is a 12x64 step trigger sequencer in a very compact format.
It accepts hex digits 0123456789ABCDEFabcdef*
an interprets one hex digit as 4 steps according
to the bit representation of the hex number. The original idea is from Steven Yi in his Csound live coding toolset.
The asterix (*) causes a hex char to be randomly choosen on every hit.
The only thing you must master to remember are the bits of the 16 digits:
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111
The sequence is always looped according to length*4 of the input. So the input '8' makes a trigger per beat if clocked with 1/16, '2' makes the typical hihat, '08' makes the typical snare.
If the hex sequence is edited or changed it appers as red. You must press enter to activate it (makes it green).
As usual due to the one sample delay per cable, it is recommended always to feed the clock delayed by 2-10 samples so that the rst is triggered for sure before the clock.
New features in 2.0.4:
new key commands for active fields:
if the mouse is over the module the field 1-9 can be focused by pressing key 1-9
new Expander HexSeqExp
Presets for learning purposes (Thanks to Andras Szabo)
Menus for randomization settings - Bit density, Length Range
Lights for the current Step - can be turned on/off in the menu
Thanks to Andras Szabo and Dave Benham for feature suggestions/requests.
HexSeqP is a 16x16x64 step trigger sequencer. Similar to HexSeq but with 16 selectable patterns.
The patterns can be selected via the pattern input in two modes (configurable in the menu):
For the description of the polyphonic outputs see HexSeq and HexSeqExp.
An internal incoming clock delay can be configured in the menu.
Frac is a monophonic function and hold module with a simple function. It devides two integer numbers N and P and outputs step by step their expansion for the given base (ranging from 2 to 16) scaled by the Scl Parameter and added to base volt value. The offset parameter causes the sequence to be started on an RST trigger from the given value.
Hopa is a monophonic function and hold module which outputs the sequence of the hopalong attractor for the given start values x0,y0 and the parameters a,b,c.
x=x0, y=y0
xnew=y-sqrt(abs(b*x-c))*sign(x)
ynew=a-x
If the CLK input is not connected it outputs the hopalong attractor as audio. In order to hear this interesting sound it is best to filter out the 10K band a much as possible and push the lower bands.
Some compact polyphonic matrix mixers with modulation.
This module is kind of similar to the unless towers module. It provides the following features:
This module does the same as PolyCon from Bogaudio but
An ADSR with built in VCA. Designed for using with FM Operators.
This module applies a ratio to the incoming V/Oct signal. Designed for using with FM Operators.
AUX mixes a stereo polyphonic signal down to a stereo monophonic signal. It can either be used to sum a polyphonic signal and additionally attenuate single channels, or it can be used as 16 channel stereo mixer by merging monophonic stereo signals into a polyphonic signals. The values (0-10V) of the polyphonic Lvl input are divided by 10 and then multiplied with the corresponding parameter value. By using 10V Gates on the Lvl input single channels can be turned on and off. To avoid clicks there is a slew limiter processing the incoming level values.
A polyphonic Schmitt Trigger module
JTScaler tunes a 12edo V/Oct standard input to a just intonation scale.
The scales selectable via the scale knob are defined in res/default_scales.json in the dbRackModules plugin directory. You can copy this file to scales.json in the same directory and make your own version of it. If it can be read without errors it will be taken instead otherwise it falls back to default_scales.json (which should never be changed)
GenScale a polyphonic 16 note scale defined by the toggled buttons.
Interface is a utility to define an input/output interface for a group of modules or saved selections. It does not apply anything to the inputs.
Plots a polyphonic 2D Signal.
0.625+0.625/2 = 0.9375
would output input1*0.5 + input2*0.5
. P16 delivers exactly the values for addressing the inputs (no interpolation).
In this example the rndh delivers arbitrary values between 0-10V. So the inputs are interpolated.
Here a lfo is used to scan 4 pulsars (continuously)
In this example rndc with 4 channels scans each note of the chord differently.