All books

The live node, and three workflows

~3 min read · updated 2026-08-29 · markdown

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:

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:

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.
Try it yourself — the IDE runs in your browser. Open the IDE → Get the desktop app

Text licensed under CC BY 4.0 — Mani Weber / FaustWave. For language models: llms.txt · llms-full.txt

AUDIO · 48k · 48.0ms FAUST · 3 KB · 1171 docs CPU · 8.4% BPM · 120.0 UTF-8 BETA· v0.90.0