From d494bef26b87bedad0ea03b0b5f5d26e26217b26 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Mon, 25 May 2026 08:15:12 +0100 Subject: [PATCH] Clarify voice patch target controls --- state/evidence.jsonl | 2 +- state/scratch.md | 5 +++-- tools/vocal-tract-playground/README.md | 10 ++++++---- tools/vocal-tract-playground/app.js | 4 ++-- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/state/evidence.jsonl b/state/evidence.jsonl index 295164f..bc01fbc 100644 --- a/state/evidence.jsonl +++ b/state/evidence.jsonl @@ -127,4 +127,4 @@ {"date":"2026-05-20","topic":"weksa-v01-training-artifact","lesson":"The Weksa blocker has moved from schema definition to artifact consumption. Weksa now emits a machine-readable `weksa.utterance_embedding_handoff.v0.1` tiny PanPhon seed batch for `a`, `pa`, `ta`, `ka`, `sa`, and `ma`; AquaSynth's next serious training pass should load that artifact rather than local toy vectors.","evidence":"Added Weksa emitter `E:/Projects/weksa/tools/emit_tiny_panphon_handoffs.py` and generated `E:/Projects/weksa/examples/speech-training/tiny-panphon-v0.1/batch.json` with fixed 1024/32/64 input widths, inline PanPhon 22-feature frames, and pending AquaSynth-owned 256/64 learned outputs."} {"date":"2026-05-24","topic":"cultmesh-speech-worker-authority","lesson":"CultMesh should distribute speech render/scoring work, not optimizer authority. AquaSynth emits typed SpeechRenderRequest documents; CultMesh delivers compiled Faust renderers, scoring code, small model/encoder assemblies, and batch/artifact refs to compatible leased workers; workers return SpeechRenderResult documents with loss, gradients, artifacts, and timing receipts. The authority trainer or shard-primary applies gradients through SpeechBackpropagationPipeline and commits SpeechTrainingCheckpoint documents through normal CultCache/CultMesh shard authority.","evidence":"Recorded the authority map in docs/ipa-vocal-tract-roadmap.md, state/spine.yaml, state/map.yaml, state/memory.json, and state/scratch.md. The next implementation layer is transport, admission, worker leases, payload delivery, and result collection; federated averaging waits until the simple authority path is boring."} {"date":"2026-05-24","topic":"cultmesh-speech-training-step","lesson":"AquaSynth can now run the first honest CultMesh-distributed speech training step: an authority trainer emits SpeechRenderRequest documents and a SpeechWorkerPayloadManifest, admits only CultMesh peers with valid speech-render-worker leases, records SpeechWorkerAdmissionReceipt documents for admitted/rejected peers, lets admitted workers produce SpeechRenderResult gradients, and applies those gradients centrally through SpeechBackpropagationPipeline. Workers still do not write checkpoints.","evidence":"Added GameCult.Mesh to AquaSynth.Core, added payload/admission/assignment/training-step types and store helpers in SpeechDistributedTraining.cs, added RunCultMeshTrainingStep, and added a test with two leased workers plus rejected unleased/read-replica peers. Focused verification: `dotnet test tests/AquaSynth.Dsl.Tests/AquaSynth.Dsl.Tests.csproj --filter \"SpeechDistributedTrainingTests\" -v minimal`: 3 passed. Remaining infrastructure gap: real remote artifact chunk transfer and process supervision belong to CultMesh, not an AquaSynth-local workaround."} -{"date":"2026-05-25","topic":"vocal-tract-control-playground","lesson":"The current AquaSynth vocal-tract lane is touchable as a control surface before it is a Pink Trombone-class tract simulation. A useful playground should expose the real VocalTractControlTarget knobs directly, make the tract-ish shape visible, and stay honest that the WebAudio renderer is a lab proxy rather than full waveguide anatomy.","evidence":"Added tools/vocal-tract-playground with static HTML/CSS/JS, a Node static server, WebAudio source/filter synthesis, tract canvas visualization, presets, and sliders for the 14 base controls plus six mel bands. Verified with `node --check` on app.js/serve.mjs, curl against http://localhost:5125/, and browser interaction: Play toggled audio, Ee preset updated controls and canvas, console errors were empty."} +{"date":"2026-05-25","topic":"vocal-tract-control-playground","lesson":"The current AquaSynth vocal-tract lane is touchable as a voice-patch target surface before it is a Pink Trombone-class tract simulation. A useful playground should expose the real VocalTractControlTarget knobs directly: these are the controls the learned speech driver predicts from phonetic and utterance input, not learned controls themselves. Keep the tract-ish visualization honest that the WebAudio renderer is a lab proxy rather than full waveguide anatomy.","evidence":"Added tools/vocal-tract-playground with static HTML/CSS/JS, a Node static server, WebAudio source/filter synthesis, tract canvas visualization, presets, and sliders for the 14 base voice-patch target controls plus six mel bands. Verified with `node --check` on app.js/serve.mjs, curl against http://localhost:5125/, and browser interaction: Play toggled audio, Ee preset updated controls and canvas, console errors were empty."} diff --git a/state/scratch.md b/state/scratch.md index b259047..dcf0990 100644 --- a/state/scratch.md +++ b/state/scratch.md @@ -4,8 +4,9 @@ Current slice: - Added `tools/vocal-tract-playground`, a static WebAudio playground for the current AquaSynth `VocalTractControlTarget` surface. It exposes the 14 base - speech controls plus six mel-envelope bands, draws a tract-ish canvas, and - includes vowel/noise/nasal presets. + voice-patch target controls plus six mel-envelope bands: these are the knobs + the learned speech driver will predict from phonetic and utterance input. + The page draws a tract-ish canvas and includes vowel/noise/nasal presets. - This is intentionally a touchable control playground, not a claim of Pink Trombone-class tract physics. The canvas and audio are tied to the real AquaSynth control names so future renderer work has an inspectable handle. diff --git a/tools/vocal-tract-playground/README.md b/tools/vocal-tract-playground/README.md index a373ebe..aa9df27 100644 --- a/tools/vocal-tract-playground/README.md +++ b/tools/vocal-tract-playground/README.md @@ -14,7 +14,9 @@ Then open: http://localhost:5125/ ``` -This is a control-surface witness, not a Pink Trombone-class tract simulation. -It exposes the real AquaSynth speech-driver controls, draws a tract-shaped -visualization, and uses a small WebAudio source/filter proxy so the knobs are -audible while the proper tract renderer continues to mature. +This is a voice-patch control witness, not a Pink Trombone-class tract +simulation. It exposes the knobs the learned speech driver is meant to control: +phonetic and utterance input go into the model, the model predicts this +`VocalTractControlTarget` vector, and the voice patch renders sound from those +values. The WebAudio source/filter proxy only makes that target vector touchable +while the proper tract renderer continues to mature. diff --git a/tools/vocal-tract-playground/app.js b/tools/vocal-tract-playground/app.js index 27fe77a..0bc1959 100644 --- a/tools/vocal-tract-playground/app.js +++ b/tools/vocal-tract-playground/app.js @@ -387,10 +387,10 @@ function drawSpectralBars(width, height) { function drawReadout(width, height) { ctx.fillStyle = "#f0f4ed"; ctx.font = "700 22px system-ui, sans-serif"; - ctx.fillText(`vector[20] pressure=${state.pressure.toFixed(2)} noise=${state.turbulence.toFixed(2)} velum=${state.velum.toFixed(2)}`, 28, 42); + ctx.fillText(`voice patch target vector[20] pressure=${state.pressure.toFixed(2)} noise=${state.turbulence.toFixed(2)} velum=${state.velum.toFixed(2)}`, 28, 42); ctx.fillStyle = "#a8b3a3"; ctx.font = "15px system-ui, sans-serif"; - ctx.fillText("AquaSynth control target, not a claimed full tract simulation", 28, height - 24); + ctx.fillText("These are the knobs the learned speech driver will predict", 28, height - 24); } document.querySelectorAll("[data-preset]").forEach(button => {