All signals flow through the ER-301 at the same rate (48kHz or 96kHz, depending on the firmware) and there is the no difference between an audio signal or a modulation (aka CV) signal. As is natural for open-ended DSP environments like the ER-301, algorithms and their associated parameters are encapsulated into discrete blocks called units. However, distinct from other open-ended environments (such as Max or Pd), I opted for a restricted form of signal routing in order to avoid the complications that arbitrary networks cause for UI design. I believe that the ER-301's restricted style of signal routing has grown to be one of its core strengths.
A Patching Language
Signal routing and processing in the ER-301 are handled according to the following 3 rules:
- A chain is a sequence of zero or more units where signal flows from left to right.
- A unit encapsulates a signal processing algorithm and exposes the algorithm's parameters as controls.
- Unit controls are modulated by other chains.
In the following diagram, we can see how this recursive signal flow can extend as deeply as necessary to meet (most of) a patch's signal routing requirements.
A concrete example: Let's consider a simple example to ground these concepts. In the patch depicted below, an audio signal is tapped from external input IN2 and fed into a Linear VCA unit. The level control of the Linear VCA unit is modulated by another (sub)chain which contains an ADSR unit that is excited by a gate signal arriving at external input G4. After the Linear VCA unit, the signal is further processed by a Ladder LPF (low pass filter) unit whose frequency control is modulated by a Sin Osc unit. The final output of this patch is routed to the output OUT3.
A chain is a sequence of units with signal coming in to the chain via a source, flowing through the units and then leaving the chain via a sink. All sinks have exactly one chain associated with them, making sinks and chains one-to-one.
A sink may be:
- one of the 4 outputs (OUT1-4).
- the control port of a unit (e.g. the speed control of a Sample Player unit).
- the source of another chain.
It is never required to assign a sink to a chain. Instead, every sink is associated with its own chain already. In fact, the name of a chain corresponds to the name of its sink because they are in fact synonymous. This just reflects the fact that a sink can only be fed a signal from one chain at a time. Contrast this to how sources can have their signals routed to as many destinations as necessary.
The name section of the chain UI (also referred to as the header) shows a menu (in the sub-display) when it is focused:
- Clear: Deletes all units in the chain.
- Load: Load a chain preset from the SD card.
- Save: Save the current chain's state (source assignments and units) to a preset file on the SD card.
A source may be:
- one of the 20 external inputs (G1-4, IN1-4, ABCD1-3).
- one of the signal-generating units (e.g. Sample Player, Sine Osc, and so on).
- the output of another chain (e.g. global or local chains).
You select a chain's source by using the source menu located in the header of a chain. In the case of stereo chains, there will be separate source selection menus for each channel, left and right. Once entering the source selection screen, you are first presented with the 20 external inputs (plus a loop-back copy of the outputs OUT1-4). To access the local or global sources, press the choose (S1) button to cycle among the 3 types of sources. Scroll through the list with the knob and use the M1-6 buttons to first expand a section of sources and again to choose the desired source.
On the other hand, pressing clear (S3) will clear any existing source assignment from the focused channel.
Units can be inserted at any position in a chain by placing the cursor at the desired location (such as the beginning/ending of the chain, or, between two units) and pressing the insert (S3) button. This will bring you to the unit selection menu where you can choose from a growing library of units.
At the end of a chain is a level meter for each channel that displays the chain's final RMS signal level in decibels of full-scale (dBFS). The level meters display signal levels from -60dBFS to +12dBFS with a line indicating 0dBFS. In the case that the chain is routed to an output (OUT1-4) than any signal over 0dBFS will be hard clipped by the DAC.
A unit encapsulates a signal processing algorithm and exposes it parameters as controls. Signal enters a unit either from the left or via its control ports (from below). Signal leaves a unit from the right. Stereo chains will contain only stereo units, while mono chains will contain only mono units.
If you move the cursor over to any unit's header area (i.e. or press HOME while the cursor is inside a unit), the sub-display will switch to the unit's header menu containing 3 commands:
- Bypass: Re-route the chain's signal flow so that this unit is skipped.
- Re-init: Restore all unit parameters to their default values.
- Delete: Remove this unit from the chain.
Activating the Bypass command located in a unit's header menu will cause the unit's output to be disconnected from the next (non-bypassed) unit. The next unit will instead get its input from the previous (non-bypassed) unit.
There is a setting in Admin>Settings that let's you choose whether bypassing a unit should also disable it. In this context, "disabling a unit" means removing it from the DSP scheduler so that the unit no longer consumes CPU cycles. Un-bypassing the unit will re-enable it.
Most units have controls that allow you to alter the parameters of its algorithm. Various types of controls are needed to handle the wide variety of of algorithmic parameters as well as their various ranges and quantities (e.g. frequency, time, gain, pitch, and so on).
This is the most common and most versatile control type. It is essentially a modulation source plus controls for attenuation (gain) and offset (bias).
As its name implies, the final value of the parameter is derived by multiplying any incoming modulation by a gain and then adding a bias. If there is no modulation then the value of the parameter is just the bias. When you first select this control (with the M button underneath it), the knob will be focused to and controlling the bias parameter. You can use the S2 and S3 buttons to switch between adjusting the gain and bias parameters, respectively. To dive down into the modulation sub-chain, press S1. Pressing UP will deselect this control and restore focus to the chain.
The quantity, range and units of the bias value will depend on the actual parameter. Refer to the documentation for each unit for these details.
This control is used whenever we want to utilize a V/oct signal to sequence a unit's pitch (or pitch-like) parameter. There is no gain because scaling a V/oct signal would destroy the volt-per-octave relationship. However, you can transpose the incoming modulation up or down in cents (¢).
Why 10? This is the gain necessary to convert the internal signal range back to a voltage. Recall that the ABCDx inputs accept inputs from -10V to 10V and that signals in this range are digitized and mapped to the interval between -1 and 1. Multiplying by 10.24 essentially undoes this mapping so that we can operate on the voltages necessary for V/oct calculation.
This control changes its digital output (high/low, on/off) every time the incoming modulation crosses an adjustable threshold from below. Focusing this control (via an M button) and then pressing S2 will allow you to adjust the threshold. The S3 button will manually 'fire' additional gates into the unit. There are 3 ways that the digital output is derived from the input signal:
- trigger: Positive going edges cause instantaneous (single sample) trigger events.
- gate: The parameter is ON only while the incoming signal exceeds the threshold.
- latch: If OFF, a positive going edge cause the parameter to turn ON. If ON, a positive going edge cause the parameter to turn OFF.
Refer to the individual unit documentation for details on which behavior is configured for each unit control.
This control is used when modulation is not needed. It is designed for set-and-forget type parameters. When this kind of control is highlighted the sub-display will show a scope that portrays the output signal of the unit.
This control is used to select an option from a list of choices.