fix(dock): TRAX ladder gets the mic's ballistics (and a 33 Hz beat)

Reported: the TRAX bar moves, but its sampling looks far slower than the mic meter.

Cause: the TRAX number was a raw instantaneous peak per metering block — a stutter sampled by the UI
timer, with no smoothing. The mic looks fluid because it is smoothed at audio-callback rate.

Fix: the player now smooths its measured level with the SAME curve the mic uses
(MeterScale.NextLevel: fast attack, gentle decay), and the dock's meter clock runs at ~30 Hz instead
of 20. Two ladders that move alike, because they are the same ballistics.

Guard: MeterScaleTests pins the attack/decay behaviour alongside peak-hold.
This commit is contained in:
2026-10-30 13:28:32 -07:00
parent 839bc991a2
commit 2607ecf210
4 changed files with 19 additions and 3 deletions
+6
View File
@@ -27,6 +27,12 @@ public class MeterScaleTests
Assert.Equal(1f, MeterScale.ToFraction(+12f));
Assert.Equal(0f, MeterScale.ToFraction(-120f));
// Level ballistics: a jump is followed quickly, a drop falls gently — the same curve that
// makes the mic meter look fluid. Raw peaks at a 30 Hz UI tick stutter without it.
Assert.Equal(0.6f, MeterScale.NextLevel(0f, 1f), 3); // attack
Assert.True(MeterScale.NextLevel(0.9f, 0.1f) > 0.8f); // decay is gentle
Assert.True(MeterScale.NextLevel(0.1f, 0.9f) > 0.5f); // rise is fast
// Peak hold rises instantly, then decays at the stated rate.
Assert.Equal(0.8f, MeterScale.NextPeak(0.2f, 0.8f, 0.05f));
Assert.Equal(0.7f, MeterScale.NextPeak(0.8f, 0.1f, 0.1f / 0.35f), 3); // 0.1 fall at 0.35/s