Skip to content

The analyser

The :scope node is more than an oscilloscope. It is an analyser: a single graph node that draws a time-domain trace, a frequency spectrum, harmonic markers, and a live pitch + note readout — all from whatever signal you wire into it.

This page explains what the analyser shows, how to read it, and how to drive it from the keyboard.

Drop a :scope after any signal source and the canvas paints four layers:

  • Grid — a 10×8 division grid, like a classic oscilloscope.
  • Trace — the time-domain waveform (green polyline).
  • Spectrum — frequency magnitudes in dB (cyan bars, log frequency 20 Hz – 20 kHz).
  • Harmonic markers — vertical orange lines at the fundamental and its first eight overtones; odd harmonics are saturated, even harmonics dimmer, so you can see whether a wave is odd-only (square) or full-stack (saw).

A measurement panel sits on top with the peak frequency, nearest note + cents, and clarity. Pinned cursors and a Δf readout layer in when you start measuring.

When the signal has a stable pitch, the trace locks — the waveform stops scrolling and sits still on the screen, aligned to a rising zero-crossing with sub-sample precision so it doesn’t wiggle one pixel per frame. Drop pitch (or feed noise) and clarity falls below 0.3, the lock releases, and the trace free-runs while a no lock indicator appears in the top-right. The transition is hysteretic: lock re-engages once clarity climbs back over 0.4, so signals hovering near the threshold don’t flicker.

ReadoutWhat it tells you
Peak HzSub-bin-accurate frequency of the loudest spectral peak (QIFFT).
Note + centsNearest equal-tempered note, A = 440 Hz reference, with cents offset.
Clarity0–1 confidence that the signal has a well-defined pitch (MPM).
no lockShown top-right when clarity drops below 0.3 — the scope free-runs.
ΔfWhen both cursors are pinned, the absolute distance between them.

The pitch tracker (McLeod Pitch Method) is phase-robust, which is why a saw plus sub-oscillator still locks where naive zero-crossing would jitter.

  • Click the canvas to pin cursor A. Shift-click pins cursor B.
  • Click within ~12 px of a peak → the cursor snaps to the parabolically-interpolated peak frequency.
  • Tab cycles cursor focus (A → B → A). The focused cursor draws thicker.
  • / nudge the focused cursor by one FFT bin.
  • f locks the harmonic marker fundamental (f0) to the focused cursor’s frequency — point at any peak, hit f, and the harmonic stack snaps to it.

When a :scope node is focused, single-letter keys drive it:

KeyAction
Spacepause / run
.freeze frame
htoggle harmonic markers
ntoggle axis (engineering ↔ musical)
mtoggle measurements panel
gtoggle grid
rreset to defaults
bcycle FFT size (2048 / 4096 / 8192 / 16384)
wcycle window (Hann / Blackman-Harris-4 / flat-top)
ptoggle peak hold
flock f0 to focused cursor
Tabcycle cursor focus
/ nudge focused cursor ±1 bin
?toggle help overlay
  • FFT size 4096 at 44.1–48 kHz gives ~11 Hz bin resolution and, with QIFFT interpolation, well under one cent of error on a clean tone.
  • Hann window is the all-rounder; Blackman-Harris-4 is better for closely-spaced peaks; flat-top is for accurate amplitude readings. Window switches automatically apply coherent-gain correction so dB readings stay credible across windows.
  • dB floor −100 with peak-fullscale reference (0 dBFS = peak full-scale) — same convention as every consumer plugin.
  • Harmonics enabled with auto-tracked f0 and 8 markers, because seeing odd-vs-even harmonics is the educational payoff.

The full analyser configuration — FFT size, window, cursors, harmonic markers, axis mode, panel visibility — round-trips through patch save/load. Pin a cursor at 1320 Hz to teach the third harmonic of A4, save the patch, and the cursor is still there next session.