Tract weak spots re-measured (unheard): burst gain no longer leaks past its plosive; 14-clip listening kit #47

Merged
aqua merged 1 commit from aqua/tract-listen-20261112 into main 2026-11-12 16:49:17 +00:00
Member

UNHEARD. Nobody has listened to anything here; numbers are script measurements, predictions were written before listening.

What changed

  • Fix (B): release_flow was held at the burst gain from the plosive's gesture on, so every later contact state made noise. Burst-alone peak 0.0302 in the final /n/ and tail of /bin/ (the burst itself 0.0226 at 81 ms), 0.0126 in /bun/, and 0.0688 (rms 0.0067, above the /n/ murmur's 0.0058) in the leading /n/ of /nibu/. BurstGainAroundGesture ramps the gain to zero around the gesture; after it the same difference is 0.0 from 120 ms after the release and the burst is unchanged. Test PlosiveBurstExistsOnlyAroundItsOwnRelease: fails on main c0e6b98 plus the test (0.0424 at the release, 0.0675 before the plosive, 0.0215 after), passes with the fix (0.0000, 0.0000).
  • tools/formant-check/weak_spots.py re-measures A-D from WordRender renders; WordRender --no-burst drops the release_flow splines (burst on/off pairs).
  • Kit tools/aqua-listen/kits/tract-weak-spots (kit.json, render.sh, phones/): 14 clips, 5 pairs; page and README with the clip table, numbers and predictions at https://minds.gamecult.org/aqua/tract-listen-1b6d180/ (/srv/minds-web/aqua/tract-listen-1b6d180/).
  • Sources doc: Weak spots re-measured 2026-11-12, only claims re-measured.

Per weak spot

  • A stress: open, five-vowel-mean basis kept. Level 100-170 ms: i +1.22, a +1.67, u +2.07, e +2.99, o +1.69 dB (mean 1.93, sd 0.60); f0 rise alone -0.80 to +1.23 dB; the rest +1.64 to +2.02 dB (sd 0.14). The scatter is the f0 rise, the amplitude cue is even; no cheap level the f0 rise cannot move; /i/ in /nibu/ +0.21 dB. Nothing redesigned.
  • B release: fixed as above. Burst alone after: bin 0.0226 (-15.1 dB re vowel peak), ba 0.0142 (-24.0), bun 0.0130 (-24.3), each to a tenth in 15-17 ms. The earlier "0.006-0.008" figure does not hold for /bin/.
  • C nasals: open. /m/ -11.81, /n/ -9.64 dB; N1 295/332 Hz. n minus m is 2.01/2.17/2.05/1.61 dB at f0 110/140/170/200 Hz, so not harmonic sampling; the shorter oral side branch is a candidate, not shown.
  • D lax: no defect. /ɪ/ 375/2024 Hz (tube 346/1987, Hillenbrand 429/2034), /ʊ/ 486/894 (tube 478/850, Hillenbrand 469/1123; F2 -20.4 %). Both in the DSL table and renderable.
  • IMPOSSIBLE: /t/ /d/ /k/ /l/ (and g, r, others outside p b m n s z ʃ ʒ ʍ w): WordRender exit 4, UNSUPPORTED PHONES (the tract has no gesture for them; nothing rendered): t (likewise d, k, l). Open, unchanged: a direct phoneme_gesture on an unknown IPA falls back to an alveolar approximant (GestureDescriptor).

Tests (groups run separately; Linux x86-64 build host and target, CultLib abd1a92)

StressAndReleaseRenderTests all 10 cases pass; PatchScriptTests 103 pass; WeksaPhonesTests + VocalTractFormantTests 58 pass; aqua-listen node test.mjs 16 pass; page builds (14 clips, 0.94 MB). Not run: PackageBoundaryTests (known hang), browser smoke; the page was not opened in a browser. Structural delta: +1 method (BurstGainAroundGesture) replacing one HoldOnSurface call, +1 test, +1 python tool, +1 kit dir (kit.json, render.sh, 19 phone files), +1 optional WordRender flag; no new targets or dependencies.

Not merged by me; Self merges after Soul.

🤖 Generated with Claude Code

