The DSL's IPA table becomes PatchScript.TryIpaDescriptor so the reader asks the one table instead of keeping its own.
Fixture is Weksa PR 16 at a7bc2478, byte for byte.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The corner sat at 540 Hz for a vowel, above /u/'s F1, and the envelope read that F1 at 450 Hz. The ladder's lip cell already carries the lip area; aperture stays the gain consonant closures use. Tests: u F1 250-350 and F2 near 876; i F1 band widened to 20% (the harmonic-line reading of i moves 230-260 Hz with the corner).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The gesture also scaled the aperture (an output gain and highpass corner) by lip cm / 2.2, so /u/ (lip .05 cm) rendered 29 dB under /i/. A vowel now holds aperture at 1; consonant closures still use it. Test: /u/ rms within -10..+3 dB of /i/, F2 under 1000 Hz.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
EmitVowelGesture now holds tongue index, tongue and lip diameters (cm) from anchors measured by impulse response toward textbook F1/F2 (i 271/2313, u 292/876, a 703/1084, plus ae, e, o, schwa), with the constriction opened. The old targets put a at 310/2130 and i at 620/1620 through the same ladder. Tests render the authored gestures end to end and read LPC envelope peaks.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The vocal ladder has one cell per sample, so exporting at the 48 kHz default and rendering at 44.1 kHz (daemon, IPA trial, song worker, graph renderer) shifted every formant down 8%. Speech-loss surface and AquaLower still take the default; the wasm compile path has no rate.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Each waveguide path is a one-sample-per-cell ladder (N = round(L*SampleRate/c)) written as a Faust letrec; the glottal source
feeds cell 0 and the lip wave is the radiated signal. A branch port joining two paths of the network is a three-port velum
junction (Pink Trombone's), opening*coupling*0.4 cm wide. Lip reflection is the radiation load's live reflection.
The Gaussian area deformation of TerminalAreaExpression and SegmentAreaExpression is one helper, DeformedAreaExpression,
which the ladder cells also use. PrimitiveAreaExpression and PrimitiveDelayExpression are deleted. FaustExportOptions.SampleRate
(default 48000) is passed by the native runtime. Scaffold: contact opening 1, nostril radiation load.
Tests: F1/F2 of i, schwa, a, vowel ordering, stability with velum open, nasal exit with the mouth shut; the aliasing test
now measures the whole non-harmonic grid since the tract reshapes the harmonics.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Three native-compiling classes running at once crashed the test host (reproduced at 271 passed, every run, once a third
native class existed). They now share one xUnit collection.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Replaces the sine os.osc in the primitive vocal source. Tilt (default .5, DSL tilt=, surface /vocal/sources/i/tilt): 0 brightest, 1 steepest rolloff; cutoff 200*2^((1-tilt)*5) Hz. Opening and tension amplitude factors kept. ProbeTimelineReport models only the source's flow level (no oscillator), so tilt does not enter it.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
ControlSplineTimeline.SurfaceSplines is the one owner of which spline decides a surface (>=2 enabled splines merge into one bezier curve over the union of points; one spline unchanged). FaustExport and ProbeTimelineReport no longer sum per-spline offsets; WordRender drops its no-spline emit and timeline-driven sliders.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>