illogic
illogic · utilitiesCombined attenuverter / math / logic utility. 4 cv inputs feed bipolar attenuverters (-1..+1); post-attenuverter outputs sum into `sum` and `diff`. Inputs in1+in2 are also gate-thresholded (>= 0.5) and combined into AND/NAND/OR; in1 alone drives a NOT.
the faceplate
4 inputs · 10 outputs · 4 params
inputs
| id | cable | what it does |
|---|---|---|
in1 | cv | Signal input 1 (CV or audio, bipolar). Scaled by the ATT1 knob, summed into SUM/DIFF, and also thresholded at 0.5 as the first logic gate (it drives AND, NAND, OR and the NOT output). control voltage (CV) |
in2 | cv | Signal input 2 (CV or audio, bipolar). Scaled by ATT2, summed into SUM/DIFF, and thresholded at 0.5 as the second logic gate (AND, NAND, OR). control voltage (CV) |
in3 | cv | Signal input 3 (CV or audio). Scaled by ATT3 and added to SUM, subtracted in DIFF. Not part of the logic block. control voltage (CV) |
in4 | cv | Signal input 4 (CV or audio). Scaled by ATT4 and added to SUM, subtracted in DIFF. Not part of the logic block. control voltage (CV) |
outputs
| id | cable | what it does |
|---|---|---|
att1 | cv | Input 1 after its attenuverter (in1 × Att1) — a per-channel attenuverted/inverted copy. control voltage (CV) |
att2 | cv | Input 2 after its attenuverter (in2 × Att2). control voltage (CV) |
att3 | cv | Input 3 after its attenuverter (in3 × Att3). control voltage (CV) |
att4 | cv | Input 4 after its attenuverter (in4 × Att4). control voltage (CV) |
sum | cv | The signed sum of all four attenuverted channels: att1 + att2 + att3 + att4. A four-input CV mixer with per-channel invert. ⚠ UNSCALED — there is no 1/n, so four full-scale ±1 sources at the shipped +1 knobs drive this jack to ±4.00 on a bus whose convention is ±1, and even a modest 0.9/0.9/0.6/0.4 stimulus puts it outside ±1 on 26.8 % of samples (measured). Its worst case is Σ|attN|, which the faceplate prints live as `peak`; turn unused channels to 0 or attenuate downstream. control voltage (CV) |
diff | cv | The signed difference (att1 + att2) − (att3 + att4): channels 1–2 lifted, 3–4 subtracted. Good for anti-correlated modulation from two pairs. ⚠ AT THE SHIPPED DEFAULTS THIS IS A COMMON-MODE NULL: its gain on a signal present at every input is att1 + att2 − att3 − att4 = 0.00 with all four knobs at +1, so patching one CV into all four jacks leaves DIFF silent until you unbalance a knob — which is what makes it a difference-taker rather than a second mixer. The faceplate prints that gain live as `diff`. ⚠ Also UNSCALED, with the same ±4.00 worst case as SUM (39.2 % of samples outside ±1 on the stimulus above). control voltage (CV) |
and | gate | Logic AND of inputs 1 and 2 (each thresholded at 0.5): goes high (1) only while BOTH are at or above threshold, otherwise low. A clean gate — and one the attenuverters cannot touch, because the threshold reads the RAW input (see the AND/NAND/OR/NOT note on ATT1). Rests LOW (0.00) with nothing patched. gate / trigger; gate — acts while the level is high (reacts to both edges) |
nand | gate | Logic NAND — the inverse of AND: high (1) unless both inputs 1 and 2 are at or above threshold, in which case it goes low. ⚠ IT RESTS HIGH: with nothing patched it emits a constant 1.00, so an unpatched ILLOGIC will hold a downstream envelope or VCA gate open from the moment it spawns. That is correct NAND behaviour (both inputs are low, so NOT-AND is true) rather than a fault, but it is not what an idle jack usually does. gate / trigger; gate — acts while the level is high (reacts to both edges) |
or | gate | Logic OR of inputs 1 and 2: high (1) while EITHER is at or above threshold, low only when both are below. Rests LOW (0.00) with nothing patched. gate / trigger; gate — acts while the level is high (reacts to both edges) |
not | gate | Logic NOT of input 1 alone: high (1) while input 1 is below threshold, low while it is at or above — an inverted gate of channel 1. ⚠ LIKE NAND, IT RESTS HIGH: with nothing patched it emits a constant 1.00 (input 1 is low, so NOT is true), which will hold a downstream gate input open on an untouched module. gate / trigger; gate — acts while the level is high (reacts to both edges) |
params
| id | label | range | default | curve |
|---|---|---|---|---|
att1_amount | Att1 | -1..1 | 1 | linear |
att2_amount | Att2 | -1..1 | 1 | linear |
att3_amount | Att3 | -1..1 | 1 | linear |
att4_amount | Att4 | -1..1 | 1 | linear |
controls
| control | what it does |
|---|---|
| Att1 | Channel-1 attenuverter (-1 to +1, default +1): scales input 1 on its way to the ATT1 output and the SUM/DIFF buses. +1 passes it through, 0 mutes it, negative values invert its sign. ⚠ IT REACHES SIX OF THE TEN OUTPUTS AND NONE OF THE FOUR LOGIC JACKS. AND, NAND, OR and NOT threshold the RAW input, so this knob's full -1 to +1 travel moves all four of them by bit-exactly zero (measured through this module's own factory, art/scenarios/illogic/face-audit.test.ts). ⚠ AND A LEVEL METER CANNOT SEE HALF OF WHAT IT DOES: -1 and +1 differ only in SIGN, so ATT1's RMS, peak and spectral centroid are identical at both ends of the dial while the output is inverted. The faceplate's routing picture hatches the triangle when the coefficient is negative for exactly this reason. |
| Att2 | Channel-2 attenuverter (-1 to +1, default +1): scales input 2 into ATT2 and the mix buses; 0 mutes, negative inverts. The logic block still reads the raw input 2. |
| Att3 | Channel-3 attenuverter (-1 to +1, default +1): scales input 3 into ATT3, adds it to SUM and subtracts it in DIFF; 0 mutes, negative inverts. ⚠ CHANNELS 3 AND 4 ARE NOT INTERCHANGEABLE WITH 1 AND 2: they reach three outputs rather than six or seven — no logic jack taps them, and DIFF subtracts them where it adds channels 1 and 2. That polarity split is what makes DIFF a common-mode null at the shipped defaults, so this is the knob that breaks the null. |
| Att4 | Channel-4 attenuverter (-1 to +1, default +1): scales input 4 into ATT4, adds it to SUM and subtracts it in DIFF; 0 mutes, negative inverts. Reaches three outputs and no logic jack — see ATT3. |
source
illogic.ts on GitHub.