illogic

illogic · utilities

Combined 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.

A three-in-one CV utility: a four-channel attenuverter, a sum/difference mixer, and a digital logic block, all sharing the same four inputs. Each input runs through its own bipolar attenuverter knob (-1 to +1) and that attenuverted signal appears on its own ATT output AND feeds two mix buses: SUM (all four added) and DIFF (channels 1+2 minus channels 3+4). Separately, inputs 1 and 2 are treated as gates — thresholded at 0.5 — and combined into clean 0/1 AND, NAND, and OR outputs, while input 1 alone drives a NOT output. So you can attenuvert and mix CV on one half while deriving Boolean gate logic from the first two channels on the other — invert an LFO, blend modulation, and gate-AND two clocks, all from one module. (For continuous min/max/product math instead of digital 0/1 logic, see ANALOGLOGICMATHS.) THREE THINGS TO KNOW BEFORE YOU PATCH IT, all measured on the shipping factory (art/scenarios/illogic/face-audit.test.ts). First, THE FOUR KNOBS DO NOT REACH THE FOUR LOGIC JACKS. The logic block thresholds the RAW inputs, before the attenuverters, so sweeping any knob its full -1 to +1 travel moves AND, NAND, OR and NOT by bit-exactly zero. That is correct and deliberate — an attenuverted gate is not a gate — but a card showing four faders above ten jacks implies the opposite, so the faceplate prints the logic block's gain (always x1.00) next to the two mix buses' gains, and its routing picture draws the boolean taps branching upstream. Second, SUM AND DIFF ARE UNSCALED AND WILL RUN A DOWNSTREAM INPUT OFF ITS RAILS. There is no 1/n, so with four full-scale +/-1 sources and the shipped +1 knobs either bus reaches +/-4.00 on a CV convention of +/-1; a deliberately modest 0.9/0.9/0.6/0.4 stimulus already puts SUM outside +/-1 on 26.8% of samples and DIFF on 39.2%. Turn the channels you are not using to 0, or attenuate downstream. The faceplate prints the live worst case as `peak`. Third, DIFF IS A COMMON-MODE NULL AT THE SHIPPED DEFAULTS. Its gain on a signal present at every input is (att1 + att2) - (att3 + att4), which is exactly 0.00 when all four knobs sit at their default +1 — so patching the same CV into all four inputs gives you SUM at x4 and DIFF at silence until you unbalance a knob. That is a useful instrument (it is what makes DIFF a difference-taker rather than a second mixer) and it is invisible on a card showing four identical faders at maximum.

the faceplate

illogicin1cvin2cvin3cvin4cvatt1cvatt2cvatt3cvatt4cvsumcvdiffcvandgatenandgateorgatenotgateaudiocvgatepitch
4 inputs · 10 outputs · 4 params

inputs

idcablewhat it does
in1cvSignal 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)
in2cvSignal 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)
in3cvSignal input 3 (CV or audio). Scaled by ATT3 and added to SUM, subtracted in DIFF. Not part of the logic block.
control voltage (CV)
in4cvSignal 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

idcablewhat it does
att1cvInput 1 after its attenuverter (in1 × Att1) — a per-channel attenuverted/inverted copy.
control voltage (CV)
att2cvInput 2 after its attenuverter (in2 × Att2).
control voltage (CV)
att3cvInput 3 after its attenuverter (in3 × Att3).
control voltage (CV)
att4cvInput 4 after its attenuverter (in4 × Att4).
control voltage (CV)
sumcvThe 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)
diffcvThe 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)
andgateLogic 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)
nandgateLogic 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)
orgateLogic 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)
notgateLogic 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

idlabelrangedefaultcurve
att1_amountAtt1-1..11linear
att2_amountAtt2-1..11linear
att3_amountAtt3-1..11linear
att4_amountAtt4-1..11linear

controls

controlwhat it does
Att1Channel-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.
Att2Channel-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.
Att3Channel-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.
Att4Channel-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.

Generated from packages/web/src/lib/{audio,video}/module-registry.ts · repo