Basic Signal Chain (VCO → VCF → VCA)
Basic Signal Chain (VCO → VCF → VCA)
A patch-register recipe for the canonical mono synth voice: oscillator into filter into amplifier, with an envelope modulating the VCA’s gain.
Pedagogical intent
VCO → VCF → VCA is the first diagram every beginner must internalize. Before a student can understand FM, ring modulation, or complex modular architectures, they need to know why a synthesizer has three separate modules for making a single sound:
- VCO (voltage-controlled oscillator) — generates the raw waveform at the desired pitch. It produces audio continuously regardless of whether a key is held; on its own it is just an uninterrupted tone.
- VCF (voltage-controlled filter) — shapes the timbre by attenuating certain frequencies. A low-pass filter at a low cutoff produces a muffled sound; opening the cutoff brightens it. This is where the characteristic “synth sweep” lives.
- VCA (voltage-controlled amplifier) — controls the volume over time. Without a VCA the oscillator plays forever; the VCA — driven by an envelope — gives the sound its loudness contour and ultimately silences it after the release segment.
The foundational insight is that pitch, tone, and loudness are each controlled by a dedicated module. This separation is not a quirk of modular synthesis — it is the architectural principle behind every subtractive synthesizer, hardware or software.
The envelope-to-VCA-CV cable is the second teaching moment: it illustrates a control-voltage relationship (CV kind, not audio kind). The purple CV cable visually separates the control path from the cyan audio signal chain, making the audio-vs-CV distinction tangible at a glance.
This is firmly patch register — it shows how modules connect, not what signal shapes look like. The companion plot-register diagrams for this lesson are adsr-comparison.svg (the envelope shape) and waveform-sine.svg (the oscillator output). Never mix these into one SVG; they answer different questions.
Visual recipe
- Canvas:
[720, 340]— wide enough for four symbols with comfortable cable routes; tall enough for the env-adsr below the main chain. - Layout: audio chain runs left-to-right at
y ≈ 90–130; env-adsr sits below aty ≈ 220. This places the CV cable on a clear vertical path into the VCA’s top (vca.cv). - Cable kinds:
- VCO → VCF → VCA:
kind: 'audio'(cyan),route: 'straight'— short horizontal hops. - env-adsr → vca.cv:
kind: 'cv'(purple),route: 'orthogonal'— routes around the VCA’s bottom-right corner to arrive on the top.
- VCO → VCF → VCA:
- Labels: “Audio Out” to the right of VCA; “env modulates VCA gain” below env-adsr.
- Attribution:
attribution: true— mandatory for all patch-register diagrams.
The vertical offset between circle-housed symbols (VCO, env-adsr; h = 80) and triangle-housed symbols (VCF, VCA; h = 88) is bridged by nudging the triangle symbols to triangleY = audioY - 4, so the audio center-lines align horizontally at y ≈ 130.
Composer call
import { patch, sym, cable, label, at, near, from, to } from '../core/patch.js';
const audioY = 90; // top-y for circle-housed symbols (h=80)
const triangleY = 86; // top-y for triangle-housed symbols (h=88) — centers align
const envY = 220;
const svg = patch({
size: [720, 340],
symbols: [
sym('vco-sine', at(40, audioY)),
sym('vcf-lowpass', at(200, triangleY)),
sym('vca', at(400, triangleY)),
sym('env-adsr', at(400, envY)),
],
cables: [
cable(from('vco-sine.out'), to('vcf-lowpass.in'), { kind: 'audio', route: 'straight' }),
cable(from('vcf-lowpass.out'), to('vca.in'), { kind: 'audio', route: 'straight' }),
cable(from('env-adsr.out'), to('vca.cv'), { kind: 'cv', route: 'orthogonal' }),
],
labels: [
label('Audio Out', near('vca', 'right')),
label('env modulates VCA gain', near('env-adsr', 'bottom')),
],
attribution: true,
});
This is the exact call shape used in generateBasicSignalChain() in sub-packages/synth-svg/src/generators/patch-diagrams.ts. The compiled SVG is written to static/images/synth-svg/patch-basic-signal-chain.svg via generate:files.
MDX reference: /images/synth-svg/patch-basic-signal-chain.svg.
Symbol ids used:
vco-sine— circle-housed; anchors:out(right edge)vcf-lowpass— triangle-housed; anchors:in(left edge),out(right edge)vca— triangle-housed; anchors:in(left edge),out(right edge),cv(top edge — synthetic anchor added inptAnchors)env-adsr— circle-housed; anchors:out(right edge)
Source articles
synth-kw-signal-flow— the primary target article for this diagram. Planned, not yet using patch diagrams (as of 2026-05); the article currently describes the chain in prose. When the article adopts patch diagrams, reference/images/synth-svg/patch-basic-signal-chain.svgas the opening full-chain illustration, followed by plot-register diagrams for envelope shape and waveform.- Any future
mm-deep-*article that introduces modular synthesis architecture — this diagram is the canonical starting point before showing any specialized patch. - Generator implementation:
sub-packages/synth-svg/src/generators/patch-diagrams.ts(generateBasicSignalChain)