# The live node, and three workflows

## `analysis_bass` — the numbers in the signal path

Offline is for decisions; live is for watching. The **Bass Analyzer** node (`analysis_bass`, category *Analyzers*) is a stereo passthrough with eleven bargraphs: momentary LUFS (BS.1770, 400 ms), crest over 1 s, energy share for all six bands, and L/R correlation in sub, fund and harm. Drop it in a Builder as an insert — `input → analysis_bass → output` — and put that Builder on a track's FX chain or the master rack; the Inspector shows the meters while it plays.

Six of the numbers are also **control outputs** (`lufs`, `crest`, `sub_db`, `fund_db`, `harm_db`, `corr_sub`), so a patch can react to them: auto-mono the low end when `corr_sub` drops, sidechain something on `lufs`.

The bundled demo ships `Bass Analyzer.builder` ready to insert:

```yaml
actions:
  - action_id: documents.list
    input: {}
    label: "▶ Find Bass Analyzer.builder in the project"
```

Then `mixer.tracks.fx.add` with the file as ref on the track you want to watch. Bands are 4th-order Butterworth (two cascaded 2nd-order stages) with 300 ms smoothing — the same filters as the offline analyzer.

## Workflow 1 — the tweak loop

1. Play the scene. 2. `analysis.capture { bars: 4, reference: "trap-808" }`. 3. Change ONE thing (`dsp.param.set`, a fader, an insert param). 4. Capture again. 5. Keep what moved the number the way you meant.

The whole Around-the-World 808 was tuned this way: harm band *below* → `harm_level` up; sub *above* and "too thick" → an octave up and `body_level` down; crest 14 on the bass alone → the clipper insert. Four bars is enough; eight when the pattern is eight.

## Workflow 2 — the sample audition

Before a sample goes into a kit:

```yaml
actions:
  - action_id: samples.list
    input: {}
    save_as: store
    label: "▶ 1. List the store"
```

then `analysis.sample { sha256 }` per candidate. Rules that came out of the alarm-clock pack: hats, claps and snares must read `"noise"` with `peakBinShare <= 0.03`; a kick's `strongestLowBinHz` should sit **above** the 808 (a trap kick is a knock, not a sub); a sample whose `crestDb` is under 5 is a constant tone and will end hard — give it an envelope, or let the player's end-fade handle it.

## Workflow 3 — the click hunt

Something crackles. Do not guess which instrument.

1. Capture the mix; note the `steps` count and the onsets with `isClick` **and** a low `hfRelDb` (a click on a bass note, not a hat).
2. Solo one track (`mixer.tracks.set { track_id, soloed: true }`), capture again. A clean 808 reads a `steps` count of 0.
3. Move the solo until the steps appear. In the demo they were in the sampled 808 layer: the sample restarted on sample 0 while the previous hit still rang, and it ended without reaching zero — a player bug, fixed in the `soundfile` node (two read heads with a crossfade, end fade). The measurement went 3 → 0.
4. Remember that noise material *always* shows steps. For a kit, the number that counts is the `isClick` on its low-frequency onsets, and after that the ear.

## Where to go from here

- **FaustWave — Recorder** — the takes the analysis reads are Recorder files; `recordings.list` is the picker.
- **FaustWave — Mixer & Master** — solo, track inserts, the master rack the capture listens after.
- The *Around the World* book — every rule in this chapter with the measurement that made it.
