Add IPA vocal tract roadmap
This commit is contained in:
parent
d7b49d7248
commit
5f305007ad
5 changed files with 460 additions and 1 deletions
426
docs/ipa-vocal-tract-roadmap.md
Normal file
426
docs/ipa-vocal-tract-roadmap.md
Normal file
|
|
@ -0,0 +1,426 @@
|
|||
# IPA Vocal Tract Roadmap
|
||||
|
||||
AquaSynth can get close to a Pink Trombone-class tract model, then move past it
|
||||
by treating IPA as an authoring input rather than the synth itself. The machine
|
||||
we want is not a giant table from symbol to sound. It is a pipeline:
|
||||
|
||||
```text
|
||||
IPA text
|
||||
-> phonetic tokens
|
||||
-> language phonology profile
|
||||
-> timed articulatory gesture plan
|
||||
-> morphology-specific tract and excitation curves
|
||||
-> Faust DSP
|
||||
-> rendered speech, song, chant, and nonhuman vocalization
|
||||
```
|
||||
|
||||
The target user feeds Weksa text as IPA or IPA-like phonetic strings. AquaSynth
|
||||
keeps the real authority below that surface: phonetic features, gestures,
|
||||
anatomy, excitation, and acoustic simulation.
|
||||
|
||||
## Objective
|
||||
|
||||
Build a research-grounded vocal-tract instrument for human and alien speech:
|
||||
|
||||
- parse IPA into structured phonetic intent;
|
||||
- lower phonetic intent through a language profile into articulatory gestures;
|
||||
- render those gestures through human and nonhuman tract morphologies;
|
||||
- keep coarticulation continuous rather than stepping between phoneme presets;
|
||||
- make every layer testable with mocks, fixtures, and deterministic outputs;
|
||||
- grow supported IPA exponentially as the tract model earns new physics.
|
||||
|
||||
The Weksa goal is conlang speech rendering for Zyphos worldbuilding. IPA gives
|
||||
authors a familiar entry point. The tract model gives us the power to make Weksa
|
||||
sound like Weksa instead of like English wearing ceremonial markup.
|
||||
|
||||
## Research Spine
|
||||
|
||||
The first implementation should stand on old, durable work:
|
||||
|
||||
- Kelly-Lochbaum / digital waveguide vocal tract models simulate 1D wave
|
||||
propagation through connected tube sections using reflection coefficients.
|
||||
This is the practical spine behind Pink Trombone-like realtime tract synthesis.
|
||||
- Pink Trombone demonstrates that a simplified tract, glottis, turbulence, oral
|
||||
cavity, and nasal coupling can produce interactive intelligible speech-like
|
||||
sound in realtime.
|
||||
- Liljencrants-Fant-style glottal source models give a better voiced excitation
|
||||
than a naive sawtooth or pulse train, and can parameterize voice quality.
|
||||
- Articulatory phonology and task dynamics provide the right control model:
|
||||
phonetic units become overlapping gestures, not isolated frames.
|
||||
- Vocal-tract area-function work is the middle layer between anatomy and DSP:
|
||||
vowels and constrictions can be expressed as cross-sectional area over tract
|
||||
distance before being lowered to reflection coefficients.
|
||||
- IPA feature databases and phoneme-table implementations are reference
|
||||
material for metadata, not authorities over the sound. They help keep the
|
||||
parser and feature mapper honest while the gesture and morphology layers own
|
||||
synthesis.
|
||||
- Source-filter speech theory still matters, but this lane should not collapse
|
||||
back into static formant filters. Formants are useful diagnostics; tract shape
|
||||
is the synthesis authority.
|
||||
|
||||
Useful starting sources:
|
||||
|
||||
- Pink Trombone / Neil Thapen interactive tract model:
|
||||
<https://dood.al/pinktrombone/>
|
||||
- Pink Trombone overview at IMAGINARY:
|
||||
<https://www.imaginary.org/program/pink-trombone>
|
||||
- Recent Pink Trombone optimization paper describing PT as a realtime
|
||||
Kelly-Lochbaum tract model:
|
||||
<https://link.springer.com/article/10.1186/s13636-025-00414-5>
|
||||
- Story 2005 vocal-tract area-function model:
|
||||
<https://bpb-us-e2.wpmucdn.com/sites.arizona.edu/dist/f/80/files/2023/10/story_jasa2005-1.pdf>
|
||||
- Kelly-Lochbaum / time-domain articulatory synthesis summary:
|
||||
<https://www.isca-archive.org/eurospeech_1989/owens89b_eurospeech.html>
|
||||
- Waveguide vocal tract acoustics:
|
||||
<https://eprints.whiterose.ac.uk/id/eprint/3713/>
|
||||
- Voice source model comparison including LF:
|
||||
<https://pmc.ncbi.nlm.nih.gov/articles/PMC4491021/>
|
||||
- LF model fitting for speech synthesis:
|
||||
<https://www.cs.cmu.edu/~awb/papers/is2013/is2013_lfmodel.pdf>
|
||||
- Haskins TADA gestural planning model:
|
||||
<https://www.haskinslaboratories.org/tada>
|
||||
- PanPhon IPA feature vectors:
|
||||
<https://pypi.org/project/panphon/>
|
||||
- PHOIBLE phoneme inventories and distinctive features:
|
||||
<https://phoible.org/>
|
||||
- eSpeak NG phoneme-table implementation reference:
|
||||
<https://deepwiki.com/espeak-ng/espeak-ng/4.2-phoneme-model>
|
||||
|
||||
## Architecture
|
||||
|
||||
### 1. IPA Parser
|
||||
|
||||
Owns Unicode IPA tokenization and notation, not sound.
|
||||
|
||||
Inputs:
|
||||
|
||||
- IPA string;
|
||||
- optional language tag;
|
||||
- optional inline stress, length, tone, syllable, and boundary marks.
|
||||
|
||||
Outputs:
|
||||
|
||||
- ordered `PhoneticToken` records;
|
||||
- diacritic attachments;
|
||||
- suprasegmental marks;
|
||||
- source spans for diagnostics.
|
||||
|
||||
The parser should be table-driven and deterministic. It should reject unknown
|
||||
clusters with useful diagnostics instead of guessing heroically and making a new
|
||||
little bureaucracy out of Unicode.
|
||||
|
||||
### 2. Phonetic Feature Mapper
|
||||
|
||||
Owns IPA-to-feature interpretation.
|
||||
|
||||
Examples:
|
||||
|
||||
- `/p/` -> voiceless bilabial stop;
|
||||
- `/ɬ/` -> voiceless alveolar lateral fricative;
|
||||
- `/qʼ/` -> uvular ejective stop;
|
||||
- `/aː/` -> long open vowel, front/central depending on profile defaults.
|
||||
|
||||
Outputs:
|
||||
|
||||
- `PhoneticSegment` with manner, place, voicing, airstream, length, stress,
|
||||
vowel height/backness/rounding, and diacritics.
|
||||
|
||||
This layer should support language profiles. IPA has broad and narrow uses, and
|
||||
Weksa may assign phonemic categories to articulatory targets that are only
|
||||
human-adjacent. PanPhon, PHOIBLE, and eSpeak NG are useful references for feature
|
||||
schemas and inventory sanity checks, but AquaSynth should own its feature record
|
||||
instead of importing a third-party schema as the permanent internal model.
|
||||
|
||||
### 3. Gesture Planner
|
||||
|
||||
Owns time and coarticulation.
|
||||
|
||||
Inputs:
|
||||
|
||||
- phonetic segments;
|
||||
- language timing profile;
|
||||
- prosody vector;
|
||||
- speaking style;
|
||||
- morphology capability map.
|
||||
|
||||
Outputs:
|
||||
|
||||
- overlapping gestures for tract constriction, tongue body, tongue tip, lips,
|
||||
velum, glottis, pressure, turbulence, burst release, and auxiliary organs.
|
||||
|
||||
This is where consonants and vowels smear into each other. Stops close before
|
||||
their release. Vowels pull neighboring consonants. Fricatives hold a narrow
|
||||
constriction and noise source. Nasals open a branch. Ejectives and clicks become
|
||||
pressure/airstream events rather than cute punctuation.
|
||||
|
||||
The gesture planner should resemble a small task-dynamics compiler: phone
|
||||
features become overlapping constriction tasks and source events. It should not
|
||||
linearly interpolate phone presets unless a test proves that shortcut works for
|
||||
the current stage.
|
||||
|
||||
### 4. Morphology Model
|
||||
|
||||
Owns anatomy.
|
||||
|
||||
Human baseline:
|
||||
|
||||
- tract length;
|
||||
- section count;
|
||||
- palate/tongue mapping;
|
||||
- lip opening/protrusion;
|
||||
- velum and nasal branch;
|
||||
- one glottal source;
|
||||
- oral tract radiation.
|
||||
|
||||
Alien/Weksa extensions:
|
||||
|
||||
- longer or shorter tract families;
|
||||
- asymmetric or split oral branches;
|
||||
- additional resonant sacs;
|
||||
- secondary glottal or membrane exciters;
|
||||
- nonhuman nasal/side-channel coupling;
|
||||
- constrained articulator ranges by species or caste;
|
||||
- morphology-specific mappings from human IPA-like features to physical organs.
|
||||
|
||||
IPA does not get to own alien anatomy. IPA names intent; morphology realizes it.
|
||||
|
||||
### 5. Tract DSP
|
||||
|
||||
Owns sound.
|
||||
|
||||
First spine:
|
||||
|
||||
- 1D Kelly-Lochbaum-style tube sections;
|
||||
- reflection coefficients from section area;
|
||||
- glottal excitation at the source;
|
||||
- lip radiation;
|
||||
- nasal branch switch/coupling;
|
||||
- turbulence injection at constriction points;
|
||||
- closure and burst primitives for stops.
|
||||
|
||||
Use area functions as the stable middle representation: a morphology and gesture
|
||||
plan produce tract-area curves over time; the DSP compiler turns those curves
|
||||
into reflection coefficients, source injection points, and coupling events.
|
||||
|
||||
Later spine:
|
||||
|
||||
- losses and dispersion;
|
||||
- lip/larynx impedance refinements;
|
||||
- side branches and sacs;
|
||||
- multiple sources;
|
||||
- differentiable or search-assisted parameter fitting for vowel targets;
|
||||
- morphologies that are not merely scaled human throats.
|
||||
|
||||
Generated Faust should remain boring enough to inspect. If tract DSP becomes
|
||||
large, generate a specialized Faust module from a typed tract plan instead of
|
||||
stuffing a hundred magic controls into ordinary `voice`.
|
||||
|
||||
## Supported IPA Roadmap
|
||||
|
||||
Do not support all IPA first. That is the trap where the parser looks mighty and
|
||||
the synth says five ugly vowels. Expand by doubling the useful surface each time
|
||||
the physical model earns another category.
|
||||
|
||||
### Stage 0: Token Spine
|
||||
|
||||
Goal: lossless-enough IPA tokenization and diagnostics.
|
||||
|
||||
Support:
|
||||
|
||||
- whitespace and word boundaries;
|
||||
- `/.../` and `[...]` wrappers;
|
||||
- primary and secondary stress;
|
||||
- length marks `ː` and `ˑ`;
|
||||
- common tie mark for affricates;
|
||||
- combining diacritic storage without full interpretation.
|
||||
|
||||
Tests:
|
||||
|
||||
- round-trip token spans;
|
||||
- unknown-symbol diagnostics;
|
||||
- diacritic attachment fixtures.
|
||||
|
||||
### Stage 1: Vowels And Simple Voice
|
||||
|
||||
Goal: intelligible sustained vowel targets through a human tract.
|
||||
|
||||
Support:
|
||||
|
||||
- monophthong vowels: `i y ɨ ʉ ɯ u ɪ ʏ ʊ e ø ɘ ɵ ɤ o ə ɛ œ ɜ ɞ ʌ ɔ æ ɐ a ɶ ɑ ɒ`;
|
||||
- length and stress as duration/prosody modifiers;
|
||||
- modal voiced glottal source;
|
||||
- simple pitch, intensity, and breathiness controls.
|
||||
|
||||
Machine growth:
|
||||
|
||||
- vowel feature space;
|
||||
- tract area targets informed by area-function references;
|
||||
- glottal source model;
|
||||
- vowel fixture renderer.
|
||||
|
||||
Validation:
|
||||
|
||||
- check approximate formant regions for `/i e a o u ə/`;
|
||||
- compare tract-area curves against known vowel-shape expectations;
|
||||
- keep listening fixtures because a formant table can still lie with confidence.
|
||||
|
||||
### Stage 2: Core Pulmonic Consonants
|
||||
|
||||
Goal: CV, VC, and CVC syllables with recognizably different places and manners.
|
||||
|
||||
Support:
|
||||
|
||||
- stops: `p b t d k g ʔ`;
|
||||
- nasals: `m n ŋ`;
|
||||
- fricatives: `f v s z ʃ ʒ h`;
|
||||
- approximants: `w j l ɹ`;
|
||||
- basic aspiration `ʰ`;
|
||||
- syllable and word timing.
|
||||
|
||||
Machine growth:
|
||||
|
||||
- closure/release events;
|
||||
- plosive burst noise;
|
||||
- fricative turbulence source;
|
||||
- nasal branch;
|
||||
- simple coarticulation curves.
|
||||
|
||||
Validation:
|
||||
|
||||
- verify voice onset timing for stops;
|
||||
- verify burst timing and broad noise bands;
|
||||
- verify nasal/oral contrast;
|
||||
- reject fricative support that is only a filtered noise preset with no
|
||||
constriction/source location.
|
||||
|
||||
### Stage 3: Expanded Human IPA
|
||||
|
||||
Goal: useful conlang coverage without pretending to be a universal phonetician.
|
||||
|
||||
Support:
|
||||
|
||||
- places: dental, alveolar, postalveolar, retroflex, palatal, velar, uvular,
|
||||
pharyngeal, glottal;
|
||||
- manners: trills, taps/flaps, lateral fricatives, lateral approximants,
|
||||
affricates;
|
||||
- symbols: `θ ð ɕ ʑ ç ʝ x ɣ χ ʁ ħ ʕ ɸ β ʂ ʐ ɲ ɳ ɴ ɾ r ʀ ɭ ʎ ʟ ɰ`;
|
||||
- affricate tie sequences such as `t͡s`, `d͡ʒ`, `t͡ɬ`;
|
||||
- voiceless/voiced and dentalized/palatalized/labialized/velarized diacritics
|
||||
where they map to real gestures.
|
||||
|
||||
Machine growth:
|
||||
|
||||
- tongue tip/body split;
|
||||
- lateral constriction;
|
||||
- trill/tap event generators;
|
||||
- profile-specific place maps.
|
||||
|
||||
This is the point where a language profile starts earning its keep. The same IPA
|
||||
symbol may need different timing, place bias, or allophonic behavior by language;
|
||||
that belongs in the profile, not in the global token parser.
|
||||
|
||||
### Stage 4: Airstream And Phonation
|
||||
|
||||
Goal: Weksa can use sounds that feel physically intentional instead of being
|
||||
ornamental apostrophes.
|
||||
|
||||
Support:
|
||||
|
||||
- ejectives: `ʼ`;
|
||||
- implosives: `ɓ ɗ ʄ ɠ ʛ`;
|
||||
- clicks: `ʘ ǀ ǃ ǂ ǁ`;
|
||||
- breathy, creaky, slack/stiff voice diacritics;
|
||||
- voiceless vowels and sonorants;
|
||||
- tone marks if Weksa needs lexical or prosodic tone.
|
||||
|
||||
Machine growth:
|
||||
|
||||
- pressure reservoirs;
|
||||
- glottal closure timing;
|
||||
- ingressive/egressive event modeling;
|
||||
- richer glottal source parameterization;
|
||||
- non-pulmonic test fixtures.
|
||||
|
||||
### Stage 5: Weksa And Alien Morphologies
|
||||
|
||||
Goal: IPA can drive nonhuman vocal anatomy without reducing aliens to exotic
|
||||
human accents.
|
||||
|
||||
Support:
|
||||
|
||||
- morphology profiles with declared organ inventory;
|
||||
- feature remapping per morphology;
|
||||
- unsupported-feature diagnostics that explain the missing organ or gesture;
|
||||
- dual-source phonation;
|
||||
- resonant sacs and side branches;
|
||||
- nonhuman lateral or split-tract continuants;
|
||||
- authored Weksa phoneme inventories and allophones.
|
||||
|
||||
Machine growth:
|
||||
|
||||
- morphology capability negotiation;
|
||||
- tract graph beyond a single tube plus nasal branch;
|
||||
- multi-source DSP;
|
||||
- Weksa fixture corpus;
|
||||
- Zyphos scene hooks for speaker, body, place, and emotional pressure.
|
||||
|
||||
## Testing And Mocking
|
||||
|
||||
The implementation should be built as a set of injectable services:
|
||||
|
||||
- `IIpaTokenizer`
|
||||
- `IPhoneticFeatureMapper`
|
||||
- `IPhonologyProfile`
|
||||
- `IGesturePlanner`
|
||||
- `ITractMorphology`
|
||||
- `ITractPlanCompiler`
|
||||
- `ITractFaustEmitter`
|
||||
- `IAudioRenderer`
|
||||
- `IReferenceFixtureStore`
|
||||
|
||||
Mock seams are not ceremony here. They protect the machine:
|
||||
|
||||
- tokenizer tests do not need DSP;
|
||||
- feature tests do not need coarticulation;
|
||||
- gesture tests can snapshot control curves;
|
||||
- morphology tests can assert capabilities and remaps;
|
||||
- Faust emitter tests can verify generated structure without rendering;
|
||||
- renderer tests can compare short deterministic buffers;
|
||||
- Weksa profile tests can prove unsupported IPA fails clearly.
|
||||
|
||||
Golden fixtures:
|
||||
|
||||
- IPA tokenization fixtures;
|
||||
- feature bundle fixtures;
|
||||
- gesture-plan JSON fixtures;
|
||||
- tract-area curve fixtures;
|
||||
- rendered vowel and CVC WAV artifacts;
|
||||
- Weksa phrase fixtures once the language profile exists.
|
||||
|
||||
Metrics:
|
||||
|
||||
- formant target distance for vowels;
|
||||
- envelope and burst timing for stops;
|
||||
- noise-band distance for fricatives;
|
||||
- nasal/oral spectral contrast;
|
||||
- intelligibility/listening notes for complete syllables;
|
||||
- script/IPA terseness only after audio is credible.
|
||||
|
||||
## First Work Packets
|
||||
|
||||
1. Add `docs/ipa-vocal-tract-roadmap.md` and preserve the boundary doctrine.
|
||||
2. Add an IPA tokenizer and feature model with Stage 0/1 fixture tests.
|
||||
3. Add a human baseline vowel planner that emits tract-area targets, not audio.
|
||||
4. Add a tiny tract renderer prototype in AquaSynth.Faust or a test-only lab
|
||||
lane, then decide the package boundary once the prototype proves itself.
|
||||
5. Render five vowels and three CVC syllables through fixtures.
|
||||
6. Add the first Weksa phonology profile with explicit unsupported-feature
|
||||
diagnostics.
|
||||
7. Only then add Stage 2 consonant synthesis to the shipping path.
|
||||
|
||||
## Non-Goals
|
||||
|
||||
- Full CFD, finite-element airflow, or anatomical medical simulation.
|
||||
- A black-box neural TTS voice that hides anatomy and cannot explain itself.
|
||||
- A complete IPA parser before the tract can render basic syllables.
|
||||
- Alien sounds as random effects. Nonhuman output needs morphology, not glitter.
|
||||
|
|
@ -51,6 +51,29 @@ missing graph feature instead of smuggling it through unrelated parameters.
|
|||
|
||||
## Target Families
|
||||
|
||||
### New Lane: IPA Vocal Tract / Weksa
|
||||
|
||||
This is not merely another reference synth. It is a new authoring and rendering
|
||||
lane: IPA text lowers into phonetic features, timed articulatory gestures,
|
||||
morphology-specific tract/excitation curves, and Faust DSP. The roadmap lives in
|
||||
[`docs/ipa-vocal-tract-roadmap.md`](ipa-vocal-tract-roadmap.md).
|
||||
|
||||
Pressure on AquaSynth DSL:
|
||||
|
||||
- IPA as an input surface, not an internal patch model.
|
||||
- Phonology profiles separated from tract morphology.
|
||||
- Gesture planning and coarticulation before audio rendering.
|
||||
- Human and alien vocal anatomies driven by the same structured phonetic intent.
|
||||
- Mockable tokenizer, feature mapper, gesture planner, morphology, emitter, and
|
||||
renderer seams.
|
||||
|
||||
First deliverable:
|
||||
|
||||
- Stage 0/1 IPA tokenization and vowel feature fixtures.
|
||||
- Human baseline vowel tract-area planner.
|
||||
- A small render proof that can say a few vowels before the supported IPA table
|
||||
expands.
|
||||
|
||||
### Tier 1: DX7/Dexed
|
||||
|
||||
Use this first. DX7 SysEx is compact, structured, and musically meaningful:
|
||||
|
|
|
|||
|
|
@ -104,3 +104,4 @@
|
|||
{"date":"2026-05-17","topic":"zyn-formant-parity-fixtures","lesson":"The first formant-motion parity workout needs multiple multi-frame ADD/formant fixtures and a real Zyn ADD note oracle. Avoid letting drum-kit envelope/source failures masquerade as formant evidence. Use Wide Bass, Ghost Ensemble, and Ghost Choir as the initial chorus; all currently fail enough to be useful.","evidence":"Added test-only `tools/zyn-reference/ZynVoiceReference.cpp`, wired it into the MSYS reference build, and added `ZynVoiceReferenceRendererSurveysUpstreamFormantFixturesWhenBuilt`. The batch writes ignored artifacts under `artifacts/parity/zyn-upstream-formant-fixtures/`; baseline scores were Wide Bass 0.280990, Ghost Ensemble 0.312813, Ghost Choir 0.363644. The native Zyn reference build succeeded and the focused formant fixture test passed."}
|
||||
|
||||
|
||||
{"date":"2026-05-19","evidence":"Added docs/ipa-vocal-tract-roadmap.md with staged IPA support from tokenization/vowels through pulmonic consonants, expanded IPA, airstream/phonation, and Weksa alien morphologies; linked it from docs/reference-synth-roadmap.md and state.","lesson":"AquaSynth should treat IPA as an authoring input for phonetic intent, not as the internal synth model. The planned machine is tokenizer -\u003e feature mapper -\u003e phonology profile -\u003e gesture planner -\u003e morphology -\u003e tract plan -\u003e Faust renderer, growing supported IPA only as tract/excitation physics earn each category.","topic":"ipa-vocal-tract-roadmap"}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ surfaces:
|
|||
patch_library: patches
|
||||
tests: tests/AquaSynth.Dsl.Tests
|
||||
reference_roadmap: docs/reference-synth-roadmap.md
|
||||
ipa_vocal_tract_roadmap: docs/ipa-vocal-tract-roadmap.md
|
||||
faust_toolchain_boundary: docs/faust-toolchain-boundary.md
|
||||
dx7_public_domain_fixtures: tests/AquaSynth.Dsl.Tests/Fixtures/Dx7/PublicDomain
|
||||
zyn_reference_source: external/zynaddsubfx
|
||||
|
|
@ -36,6 +37,7 @@ modules:
|
|||
dx7_reference_render_tests: tests/AquaSynth.Dsl.Tests/Dx7ReferenceParityTests.cs
|
||||
zyn_reference_reader: src/AquaSynth.Core/ZynInstrument.cs
|
||||
zyn_coverage_survey: src/AquaSynth.Core/ZynInstrument.cs
|
||||
ipa_vocal_tract_roadmap: docs/ipa-vocal-tract-roadmap.md
|
||||
package_boundary_tests: tests/AquaSynth.Dsl.Tests/PackageBoundaryTests.cs
|
||||
sfxr: src/AquaSynth.Core/SfxrParams.cs
|
||||
analysis: src/AquaSynth.Core/AudioAnalysis.cs
|
||||
|
|
@ -57,6 +59,7 @@ boundaries:
|
|||
- Faust source generation in AquaSynth.Core
|
||||
- target-code generation, compile-product contracts, dynamic patch compilation policy, cache identity, generated artifact manifests, and Faust toolchain selection in AquaSynth.Faust
|
||||
- live patch compilation, native Faust factory lifetime, and offline sample-buffer render proof in AquaSynth.Faust
|
||||
- IPA-to-phonetic-feature planning, articulatory gesture planning, and human/alien vocal-tract roadmap design
|
||||
dev_only:
|
||||
- public-domain DX7 SysEx fixtures
|
||||
- pinned GPL ZynAddSubFX source for parity tests
|
||||
|
|
|
|||
|
|
@ -79,10 +79,16 @@
|
|||
"ZynAddSubFX instruments for additive, subtractive, PAD, formant, and layered patches",
|
||||
"Faust examples/libraries for general DSP graph topology",
|
||||
"Surge XT for modern hybrid synth modulation",
|
||||
"Cardinal/VCV-style patches for modular cable/rate semantics"
|
||||
"Cardinal/VCV-style patches for modular cable/rate semantics",
|
||||
"IPA/Weksa vocal tract synthesis for phonetic gesture planning, human and alien tract morphologies, and conlang speech rendering"
|
||||
],
|
||||
"rule": "Add DSL abstractions only when reference rebuilds prove the missing invariant. Do not consume references that cannot be backed by parity tests; parsing alone is inventory, not evidence of expressivity."
|
||||
},
|
||||
"ipa_vocal_tract_path": {
|
||||
"status": "Roadmap drafted for an IPA-to-vocal-tract lane. IPA is an authoring input only: tokenization and feature mapping lower into language phonology profiles, timed articulatory gestures, morphology-specific tract/excitation curves, and Faust DSP. The staged support plan starts with tokenization and vowels, then core pulmonic consonants, expanded human IPA, airstream/phonation, and Weksa/alien morphologies.",
|
||||
"lesson": "Do not build a complete IPA parser before the tract can say basic syllables. The durable machine is tokenizer -> feature mapper -> phonology profile -> gesture planner -> morphology -> tract plan -> Faust renderer, with dependency-injected seams and mocks at each boundary. Weksa should use IPA-like phonetic input without letting human IPA semantics own alien anatomy.",
|
||||
"next": "Implement Stage 0/1 fixtures: IPA token spans, vowel feature bundles, human baseline vowel tract-area targets, and a tiny render proof before expanding consonants."
|
||||
},
|
||||
"dx7_reference_path": {
|
||||
"status": "DX7 SysEx parser extracts voice edit buffers, packed voices, packed 32-voice banks, six operators, envelopes, algorithm, feedback, oscillator sync, LFO, transpose, voice name, checksum validation, ReferencePatch features, algorithm topology from the reverse-engineered OPS algorithm ROM table, envelope-to-ADSR approximations, measured carrier output amplitude, isolated two-op modulation route scale, summed/cascaded route scale, calibrated feedback amount table, ratio detune lowering, voice transpose lowering, fixed-frequency operator lowering, ROM COM output compensation cut, operator key/rate scaling at the effective played note, topology-aware route lowering, staged operator envelopes with per-segment curves, raw and block-interpolated DX7 envelope tracing, applied-envelope curved lowering with optional sustain floor, two AquaSynth DSL rebuild attempts, first-class OperatorGraph support with graph-level vibrato, public-domain SysEx fixture coverage, dexed-py reference rendering, project-authored Dexed patch rendering, AquaSynth candidate rendering through Faust-generated C#, one thresholded rendered parity test for analog1.syx voice 13, a hard PRC SYNTH1 parity probe with listening WAV artifacts and log-mel <= 0.145, project-authored algorithm-8 summed-stack/cascade/summed-pair parity, rendered community parity for Mooger, Piano Bass, RES SYNTH1, and ANLGSYN 1 with a sustained high-band gate, a MELLOWSOLO pressure artifact test, and renderable delayed operator feedback.",
|
||||
"lesson": "Algorithm 32's additive six-carrier shape maps cleanly to six AquaSynth voices. Algorithm 8 justified OperatorGraph: operators, modulation edges, carriers, feedback, and graph-level pitch motion belong to a graph authority, not Voice fields. The first rendered parity rung is behavioral and sine-like, not exact DX7 operator execution. A harder algorithm-8 target exposed that feedback must be delayed recursion in Faust, not a direct cyclic self-reference. Static DX7 output-level approximation helped import/rebuild math but was mathematically wrong for carrier amplitude. A single-carrier Dexed sweep shows carrier amplitude follows 2^((outputLevel - 99) / 8). Isolated two-op DX7 FM maps full-level modulation to AquaSynth route index 6.275; summed/cascaded algorithm-8 branches now use 6.0 after PRC listening, a project-authored combined stack probe, and split cascade/summed-pair probes showed lower values were under-bright. Feedback lowers through a fitted table instead of PRC-local constants; ANLGSYN 1 showed max feedback value 7 needs a hotter AquaSynth amount 2.2 to recover buzzy high bands, while value 5 remains 0.19 for PRC. ANLGSYN 1 then exposed a sustained-buzz gap: output soft clip helped but did not stop mid-note drift; max-feedback source operators need an applied-envelope sustain floor so the feedback loop stays driven after the attack. ANLGSYN 1's remaining beat is pitch LFO: AMD is nonzero but all operator AMS values are 0, while PMD/PMS lower cleanly to operator-graph vibrato with faded delay. Ratio-mode detune belongs in operator frequency lowering. DX7 voice transpose belongs in graph base frequency: transpose 24 is neutral, transpose 12 lowers MIDI note 60 to 130.8128 Hz. DX7 fixed-frequency operators are absolute Hz, not note ratios; ANLGSYN 1 proved fixed op1/op3 must lower to ratios around 0.007615/0.009227 against a 130.8128 Hz graph base to preserve low buzzing modulation. ROM COM carrier compensation was cut: user listening found no-COM renders harmonically closer and mainly too quiet, so `OperatorOutputCompensation` returns unity and graph gain owns loudness recovery. Operator key-scaling and rate-scaling must lower against the effective played MIDI note after transpose; hardcoded MIDI 60 made RES SYNTH1 too soft on attack and Piano Bass less harmonically accurate. Project-authored Dexed patch rendering now gives lawful calibration targets. Reusing the operator output curve for EG levels was tested and cut because it failed hard-target log-mel; later output-level-dependent and naive traced-release applied-envelope experiments were also cut because they worsened broader parity. Direct envelope tracing shows current linear `env=rl` cannot express DX7 EG spike/drop behavior. Dexed-style audio samples EG once per 64-sample block and interpolates applied gain, so raw EG parity alone is not audio parity. Staged operator envelopes now support linear/exponential segments and supranormal levels. `ApproximateAppliedRateLevelEnvelope` uses that surface and now picks the first near-peak before gate so slower rising modulators hit early instead of swelling late; it can also preserve a floor for max-feedback source sustain. Community gains with no COM and played-note scaling: Mooger 0.75, Piano Bass 0.72, RES SYNTH1 0.75. Algorithm-2 non-carrier applied envelopes currently cap the first peak at 0.92 to prevent ANLGSYN 1/RES SYNTH1 peak blowout while preserving Piano Bass. MELLOWSOLO is a pressure artifact test, not passing parity; its render window is 1.25s so the candidate release is audible instead of cut at the artifact boundary. Mooger needs a more aggressive attack contour, and RES SYNTH1's phase-like attack issue is likely relative operator attack/peak shape because oscillator sync is enabled. PRC remains passing on log-mel/envelope/RMS, with score floor lowered to 0.74 after rate scaling changed the aggregate score.",
|
||||
|
|
|
|||
Loading…
Reference in a new issue