UNHEARD. Nobody has listened to anything here; numbers are script measurements, predictions were written before listening. ## What changed - **Fix (B):** `release_flow` was held at the burst gain from the plosive's gesture on, so every later contact state made noise. Burst-alone peak 0.0302 in the final /n/ and tail of /bin/ (the burst itself 0.0226 at 81 ms), 0.0126 in /bun/, and 0.0688 (rms 0.0067, above the /n/ murmur's 0.0058) in the leading /n/ of /nibu/. `BurstGainAroundGesture` ramps the gain to zero around the gesture; after it the same difference is 0.0 from 120 ms after the release and the burst is unchanged. Test `PlosiveBurstExistsOnlyAroundItsOwnRelease`: fails on main c0e6b98 plus the test (0.0424 at the release, 0.0675 before the plosive, 0.0215 after), passes with the fix (0.0000, 0.0000). - `tools/formant-check/weak_spots.py` re-measures A-D from WordRender renders; `WordRender --no-burst` drops the release_flow splines (burst on/off pairs). - Kit `tools/aqua-listen/kits/tract-weak-spots` (kit.json, render.sh, phones/): 14 clips, 5 pairs; page and README with the clip table, numbers and predictions at https://minds.gamecult.org/aqua/tract-listen-1b6d180/ (`/srv/minds-web/aqua/tract-listen-1b6d180/`). - Sources doc: Weak spots re-measured 2026-11-12, only claims re-measured. ## Per weak spot - A stress: open, five-vowel-mean basis kept. Level 100-170 ms: i +1.22, a +1.67, u +2.07, e +2.99, o +1.69 dB (mean 1.93, sd 0.60); f0 rise alone -0.80 to +1.23 dB; the rest +1.64 to +2.02 dB (sd 0.14). The scatter is the f0 rise, the amplitude cue is even; no cheap level the f0 rise cannot move; /i/ in /nibu/ +0.21 dB. Nothing redesigned. - B release: fixed as above. Burst alone after: bin 0.0226 (-15.1 dB re vowel peak), ba 0.0142 (-24.0), bun 0.0130 (-24.3), each to a tenth in 15-17 ms. The earlier "0.006-0.008" figure does not hold for /bin/. - C nasals: open. /m/ -11.81, /n/ -9.64 dB; N1 295/332 Hz. n minus m is 2.01/2.17/2.05/1.61 dB at f0 110/140/170/200 Hz, so not harmonic sampling; the shorter oral side branch is a candidate, not shown. - D lax: no defect. /ɪ/ 375/2024 Hz (tube 346/1987, Hillenbrand 429/2034), /ʊ/ 486/894 (tube 478/850, Hillenbrand 469/1123; F2 -20.4 %). Both in the DSL table and renderable. - IMPOSSIBLE: /t/ /d/ /k/ /l/ (and g, r, others outside p b m n s z ʃ ʒ ʍ w): `WordRender` exit 4, `UNSUPPORTED PHONES (the tract has no gesture for them; nothing rendered): t` (likewise d, k, l). Open, unchanged: a direct `phoneme_gesture` on an unknown IPA falls back to an alveolar approximant (`GestureDescriptor`). ## Tests (groups run separately; Linux x86-64 build host and target, CultLib abd1a92) StressAndReleaseRenderTests all 10 cases pass; PatchScriptTests 103 pass; WeksaPhonesTests + VocalTractFormantTests 58 pass; aqua-listen `node test.mjs` 16 pass; page builds (14 clips, 0.94 MB). Not run: PackageBoundaryTests (known hang), browser smoke; the page was not opened in a browser. Structural delta: +1 method (BurstGainAroundGesture) replacing one HoldOnSurface call, +1 test, +1 python tool, +1 kit dir (kit.json, render.sh, 19 phone files), +1 optional WordRender flag; no new targets or dependencies. Not merged by me; Self merges after Soul. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
release_flow was held at the burst gain from the plosive's gesture onward, so later contact states made noise: burst-alone peak 0.0302 in the tail of /bin/, 0.0688 in the leading /n/ of /nibu/. BurstGainAroundGesture ramps it to zero around the gesture. Test PlosiveBurstExistsOnlyAroundItsOwnRelease (before the fix: 0.0675 before the plosive and 0.0215 after it; after: 0.0000 and 0.0000).

weak_spots.py re-measures stress level, release, nasals and lax vowels from WordRender renders; WordRender gains --no-burst. Kit tract-weak-spots (14 clips) for aqua-listen. Sources doc: Weak spots re-measured 2026-11-12.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
aqua merged commit af0e44f9b6 into main 2026-11-12 16:49:17 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
GameCult/AquaSynth!47
No description provided.