A segmented vocal tract: Kelly-Lochbaum sections whose areas move, for coarticulation and consonant transitions #144

Open
opened 2026-10-06 00:33:31 +00:00 by bcox · 0 comments
Owner

bcox asked on 2026-10-05 for a ticket for each family in his gaps.md that has none. Engine claims are from reading the tree at cd68bd3e on main; literature named below is from recollection and was not re-read. Nothing here is built, measured or listened to.

What the tree has

  • Voiced formants are the FM pair's formant bank: fixed resonances on a periodic source. Unvoiced formants are UnvoicedLayer, a selectable excitation through a bank of dsp/svf.h resonances; its header says the FM pair's bank "gave this engine a tract. What it did not give it is a second excitation", and that a consonant is "the same tract driven by turbulence".
  • Both are banks of resonances with centers and bandwidths as parameters. A vowel is a point in formant space, and a transition between two is a crossfade of centers, which is not what a tongue does between them: the formants of a real transition follow the area function's path, and a stop consonant is a closure, not a resonance.
  • The waveguide is one lumped line with a drive at one end: no scattering junctions along its length and no area function. dsp/strings_junction.h is a scattering junction solved without delay, for a bridge rather than a tube section. dsp/junction.h proves passivity for its curves.

What the family is

A tract as N cylindrical sections of varying area (eight for a sketch, forty-four for Story's MRI area functions), each boundary a two-port scattering junction with reflection coefficient (A_i - A_i+1) / (A_i + A_i+1): the Kelly-Lochbaum model. A glottal source at one end, a radiation load at the lips, a nasal branch when wanted. Articulation is the area function moving; a constriction is a consonant; coarticulation falls out of the areas interpolating between targets with their own time constants rather than being drawn. Cook's SPASM, Thapen's Pink Trombone, and the Kelly-Lochbaum literature are the references.

Shape and cost

A layer engine, voice-scope. Per sample, N junctions at a multiply-add pair each, plus the two lines, which the waveguide's per-voice region sub-block holds. The area-to-coefficient conversion is a division, the one costly step, done at control rate and smoothed; the coefficient's magnitude below one keeps the tract passive by construction, which is the property dsp/junction.h checks for its curves. N = 44 at 128 voices on the fabric is the price to put beside the waveguide's.

The excitations exist in pieces: UnvoicedLayer's noise, injected at a constriction rather than at the glottis, is the fricative; the glottal pulse is new (the LF model, or the waveguide's reed valve under the vocal folds' parameters); and a tap or the external input through the tract is cross-synthesis the cheap way.

Open

  • The parameter surface: forty-four areas are not a patch; vowels as presets with a morph between them is the formant bank's own surface, and the morph is where the coarticulation lives.
  • Whether to build on UnvoicedLayer's bank (a tract behind it) or as a LayerKind of its own; the header's argument for a separate unvoiced layer (the centers of /s/ and a vowel are nowhere near each other) is about a bank, and a tract has no centers.
  • The nasal branch, and the lip radiation as a one-zero.

UnvoicedLayer, the FM pair's formant bank, #118 (a pitch tracker, to drive it from a voice), #140 (the other cross-synthesis).

bcox asked on 2026-10-05 for a ticket for each family in his `gaps.md` that has none. Engine claims are from reading the tree at `cd68bd3e` on `main`; literature named below is from recollection and was not re-read. **Nothing here is built, measured or listened to.** ## What the tree has - Voiced formants are the FM pair's formant bank: fixed resonances on a periodic source. Unvoiced formants are `UnvoicedLayer`, a selectable excitation through a bank of `dsp/svf.h` resonances; its header says the FM pair's bank "gave this engine a tract. What it did not give it is a second excitation", and that a consonant is "the same tract driven by turbulence". - Both are banks of resonances with centers and bandwidths as parameters. A vowel is a point in formant space, and a transition between two is a crossfade of centers, which is not what a tongue does between them: the formants of a real transition follow the area function's path, and a stop consonant is a closure, not a resonance. - The waveguide is one lumped line with a drive at one end: no scattering junctions along its length and no area function. `dsp/strings_junction.h` is a scattering junction solved without delay, for a bridge rather than a tube section. `dsp/junction.h` proves passivity for its curves. ## What the family is A tract as N cylindrical sections of varying area (eight for a sketch, forty-four for Story's MRI area functions), each boundary a two-port scattering junction with reflection coefficient (A_i - A_i+1) / (A_i + A_i+1): the Kelly-Lochbaum model. A glottal source at one end, a radiation load at the lips, a nasal branch when wanted. Articulation is the area function moving; a constriction is a consonant; coarticulation falls out of the areas interpolating between targets with their own time constants rather than being drawn. Cook's SPASM, Thapen's Pink Trombone, and the Kelly-Lochbaum literature are the references. ## Shape and cost A layer engine, voice-scope. Per sample, N junctions at a multiply-add pair each, plus the two lines, which the waveguide's per-voice region sub-block holds. The area-to-coefficient conversion is a division, the one costly step, done at control rate and smoothed; the coefficient's magnitude below one keeps the tract passive by construction, which is the property `dsp/junction.h` checks for its curves. N = 44 at 128 voices on the fabric is the price to put beside the waveguide's. The excitations exist in pieces: `UnvoicedLayer`'s noise, injected at a constriction rather than at the glottis, is the fricative; the glottal pulse is new (the LF model, or the waveguide's reed valve under the vocal folds' parameters); and a tap or the external input through the tract is cross-synthesis the cheap way. ## Open - The parameter surface: forty-four areas are not a patch; vowels as presets with a morph between them is the formant bank's own surface, and the morph is where the coarticulation lives. - Whether to build on `UnvoicedLayer`'s bank (a tract behind it) or as a `LayerKind` of its own; the header's argument for a separate unvoiced layer (the centers of /s/ and a vowel are nowhere near each other) is about a bank, and a tract has no centers. - The nasal branch, and the lip radiation as a one-zero. ## Related `UnvoicedLayer`, the FM pair's formant bank, #118 (a pitch tracker, to drive it from a voice), #140 (the other cross-synthesis).
Sign in to join this conversation.
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
bcox/tymbal#144
No description provided.