Skip to content

audiodynamics DYN_TRANSIENT: the +1e-5f envelope floor makes the differential level-dependent in a note's tail #57

Description

@bdbarnett

Found by the TransientShaper gate-audit fix round (audiocomponents,
effects/p2b-transientshaper, 2026-09-07). This is a finding, not a
regression
— the code is as it has always been, and the class ships on it.
It is filed because the class's evidence pack names it as the measured cause
of a trait it had to disconfirm, and no issue existed.

Stakes. DYN_TRANSIENT's whole promise is that it is thresholdless:
both control voltages are differences between two envelopes of the same
signal, so the level cancels and a ghost note is shaped as hard as a
rimshot. That is exactly what TransientShaper's docstring sells. It stops
being true near the floor.

The mechanism. src/shared/audioif_dynamics.c:628-630 takes
gain_to_db(env + 1e-5f) on each envelope. 1e-5 is −100 dBFS, so it is a
pedestal added before the log, and the difference of two logs is scale-free
only while both envelopes are far above it. It is 1 % of a −60 dBFS envelope
and 10 % of a −80 dBFS one.

Measured, on audiocomponents/.venv/bin/python at the pin 2f6cbc3,
48 kHz, through audioeffects.rebuilt.transientshaper:

  • peak attack gain at Attack +12, one hit at four levels:
    +12.000 / +12.000 / +11.996 / +11.953 dB at −6 / −20 / −40 / −60 dBFS,
    and +11.076 dB at −80 dBFS — a graded departure that tracks the
    pedestal's share of the envelope, not anything in the gain law.

  • it is not only a −60 dBFS effect. The tail of a −40 dBFS note gets down
    near the pedestal too, so the point-by-point spread between the same hit at
    −20 and −40 dBFS depends on how deep into the decay it is read. Same
    renders, read to N dB under each probe's own peak
    (tools/phase2_probes/transientshaper_patches.py):

    Read depth patch 0 Flat (a near-wire) patch 2 Room Off patch 5 Kick Punch patch 6 Ambient Swell
    10 dB 0.043 0.032 0.042 0.224
    20 dB 0.089 0.101 0.094 0.441
    30 dB 0.134 0.630 0.472 0.803
    40 dB 0.142 2.797 1.578 1.322
    50 dB 0.142 6.588 3.068 1.322

    The bar the class's trait sets is 0.500 dB. The near-wire settles and stops;
    the three working patches do not.

What the class did about it: nothing to the DSP. T1 is recorded
disconfirmed as stated and the surviving claim is bounded in the docstring
and the catalogue row to where it holds. The full record is
audiocomponents/docs/effects/TransientShaper-evidence.md §1 and §11.

The ask, if any. A smaller pedestal, or a floor applied to the ratio
rather than to each envelope, would push the departure below any level a
16-bit signal reaches. NEED: NONE — nothing in audiocomponents is blocked on
this; the class ships with the claim bounded. Filed so the number exists on
this side of the fence.

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