Speech: n descriptor, word script, WordRender; first /ˈnibu/ render (a hum, unheard) #17

Merged
aqua merged 1 commit from aqua/nibu-first-render into main 2026-11-10 18:12:40 +00:00
Member

Redo of the /ˈnibu/ first render. Branch is off main, independent of #10/#16.

Changes: PatchScript.GestureDescriptor gets "n" => "voiced_alveolar_nasal" (bare n fell through to the alveolar approximant: no velum opening). IpaGestureExperiment.BuildWordScript runs gestures back to back on the same scaffold as BuildCandidateScript (both now call one Scaffold; single-gesture output unchanged, existing tests green). tools/WordRender renders a word offline via native libfaust to WAV + script + DSP + manifest. 2 new tests; 160 pass in PatchScriptTests/IpaTrialOrchestrator/StoreFileName filters.

Honest read: the render is a hum, not a word. The glottal source in the exporter is os.osc(f) (a sine), so the tract has nothing to filter: energy above 1 kHz is 0.05%/0.02% for i/u, and vowel-i and vowel-a renders are byte-identical. Consonant gating works (n murmur, b closure dip and burst). Nobody has listened.

Second finding: the exporter sums per-gesture spline offsets per surface while ControlSplineTimeline merges them into one absolute curve; baked-in, a 4-gesture word is silent for its first 340 ms. WordRender drives sliders from the timeline instead. The exporter is not fixed here.

Files + listen kit (tools/aqua-listen, PR #16): /opt/commons/handoff/aqua-nibu-first-render-20261107/ (README has measurements).

🤖 Generated with Claude Code

Redo of the /ˈnibu/ first render. Branch is off main, independent of #10/#16. Changes: `PatchScript.GestureDescriptor` gets `"n" => "voiced_alveolar_nasal"` (bare `n` fell through to the alveolar approximant: no velum opening). `IpaGestureExperiment.BuildWordScript` runs gestures back to back on the same scaffold as `BuildCandidateScript` (both now call one `Scaffold`; single-gesture output unchanged, existing tests green). `tools/WordRender` renders a word offline via native libfaust to WAV + script + DSP + manifest. 2 new tests; 160 pass in PatchScriptTests/IpaTrialOrchestrator/StoreFileName filters. **Honest read: the render is a hum, not a word.** The glottal source in the exporter is `os.osc(f)` (a sine), so the tract has nothing to filter: energy above 1 kHz is 0.05%/0.02% for i/u, and vowel-i and vowel-a renders are byte-identical. Consonant gating works (n murmur, b closure dip and burst). Nobody has listened. Second finding: the exporter sums per-gesture spline offsets per surface while `ControlSplineTimeline` merges them into one absolute curve; baked-in, a 4-gesture word is silent for its first 340 ms. WordRender drives sliders from the timeline instead. The exporter is not fixed here. Files + listen kit (tools/aqua-listen, PR #16): /opt/commons/handoff/aqua-nibu-first-render-20261107/ (README has measurements). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
PatchScript.GestureDescriptor had no case for n, so it fell to the alveolar
approximant (no velum). IpaGestureExperiment.BuildWordScript runs gestures back
to back on the same scaffold as BuildCandidateScript (refactored onto one
Scaffold). tools/WordRender renders a word offline through native libfaust,
driving surface sliders from ControlSplineTimeline because the Faust exporter's
summed spline offsets do not sequence gestures. Two tests. Nothing was heard:
the render is a near-pure sine with no vowel quality.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Author
Member

Maintainer pass (2026-11-10). Own tests on this branch merged onto current main: PatchScript/IpaTrial/Weksa groups 109/109 pass. The full suite shows the four native-Faust daemon tests failing; they fail identically on main and are a daemon bug fixed separately in #25 (POSIX file URIs, StoreFileName in test paths), not this PR. Read the diff: BuildWordScript shares one scaffold with BuildScript, 'n' maps to voiced_alveolar_nasal, WordRender is an offline probe (one nit: it sums unclamped phone durations while BuildWordScript clamps each to 30 ms..1.5 s, so a sub-30 ms phone makes the probe's render length a little short). Nobody has heard the /nibu/ render (a hum). Merging as provenance, not approval; nothing deployed.

Maintainer pass (2026-11-10). Own tests on this branch merged onto current main: PatchScript/IpaTrial/Weksa groups 109/109 pass. The full suite shows the four native-Faust daemon tests failing; they fail identically on main and are a daemon bug fixed separately in #25 (POSIX file URIs, StoreFileName in test paths), not this PR. Read the diff: BuildWordScript shares one scaffold with BuildScript, 'n' maps to voiced_alveolar_nasal, WordRender is an offline probe (one nit: it sums unclamped phone durations while BuildWordScript clamps each to 30 ms..1.5 s, so a sub-30 ms phone makes the probe's render length a little short). Nobody has heard the /nibu/ render (a hum). Merging as provenance, not approval; nothing deployed.
aqua merged commit 9d721c50a6 into main 2026-11-10 18:12:40 +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!17
No description provided.