Skip to content

effects Phase 2: no board cost figure was taken at a patch that works the class — the cost runner's own probe idles six of Expander's seven #51

Description

@bdbarnett

Stakes. Every Phase 2 board figure was taken at construction defaults, and
the pattern revision's §1.4 already records that four of the sixteen handed the
probe back unchanged. This is the same defect one layer down, and it is worse
than the digest check can see: a class can differ from the bare probe's digest
and still be doing no work at all.

Measured, tools/expander_evidence.py --only boardpatch on branch
effects/p2b-expander, over measure_effect_cost.py's own 128 blocks:

the runner's probe is −20.03 dBFS RMS, −8.62 dBFS peak.

Expander patch digest wet:dry worst gain reduction
(bare probe) 4169efd90ecf44dd
0 Gentle Lift 2bbae09de08c393e −0.034 dB +0.00 dB IDLING
1 Noise Floor Trim 8094896422edfe43 −0.001 dB +0.00 dB IDLING
2 Snare Tighten df0a18570b91ff9d −0.240 dB −9.42 dB working
3 Guitar Amp Hum 2e054cf90264d160 −0.081 dB +0.00 dB IDLING
4 Room Reduction 04f32424baa949c6 −0.083 dB +0.00 dB IDLING
5 Hard Downward 29c081348924face −0.001 dB +0.00 dB IDLING
6 Expander - lean 2b8339e5f36901dd −0.002 dB +0.00 dB IDLING

Six of the seven idle: the probe sits above every threshold the class ships,
so the gain computer returns 0 dB on every block and the bytes move only by the
int16 round trip. None of them hands back the bare digest, so the refusal
§1.4 proposes — refuse a render whose digest is the source's — would not have
caught a single one of them.

Expander's own evidence pack named patch 5 Hard Downward as the state a
board run must use. That is right for noise_det and wrong for the runner's
probe. A patch is only a working patch for a given probe, and neither the
dossier template nor the evidence template asks anyone to say which probe.

Three things this suggests, none of them decided here.

  1. measure_effect_cost.py should refuse, or at least flag, a target that
    never leaves its own null state — for a dynamics class that is
    gain_reduction_db() never moving, for a drive stage a THD near zero, for
    a reverb mix 0. A per-family "am I working" readout, not a digest
    comparison.
  2. The evidence template's §4 should carry the probe as well as the patch
    in its "settings the figure was taken at" column.
  3. Every Phase 2 board figure is a figure for an idling graph unless somebody
    checks. Twelve classes are already parked on their budgets
    (audiocomponents#48) — if the figures were taken idling, the overruns are
    understated, and the re-derivation that issue proposes has to be done
    from working-patch runs.

Done on the branch: measure_effect_cost.py gained two additive target
suffixes so a run can be taken in the right state and on the right class —
effect:<Name>#<patch> calls program_change() before the timing starts, and
effect:<Name>@rebuilt measures audioeffects.rebuilt.<name> directly (a
parked class is not what create() returns, so a cost run for one silently
measures the old class — Expander's old class digests 2d7c9c11f8455993).
Expander's owed board run is effect:Expander@rebuilt#2, desktop digest
df0a18570b91ff9d.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions