# Hearing is proof: testing sound without fooling yourself

"It compiles and runs" is not the same as "it makes sound". FaustWave's
house rule — for humans AND the assistant — is **hearing is the proof**:
a DSP counts as working when a test note is audible, confirmed by ears
or by the master meters read at the right moment.

The *right moment* matters more than it looks. A hard-earned lesson:

- `midi.note.play` **blocks until its note-off** — the call returns after
  the note has ended.
- The master peak-**hold** decays within a second or two.
- Therefore a meter read *after* a `midi.note.play` call always lands in
  the decay and shows ~zero — **fake silence**. An entire evening of
  bisecting was once spent chasing this artifact across three builds while
  every "silent" note was audibly playing.

The two reliable measurement windows:

1. **A held note** — `keyboard.note.on` sustains until you release it, so
   a meter read in between measures the live signal.
2. **A loop** — a playing sequencer pattern gives you an arbitrarily long
   window; read the meters mid-loop.

## Prove it, hands-free

Run this with an instrument DSP running and routed (the previous
sections' tutorial DSP works):

```yaml
actions:
  - action_id: keyboard.note.on
    input: { note: 69, velocity: 100 }
    label: "▶ 1. Hold a note (no note-off yet)"
  - action_id: system.state
    input: { sections: ["master"] }
    save_as: meters
    label: "▶ 2. Read the master meters WHILE it sounds"
  - action_id: keyboard.notes.clear
    input: {}
    label: "▶ 3. Release the note"
```

Step 2's `peakL`/`holdL` show the live level — that's your objective
audibility proof. Values like `1e-5` mean genuinely nothing is sounding
(check routing, channel filter, mixer mutes — in that order).

> 🟦 **SILENCE NEEDS A WITNESS**: before treating silence as a bug, confirm
> it by ear — yours, or ask the person at the speakers. Meters read at the
> wrong moment produce confident, reproducible, completely wrong evidence.
