# Filters

Filters attenuate frequencies above or below a cutoff point.

## Lowpass Filter

The lowpass filter (`lpf`) attenuates frequencies above the cutoff.

```forth
saw 1000 lpf .               ( cut above 1000 Hz )
saw 500 lpf 0.8 lpq .        ( with resonance )
```

| Parameter | Range | Description |
|-----------|-------|-------------|
| `lpf` | Hz | Cutoff frequency |
| `lpq` | 0-1 | Resonance (peak at cutoff) |

## Highpass Filter

The highpass filter (`hpf`) attenuates frequencies below the cutoff.

```forth
kick 200 hpf .               ( cut below 200 Hz )
pad 400 hpf 0.3 hpq .        ( with resonance )
```

| Parameter | Range | Description |
|-----------|-------|-------------|
| `hpf` | Hz | Cutoff frequency |
| `hpq` | 0-1 | Resonance |

## Bandpass Filter

The bandpass filter (`bpf`) attenuates frequencies outside a band around the center frequency.

```forth
noise 1000 bpf 0.7 bpq .     ( narrow band around 1000 Hz )
```

| Parameter | Range | Description |
|-----------|-------|-------------|
| `bpf` | Hz | Center frequency |
| `bpq` | 0-1 | Resonance (narrower band) |

## Filter Slope

The `ftype` parameter sets the filter slope (rolloff steepness).

| Value | Slope |
|-------|-------|
| `1` | 12 dB/octave |
| `2` | 24 dB/octave (default) |
| `3` | 48 dB/octave |

```forth
saw 800 lpf 3 ftype .        ( 48 dB/oct lowpass )
```

## Filter Envelope

Filters can be modulated by an ADSR envelope. The envelope multiplies the base cutoff:

```
final_cutoff = lpf + (lpe × envelope × lpf)
```

When the envelope is at 1.0 and `lpe` is 1.0, the cutoff doubles. When the envelope is at 0, the cutoff equals `lpf`.

```forth
saw 200 lpf 2 lpe 0.01 lpa 0.3 lpd .   ( cutoff sweeps from 600 Hz down to 200 Hz )
```

| Parameter | Description |
|-----------|-------------|
| `lpe` | Envelope depth (multiplier, 1.0 = double cutoff at peak) |
| `lpa` | Attack time in seconds |
| `lpd` | Decay time in seconds |
| `lps` | Sustain level (0-1) |
| `lpr` | Release time in seconds |

The same pattern works for highpass (`hpe`, `hpa`, etc.) and bandpass (`bpe`, `bpa`, etc.).

## Ladder Filters

Ladder filters use a different algorithm (Moog-style) with self-oscillation at high resonance.

```forth
saw 800 llpf 0.7 llpq .      ( ladder lowpass )
saw 300 lhpf 0.5 lhpq .      ( ladder highpass )
saw 1000 lbpf 0.8 lbpq .     ( ladder bandpass )
```

| Parameter | Range | Description |
|-----------|-------|-------------|
| `llpf` | Hz | Ladder lowpass cutoff |
| `llpq` | 0-1 | Ladder lowpass resonance |
| `lhpf` | Hz | Ladder highpass cutoff |
| `lhpq` | 0-1 | Ladder highpass resonance |
| `lbpf` | Hz | Ladder bandpass cutoff |
| `lbpq` | 0-1 | Ladder bandpass resonance |

Ladder filters share the lowpass envelope parameters (`lpe`, `lpa`, etc.).

## EQ

The 3-band EQ applies shelf and peak filters at fixed frequencies.

```forth
kick 3 eqlo -2 eqhi .        ( +3 dB at 200 Hz, -2 dB at 5000 Hz )
snare 2 eqmid .              ( +2 dB at 1000 Hz )
```

| Parameter | Frequency | Type |
|-----------|-----------|------|
| `eqlo` | 200 Hz | Low shelf (dB) |
| `eqmid` | 1000 Hz | Peak (dB) |
| `eqhi` | 5000 Hz | High shelf (dB) |

## Tilt EQ

Tilt EQ applies a high shelf at 800 Hz with up to ±6 dB gain.

```forth
pad -0.5 tilt .              ( -3 dB above 800 Hz )
hat 0.5 tilt .               ( +3 dB above 800 Hz )
```

| Parameter | Range | Description |
|-----------|-------|-------------|
| `tilt` | -1 to 1 | High shelf gain (-1 = -6 dB, 0 = flat, 1 = +6 dB) |
