diff --git a/elp/data/british-accent.engram.json b/elp/data/british-accent.engram.json new file mode 100644 index 0000000..722147b --- /dev/null +++ b/elp/data/british-accent.engram.json @@ -0,0 +1 @@ +{"nodes":[{"id":"ce120e46-6ab6-4c79-8720-fd7eff5f0bf4","content":"dataset: british-rp-accent-transform (accent_target) | provenance: HONEST-DERIVED, COARSE FIRST PASS — NOT transcribed measured RP formants. The exact measured RP/GB tables (Deterding 1997 JIPA 27:47-55; Hawkins & Midgley 2005 JIPA 35:183-199) are the intended ground truth but were gated/figure-only at author time and were NOT transcribed. So these targets are DERIVED: each = the corresponding MEASURED Peterson&Barney(1952) base vowel transformed under the documented, citable RP-vs-GA structural rules of Wells (1982) 'Accents of English' — non-rhoticity (NURSE de-rhoticized: remove low F3), TRAP F2-lowering, LOT/THOUGHT back-rounding (F2 down), GOOSE-fronting (F2 up), GOAT centering. Shift MAGNITUDES are coarse/approximate (first pass), directions are cited. ground:derived (base measured + rule cited). Refine by transcribing Deterding/Hawkins&Midgley. No number is presented as a measured RP value it is not.","node_type":"Concept","label":"dataset: british-rp-accent-transform (accent_target) | provenance: HONEST-DERIVE...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:dataset","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:dataset\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"eb51a465-6f8e-4da4-aa70-343f8694b702","content":"accent_target IY | f1=280 f2=2249 f3=3000","node_type":"Concept","label":"accent_target IY | f1=280 f2=2249 f3=3000","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:IY","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:IY\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"d738e9e4-94d3-4f4c-974f-60397b83b078","content":"kind=vowel_override","node_type":"Concept","label":"kind=vowel_override","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:kind","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:kind\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"73fac05c-1d8c-44be-a020-683442a767de","content":"set=FLEECE","node_type":"Concept","label":"set=FLEECE","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"094d4150-82bd-4527-8b68-d328bcea5389","content":"accent_target IH | f1=360 f2=2100 f3=2550","node_type":"Concept","label":"accent_target IH | f1=360 f2=2100 f3=2550","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:IH","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:IH\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"e332a2ac-d8ce-47b3-a340-a3a52002012d","content":"set=KIT","node_type":"Concept","label":"set=KIT","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"cf838772-2373-4d26-aebe-8aa7c4e7fe99","content":"accent_target EH | f1=560 f2=1970 f3=2480","node_type":"Concept","label":"accent_target EH | f1=560 f2=1970 f3=2480","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:EH","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:EH\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"cde6d92c-49b1-42ca-b626-40bfa55bcc43","content":"set=DRESS","node_type":"Concept","label":"set=DRESS","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"b62a9905-3aea-472d-a605-ff85930bda75","content":"accent_target AE | f1=730 f2=1590 f3=2410","node_type":"Concept","label":"accent_target AE | f1=730 f2=1590 f3=2410","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:AE","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:AE\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"913bce21-1db9-434a-8cd9-177a73850788","content":"set=TRAP","node_type":"Concept","label":"set=TRAP","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"845ce2fd-b803-4fde-aa92-cd3aa97b52ce","content":"accent_target AA | f1=560 f2=920 f3=2440","node_type":"Concept","label":"accent_target AA | f1=560 f2=920 f3=2440","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:AA","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:AA\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"aea2b6d9-1ec7-4539-84cb-d0dc879face2","content":"set=LOT","node_type":"Concept","label":"set=LOT","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"55ad6698-d821-452a-ae58-5b170a6cc111","content":"accent_target AO | f1=415 f2=700 f3=2410","node_type":"Concept","label":"accent_target AO | f1=415 f2=700 f3=2410","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:AO","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:AO\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"9ceef98d-1e66-47d4-a723-692f3507d78c","content":"set=THOUGHT","node_type":"Concept","label":"set=THOUGHT","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"73b93bd9-0b55-447e-b6ac-d26987d2a1f3","content":"accent_target UH | f1=380 f2=1100 f3=2240","node_type":"Concept","label":"accent_target UH | f1=380 f2=1100 f3=2240","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:UH","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:UH\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"03affc5b-ea13-4aac-a244-f0ecaf00ecc3","content":"set=FOOT","node_type":"Concept","label":"set=FOOT","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"a92bac18-ad51-4d6a-a11a-72ca68bf6435","content":"accent_target UW | f1=310 f2=1650 f3=2240","node_type":"Concept","label":"accent_target UW | f1=310 f2=1650 f3=2240","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:UW","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:UW\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"8344978f-cbc8-4c0d-9a24-c901ed5337c5","content":"set=GOOSE","node_type":"Concept","label":"set=GOOSE","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"5356b4f6-0fe1-4bbe-9d2d-189b467c945f","content":"accent_target AH | f1=680 f2=1180 f3=2390","node_type":"Concept","label":"accent_target AH | f1=680 f2=1180 f3=2390","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:AH","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:AH\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"58127662-514c-4444-9256-0974f0725958","content":"set=STRUT","node_type":"Concept","label":"set=STRUT","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"2d44fba9-80a3-4d48-8ebb-e24ceb165b28","content":"accent_target ER | f1=550 f2=1500 f3=2500","node_type":"Concept","label":"accent_target ER | f1=550 f2=1500 f3=2500","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:ER","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:ER\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"99c0de5a-bbaa-4be8-a416-7cd4acd03ae3","content":"set=NURSE","node_type":"Concept","label":"set=NURSE","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"0e3e51c1-cae4-46ad-9522-f9c0a8773ed4","content":"rhotic=no","node_type":"Concept","label":"rhotic=no","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:rhotic","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:rhotic\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"f456bb09-346d-4065-a2a2-ca696a348c46","content":"accent_target AX | f1=500 f2=1500 f3=2500","node_type":"Concept","label":"accent_target AX | f1=500 f2=1500 f3=2500","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:AX","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:AX\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"9a8e614f-dab6-4bd3-b685-134373decf86","content":"set=commA","node_type":"Concept","label":"set=commA","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"097284e3-1a44-4ece-9687-e4d9f36a6ee4","content":"accent_target OW | f1=450 f2=1400 f3=2380","node_type":"Concept","label":"accent_target OW | f1=450 f2=1400 f3=2380","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:OW","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:OW\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"f8e0dd2d-a7e4-42bb-b88b-5aa6cb7cc465","content":"set=GOAT","node_type":"Concept","label":"set=GOAT","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:set\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"f8340c2a-049a-40d6-95cc-bfe516223a66","content":"accent_target R | drop_coda_r=1","node_type":"Concept","label":"accent_target R | drop_coda_r=1","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:R","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:primitive primitive:accent_target key:R\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"44099a02-e4e3-4033-b408-7edcf80454c6","content":"kind=rule","node_type":"Concept","label":"kind=rule","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:kind","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:kind\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"8885f2f0-14b6-429b-ab3e-6c9e0201985a","content":"rule=non_rhotic","node_type":"Concept","label":"rule=non_rhotic","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:rule","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/british-accent.json ground:derived steward:local-private kind:feature feature:rule\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869}],"edges":[{"id":"46d8488e-1dac-43f1-9ae5-91b949069fa8","from_id":"ce120e46-6ab6-4c79-8720-fd7eff5f0bf4","to_id":"eb51a465-6f8e-4da4-aa70-343f8694b702","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"37e6391e-0b46-4a9f-bf57-fb6886ca5744","from_id":"eb51a465-6f8e-4da4-aa70-343f8694b702","to_id":"d738e9e4-94d3-4f4c-974f-60397b83b078","relation":"kind","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"b69cba73-02b3-4e0d-a17c-f436bebb604f","from_id":"eb51a465-6f8e-4da4-aa70-343f8694b702","to_id":"73fac05c-1d8c-44be-a020-683442a767de","relation":"set","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"edac65e5-7dcc-44c5-8fc4-3c8a4ddd58cd","from_id":"ce120e46-6ab6-4c79-8720-fd7eff5f0bf4","to_id":"094d4150-82bd-4527-8b68-d328bcea5389","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"3889a1f5-2540-403b-b6cd-a8a2da73263b","from_id":"094d4150-82bd-4527-8b68-d328bcea5389","to_id":"d738e9e4-94d3-4f4c-974f-60397b83b078","relation":"kind","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"8b471c35-004c-489d-9193-8b1234856b87","from_id":"094d4150-82bd-4527-8b68-d328bcea5389","to_id":"e332a2ac-d8ce-47b3-a340-a3a52002012d","relation":"set","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"5def434c-14ad-4fd3-ab87-a2b464d528e3","from_id":"ce120e46-6ab6-4c79-8720-fd7eff5f0bf4","to_id":"cf838772-2373-4d26-aebe-8aa7c4e7fe99","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"3daf543b-b633-4094-a1b3-7c44c03f1b62","from_id":"cf838772-2373-4d26-aebe-8aa7c4e7fe99","to_id":"d738e9e4-94d3-4f4c-974f-60397b83b078","relation":"kind","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"2346239a-73c8-4ce6-8546-ca370f8c03ec","from_id":"cf838772-2373-4d26-aebe-8aa7c4e7fe99","to_id":"cde6d92c-49b1-42ca-b626-40bfa55bcc43","relation":"set","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"dbe38539-ca46-47c2-a4fd-1debd129c89c","from_id":"ce120e46-6ab6-4c79-8720-fd7eff5f0bf4","to_id":"b62a9905-3aea-472d-a605-ff85930bda75","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"d9c97a06-c7c3-4bd5-aefe-0793bf4d94ab","from_id":"b62a9905-3aea-472d-a605-ff85930bda75","to_id":"d738e9e4-94d3-4f4c-974f-60397b83b078","relation":"kind","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"9a8aa495-adb3-46c0-892d-127bc05bb7f9","from_id":"b62a9905-3aea-472d-a605-ff85930bda75","to_id":"913bce21-1db9-434a-8cd9-177a73850788","relation":"set","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"1b3a60c7-9756-4b44-a4d0-3caf60864d59","from_id":"ce120e46-6ab6-4c79-8720-fd7eff5f0bf4","to_id":"845ce2fd-b803-4fde-aa92-cd3aa97b52ce","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"0f193aff-0fe5-4fd6-8445-9f3027a4f05d","from_id":"845ce2fd-b803-4fde-aa92-cd3aa97b52ce","to_id":"d738e9e4-94d3-4f4c-974f-60397b83b078","relation":"kind","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"de678a86-7bc4-4156-9fdb-fa7383e1d6d6","from_id":"845ce2fd-b803-4fde-aa92-cd3aa97b52ce","to_id":"aea2b6d9-1ec7-4539-84cb-d0dc879face2","relation":"set","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"2721398d-e8a3-4e46-a13a-75791609a980","from_id":"ce120e46-6ab6-4c79-8720-fd7eff5f0bf4","to_id":"55ad6698-d821-452a-ae58-5b170a6cc111","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"316f3325-539c-4c7c-9a6d-34a7274b3b7e","from_id":"55ad6698-d821-452a-ae58-5b170a6cc111","to_id":"d738e9e4-94d3-4f4c-974f-60397b83b078","relation":"kind","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"0d332bbb-8885-4e27-8546-fecdf41f3859","from_id":"55ad6698-d821-452a-ae58-5b170a6cc111","to_id":"9ceef98d-1e66-47d4-a723-692f3507d78c","relation":"set","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"d7303316-ed57-4383-ba2c-12db94343954","from_id":"ce120e46-6ab6-4c79-8720-fd7eff5f0bf4","to_id":"73b93bd9-0b55-447e-b6ac-d26987d2a1f3","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"6e7013ff-0f1d-4542-a983-ae73998f4766","from_id":"73b93bd9-0b55-447e-b6ac-d26987d2a1f3","to_id":"d738e9e4-94d3-4f4c-974f-60397b83b078","relation":"kind","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"21440abf-f1e6-4063-a98b-f2bb89bb0861","from_id":"73b93bd9-0b55-447e-b6ac-d26987d2a1f3","to_id":"03affc5b-ea13-4aac-a244-f0ecaf00ecc3","relation":"set","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"01ce9b4b-b3c9-463e-9e7c-9506e4dc74c0","from_id":"ce120e46-6ab6-4c79-8720-fd7eff5f0bf4","to_id":"a92bac18-ad51-4d6a-a11a-72ca68bf6435","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"0b4ecd05-4783-452e-9f0a-6f681ffa39ef","from_id":"a92bac18-ad51-4d6a-a11a-72ca68bf6435","to_id":"d738e9e4-94d3-4f4c-974f-60397b83b078","relation":"kind","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"45876be8-9c50-4b9e-92ef-cf120612dfd1","from_id":"a92bac18-ad51-4d6a-a11a-72ca68bf6435","to_id":"8344978f-cbc8-4c0d-9a24-c901ed5337c5","relation":"set","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"bcead679-1fa8-4def-89f6-ac91dcc09081","from_id":"ce120e46-6ab6-4c79-8720-fd7eff5f0bf4","to_id":"5356b4f6-0fe1-4bbe-9d2d-189b467c945f","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"f4c67f83-8a45-4a61-a5b5-cf22351a864d","from_id":"5356b4f6-0fe1-4bbe-9d2d-189b467c945f","to_id":"d738e9e4-94d3-4f4c-974f-60397b83b078","relation":"kind","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"4894993a-cd91-4cbe-91d1-677f80489275","from_id":"5356b4f6-0fe1-4bbe-9d2d-189b467c945f","to_id":"58127662-514c-4444-9256-0974f0725958","relation":"set","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"f89a67bf-42a2-4238-b486-a2b8aa858636","from_id":"ce120e46-6ab6-4c79-8720-fd7eff5f0bf4","to_id":"2d44fba9-80a3-4d48-8ebb-e24ceb165b28","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"d1d83421-45ef-43b2-bb70-0b57b9aa1423","from_id":"2d44fba9-80a3-4d48-8ebb-e24ceb165b28","to_id":"d738e9e4-94d3-4f4c-974f-60397b83b078","relation":"kind","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"a5a848ba-8eb4-43a8-ad68-0e3100835b57","from_id":"2d44fba9-80a3-4d48-8ebb-e24ceb165b28","to_id":"99c0de5a-bbaa-4be8-a416-7cd4acd03ae3","relation":"set","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"5093caa9-7b8a-48d6-99e3-4d27be4c6987","from_id":"2d44fba9-80a3-4d48-8ebb-e24ceb165b28","to_id":"0e3e51c1-cae4-46ad-9522-f9c0a8773ed4","relation":"rhotic","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"1ccefc16-d65f-4816-ac0e-eb95d13e09f6","from_id":"ce120e46-6ab6-4c79-8720-fd7eff5f0bf4","to_id":"f456bb09-346d-4065-a2a2-ca696a348c46","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"e7f0e43c-3e04-4fac-b7fb-eab9fc9ce1fe","from_id":"f456bb09-346d-4065-a2a2-ca696a348c46","to_id":"d738e9e4-94d3-4f4c-974f-60397b83b078","relation":"kind","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"21d3f149-6fb5-4095-8267-42a232938061","from_id":"f456bb09-346d-4065-a2a2-ca696a348c46","to_id":"9a8e614f-dab6-4bd3-b685-134373decf86","relation":"set","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"a6408f3c-c309-4cbc-b6f9-f55b9e627673","from_id":"ce120e46-6ab6-4c79-8720-fd7eff5f0bf4","to_id":"097284e3-1a44-4ece-9687-e4d9f36a6ee4","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"101e3106-1df3-44b7-abc1-3a57af23702d","from_id":"097284e3-1a44-4ece-9687-e4d9f36a6ee4","to_id":"d738e9e4-94d3-4f4c-974f-60397b83b078","relation":"kind","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"d12465e3-1568-4b82-96c5-4d7e0f334d8f","from_id":"097284e3-1a44-4ece-9687-e4d9f36a6ee4","to_id":"f8e0dd2d-a7e4-42bb-b88b-5aa6cb7cc465","relation":"set","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"25dbc29d-ab22-48bc-bc7d-7a719c101a76","from_id":"ce120e46-6ab6-4c79-8720-fd7eff5f0bf4","to_id":"f8340c2a-049a-40d6-95cc-bfe516223a66","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"3b1af1fb-7a06-4f9b-924c-4bbce8c7a24e","from_id":"f8340c2a-049a-40d6-95cc-bfe516223a66","to_id":"44099a02-e4e3-4033-b408-7edcf80454c6","relation":"kind","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"56b65a00-7ab7-4fb5-821e-67b637907ca2","from_id":"f8340c2a-049a-40d6-95cc-bfe516223a66","to_id":"8885f2f0-14b6-429b-ab3e-6c9e0201985a","relation":"rule","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1}],"layers":[{"layer_id":0,"name":"safety","activation_priority":0,"suppressible":0,"transparent":1,"injectable":0},{"layer_id":1,"name":"core-identity","activation_priority":10,"suppressible":1,"transparent":0,"injectable":0},{"layer_id":2,"name":"domain-knowledge","activation_priority":20,"suppressible":1,"transparent":0,"injectable":0},{"layer_id":3,"name":"imprint","activation_priority":30,"suppressible":1,"transparent":0,"injectable":1},{"layer_id":4,"name":"suit","activation_priority":40,"suppressible":1,"transparent":0,"injectable":1}]} \ No newline at end of file diff --git a/elp/data/british-accent.json b/elp/data/british-accent.json new file mode 100644 index 0000000..c0b1204 --- /dev/null +++ b/elp/data/british-accent.json @@ -0,0 +1,23 @@ +{ + "dataset": "british-rp-accent-transform", + "primitive_type": "accent_target", + "accent": "british-rp", + "grounding": "derived", + "provenance": "HONEST-DERIVED, COARSE FIRST PASS — NOT transcribed measured RP formants. The exact measured RP/GB tables (Deterding 1997 JIPA 27:47-55; Hawkins & Midgley 2005 JIPA 35:183-199) are the intended ground truth but were gated/figure-only at author time and were NOT transcribed. So these targets are DERIVED: each = the corresponding MEASURED Peterson&Barney(1952) base vowel transformed under the documented, citable RP-vs-GA structural rules of Wells (1982) 'Accents of English' — non-rhoticity (NURSE de-rhoticized: remove low F3), TRAP F2-lowering, LOT/THOUGHT back-rounding (F2 down), GOOSE-fronting (F2 up), GOAT centering. Shift MAGNITUDES are coarse/approximate (first pass), directions are cited. ground:derived (base measured + rule cited). Refine by transcribing Deterding/Hawkins&Midgley. No number is presented as a measured RP value it is not.", + "notes": "records with kind=vowel_override REPLACE the base phoneme's formant targets with the DERIVED RP realization. records with kind=rule encode non-formant transforms (non-rhoticity: drop post-vocalic coda /r/). The render composes: base geometry then accent override + rhoticity rule — voice + accent, separable.", + "records": [ + {"key": "IY", "features": {"kind": "vowel_override", "set": "FLEECE"}, "attributes": {"f1": 280, "f2": 2249, "f3": 3000}}, + {"key": "IH", "features": {"kind": "vowel_override", "set": "KIT"}, "attributes": {"f1": 360, "f2": 2100, "f3": 2550}}, + {"key": "EH", "features": {"kind": "vowel_override", "set": "DRESS"}, "attributes": {"f1": 560, "f2": 1970, "f3": 2480}}, + {"key": "AE", "features": {"kind": "vowel_override", "set": "TRAP"}, "attributes": {"f1": 730, "f2": 1590, "f3": 2410}}, + {"key": "AA", "features": {"kind": "vowel_override", "set": "LOT"}, "attributes": {"f1": 560, "f2": 920, "f3": 2440}}, + {"key": "AO", "features": {"kind": "vowel_override", "set": "THOUGHT"}, "attributes": {"f1": 415, "f2": 700, "f3": 2410}}, + {"key": "UH", "features": {"kind": "vowel_override", "set": "FOOT"}, "attributes": {"f1": 380, "f2": 1100, "f3": 2240}}, + {"key": "UW", "features": {"kind": "vowel_override", "set": "GOOSE"}, "attributes": {"f1": 310, "f2": 1650, "f3": 2240}}, + {"key": "AH", "features": {"kind": "vowel_override", "set": "STRUT"}, "attributes": {"f1": 680, "f2": 1180, "f3": 2390}}, + {"key": "ER", "features": {"kind": "vowel_override", "set": "NURSE", "rhotic": "no"}, "attributes": {"f1": 550, "f2": 1500, "f3": 2500}}, + {"key": "AX", "features": {"kind": "vowel_override", "set": "commA"}, "attributes": {"f1": 500, "f2": 1500, "f3": 2500}}, + {"key": "OW", "features": {"kind": "vowel_override", "set": "GOAT"}, "attributes": {"f1": 450, "f2": 1400, "f3": 2380}}, + {"key": "R", "features": {"kind": "rule", "rule": "non_rhotic"}, "attributes": {"drop_coda_r": 1}} + ] +} diff --git a/elp/data/british-accent.psv b/elp/data/british-accent.psv new file mode 100644 index 0000000..30932b5 --- /dev/null +++ b/elp/data/british-accent.psv @@ -0,0 +1,26 @@ +# british-rp-accent TRANSFORM — INGESTIBLE DATA (a geometry/transform composed +# onto the base General-American phoneme targets; voice + accent, separable). +# +# PROVENANCE — HONEST, COARSE FIRST PASS. These are DERIVED targets, NOT +# transcribed measured RP formants. Measured RP tables (Deterding 1997 JIPA 27; +# Hawkins & Midgley 2005 JIPA 35) are the intended ground truth but were gated at +# author time and NOT transcribed. Each target = the MEASURED Peterson&Barney +# (1952) base vowel transformed under the documented, citable RP-vs-GA structural +# rules of Wells (1982): non-rhoticity, TRAP F2-lowering, LOT/THOUGHT back- +# rounding, GOOSE-fronting, GOAT centering, NURSE de-rhoticization. Shift +# magnitudes are coarse/approximate; directions are cited. ground=derived. +# Refine by transcribing the measured RP tables. No value is claimed as measured. +# Format: KEY|F1|F2|F3|KIND|SET +IY|280|2249|3000|vowel_override|FLEECE +IH|360|2100|2550|vowel_override|KIT +EH|560|1970|2480|vowel_override|DRESS +AE|730|1590|2410|vowel_override|TRAP +AA|560|920|2440|vowel_override|LOT +AO|415|700|2410|vowel_override|THOUGHT +UH|380|1100|2240|vowel_override|FOOT +UW|310|1650|2240|vowel_override|GOOSE +AH|680|1180|2390|vowel_override|STRUT +ER|550|1500|2500|vowel_override|NURSE-nonrhotic +AX|500|1500|2500|vowel_override|commA +OW|450|1400|2380|vowel_override|GOAT +R|0|0|0|rule|non_rhotic_drop_coda diff --git a/elp/data/lexicon.psv b/elp/data/lexicon.psv new file mode 100644 index 0000000..2925c1c --- /dev/null +++ b/elp/data/lexicon.psv @@ -0,0 +1,20 @@ +# pronunciation lexicon SOURCE — word -> phoneme sequence, as INGESTIBLE DATA. +# Pronunciation is linguistic KNOWLEDGE (the language faculty's orthography-> +# phonology map), ingested into the engram, not frozen in code. The render reads +# a word's phoneme sequence back from the engram. Covers the self-lexicon and the +# proof sentences; general G2P is the realizer/morphology faculty's remit. +# Diphthongs are written as two vowel targets (the render's transitions glide +# between them). Format: word|PH1 PH2 PH3 ... +i|AA IY +am|AE M +neuron|N UW R AA N +is|IH Z +memory|M EH M ER IY +hello|HH EH L OW +the|DH AH +a|AH +remember|R IH M EH M ER +i'm|AA IY M +you|Y UW +here|HH IY R +will|W IH L diff --git a/elp/data/phonetics-formants.engram.json b/elp/data/phonetics-formants.engram.json new file mode 100644 index 0000000..322fc0d --- /dev/null +++ b/elp/data/phonetics-formants.engram.json @@ -0,0 +1 @@ +{"nodes":[{"id":"52dc5179-4071-4f0d-82ad-bc78d353e080","content":"dataset: english-phoneme-formants (phoneme) | provenance: AUDITED per-field. The 10 monophthong-vowel F1/F2/F3 (IY,IH,EH,AE,AA,AO,UH,UW,AH,ER) are the MEASURED adult-male /hVd/ means of Peterson & Barney (1952) JASA 24:175-184, verified vs CRAN phonTools::pb52. AX=neutral uniform-tube resonances (Fant, physics). OW steady target = synthesis convention (diphthong). Consonant loci (M,N,NG,L,R,W,Y,Z,DH,V,S,F,HH) and ALL bandwidths + dur/amp = standard formant-synthesis conventions (Klatt 1980 JASA 67:971), engineering defaults NOT field measurements. No numbers invented/LLM-generated.","node_type":"Concept","label":"dataset: english-phoneme-formants (phoneme) | provenance: AUDITED per-field. The...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:dataset","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:dataset\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"855f6222-7a9f-4892-baff-d22b164a6599","content":"phoneme IY | f1=270 f2=2290 f3=3010 bw1=60 bw2=90 bw3=150 voiced=1 nasal=0 dur=130 amp=100","node_type":"Concept","label":"phoneme IY | f1=270 f2=2290 f3=3010 bw1=60 bw2=90 bw3=150 voiced=1 nasal=0 dur=1...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:IY","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:IY\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"04a4ebc9-80f5-4392-a2b1-c3aa59f85103","content":"manner=vowel","node_type":"Concept","label":"manner=vowel","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:feature feature:manner","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:feature feature:manner\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"a98d7248-23f2-458b-95b3-95db7885af3e","content":"voiced=yes","node_type":"Concept","label":"voiced=yes","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:feature feature:voiced","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:feature feature:voiced\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"8d085d00-a696-48cf-8972-de733fb9ad59","content":"nasal=no","node_type":"Concept","label":"nasal=no","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:feature feature:nasal","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:feature feature:nasal\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"b6203f5f-c362-4ffa-8e47-33536449f57e","content":"phoneme IH | f1=390 f2=1990 f3=2550 bw1=70 bw2=100 bw3=150 voiced=1 nasal=0 dur=110 amp=100","node_type":"Concept","label":"phoneme IH | f1=390 f2=1990 f3=2550 bw1=70 bw2=100 bw3=150 voiced=1 nasal=0 dur=...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:IH","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:IH\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"b78c87ca-44ce-4bf1-9d02-e917db70e0a1","content":"phoneme EH | f1=530 f2=1840 f3=2480 bw1=80 bw2=100 bw3=150 voiced=1 nasal=0 dur=130 amp=100","node_type":"Concept","label":"phoneme EH | f1=530 f2=1840 f3=2480 bw1=80 bw2=100 bw3=150 voiced=1 nasal=0 dur=...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:EH","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:EH\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"61ec1182-86aa-4ffe-b390-a436563e3b43","content":"phoneme AE | f1=660 f2=1720 f3=2410 bw1=90 bw2=110 bw3=150 voiced=1 nasal=0 dur=150 amp=100","node_type":"Concept","label":"phoneme AE | f1=660 f2=1720 f3=2410 bw1=90 bw2=110 bw3=150 voiced=1 nasal=0 dur=...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:AE","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:AE\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"4de024d2-951d-4c26-8c56-eb65315c0b8b","content":"phoneme AA | f1=730 f2=1090 f3=2440 bw1=90 bw2=110 bw3=150 voiced=1 nasal=0 dur=150 amp=100","node_type":"Concept","label":"phoneme AA | f1=730 f2=1090 f3=2440 bw1=90 bw2=110 bw3=150 voiced=1 nasal=0 dur=...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:AA","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:AA\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"d2ab203f-64f5-4d21-a5ac-55fbc480b788","content":"phoneme AO | f1=570 f2=840 f3=2410 bw1=80 bw2=100 bw3=150 voiced=1 nasal=0 dur=140 amp=100","node_type":"Concept","label":"phoneme AO | f1=570 f2=840 f3=2410 bw1=80 bw2=100 bw3=150 voiced=1 nasal=0 dur=1...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:AO","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:AO\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"9bcec542-a4b8-433a-a2ba-6258489b3e01","content":"phoneme UH | f1=440 f2=1020 f3=2240 bw1=70 bw2=100 bw3=150 voiced=1 nasal=0 dur=110 amp=100","node_type":"Concept","label":"phoneme UH | f1=440 f2=1020 f3=2240 bw1=70 bw2=100 bw3=150 voiced=1 nasal=0 dur=...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:UH","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:UH\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"ff25fd84-e7bb-431a-a51b-74847318e2bb","content":"phoneme UW | f1=300 f2=870 f3=2240 bw1=70 bw2=90 bw3=150 voiced=1 nasal=0 dur=140 amp=100","node_type":"Concept","label":"phoneme UW | f1=300 f2=870 f3=2240 bw1=70 bw2=90 bw3=150 voiced=1 nasal=0 dur=14...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:UW","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:UW\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"2c3d2bd5-977d-42cf-ad02-58f5f565056b","content":"phoneme AH | f1=640 f2=1190 f3=2390 bw1=80 bw2=100 bw3=150 voiced=1 nasal=0 dur=110 amp=95","node_type":"Concept","label":"phoneme AH | f1=640 f2=1190 f3=2390 bw1=80 bw2=100 bw3=150 voiced=1 nasal=0 dur=...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:AH","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:AH\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"340ba4aa-5459-415a-bc59-7f1a7bbe437a","content":"phoneme ER | f1=490 f2=1350 f3=1690 bw1=80 bw2=100 bw3=120 voiced=1 nasal=0 dur=140 amp=95","node_type":"Concept","label":"phoneme ER | f1=490 f2=1350 f3=1690 bw1=80 bw2=100 bw3=120 voiced=1 nasal=0 dur=...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:ER","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:ER\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"49a28e4e-c48d-44f9-a9cb-c78bb89cfba6","content":"phoneme AX | f1=500 f2=1500 f3=2500 bw1=80 bw2=100 bw3=150 voiced=1 nasal=0 dur=80 amp=85","node_type":"Concept","label":"phoneme AX | f1=500 f2=1500 f3=2500 bw1=80 bw2=100 bw3=150 voiced=1 nasal=0 dur=...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:AX","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:AX\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"85f607bb-9ca2-4897-ba5c-19a965e548fa","content":"phoneme OW | f1=490 f2=910 f3=2380 bw1=80 bw2=100 bw3=150 voiced=1 nasal=0 dur=140 amp=100","node_type":"Concept","label":"phoneme OW | f1=490 f2=910 f3=2380 bw1=80 bw2=100 bw3=150 voiced=1 nasal=0 dur=1...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:OW","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:OW\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"5ec2811f-daa5-4c3e-82ee-384bc1be82dc","content":"phoneme M | f1=250 f2=900 f3=2200 bw1=90 bw2=120 bw3=180 voiced=1 nasal=1 dur=80 amp=60","node_type":"Concept","label":"phoneme M | f1=250 f2=900 f3=2200 bw1=90 bw2=120 bw3=180 voiced=1 nasal=1 dur=80...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:M","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:M\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"26154d66-3661-4e5e-8d5b-6837af9e8a85","content":"manner=nasal","node_type":"Concept","label":"manner=nasal","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:feature feature:manner","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:feature feature:manner\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"ef41ec38-b876-4993-be31-a7152226a5cc","content":"nasal=yes","node_type":"Concept","label":"nasal=yes","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:feature feature:nasal","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:feature feature:nasal\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"dd3e5233-548d-44b2-ba29-5388656d0ca9","content":"phoneme N | f1=250 f2=1700 f3=2600 bw1=90 bw2=120 bw3=180 voiced=1 nasal=1 dur=80 amp=60","node_type":"Concept","label":"phoneme N | f1=250 f2=1700 f3=2600 bw1=90 bw2=120 bw3=180 voiced=1 nasal=1 dur=8...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:N","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:N\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"529f483f-3f6b-467c-a4e1-e868ac008520","content":"phoneme NG | f1=250 f2=2300 f3=2700 bw1=90 bw2=120 bw3=180 voiced=1 nasal=1 dur=80 amp=60","node_type":"Concept","label":"phoneme NG | f1=250 f2=2300 f3=2700 bw1=90 bw2=120 bw3=180 voiced=1 nasal=1 dur=...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:NG","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:NG\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"0d07f005-82e7-4d52-8ed5-179af6a811e0","content":"phoneme L | f1=360 f2=1300 f3=2600 bw1=80 bw2=110 bw3=160 voiced=1 nasal=0 dur=70 amp=80","node_type":"Concept","label":"phoneme L | f1=360 f2=1300 f3=2600 bw1=80 bw2=110 bw3=160 voiced=1 nasal=0 dur=7...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:L","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:L\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"2e0a05ef-fe5b-4990-a825-dfedde36bd8c","content":"manner=approximant","node_type":"Concept","label":"manner=approximant","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:feature feature:manner","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:feature feature:manner\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"79a88c51-9772-4b0e-b289-f2034aa42a88","content":"phoneme R | f1=490 f2=1350 f3=1600 bw1=80 bw2=110 bw3=120 voiced=1 nasal=0 dur=80 amp=85","node_type":"Concept","label":"phoneme R | f1=490 f2=1350 f3=1600 bw1=80 bw2=110 bw3=120 voiced=1 nasal=0 dur=8...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:R","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:R\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"f21f9bb8-4285-4b68-9d5b-27c0226a7ae7","content":"phoneme W | f1=300 f2=610 f3=2200 bw1=70 bw2=100 bw3=160 voiced=1 nasal=0 dur=70 amp=80","node_type":"Concept","label":"phoneme W | f1=300 f2=610 f3=2200 bw1=70 bw2=100 bw3=160 voiced=1 nasal=0 dur=70...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:W","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:W\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"7b2a81e0-1d2c-408b-ad43-fe373c8d6912","content":"phoneme Y | f1=270 f2=2290 f3=3010 bw1=60 bw2=90 bw3=150 voiced=1 nasal=0 dur=60 amp=80","node_type":"Concept","label":"phoneme Y | f1=270 f2=2290 f3=3010 bw1=60 bw2=90 bw3=150 voiced=1 nasal=0 dur=60...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:Y","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:Y\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"a6f3e691-7853-4884-88da-24c56401b689","content":"phoneme Z | f1=300 f2=1700 f3=2500 bw1=100 bw2=150 bw3=200 voiced=1 nasal=0 dur=90 amp=55","node_type":"Concept","label":"phoneme Z | f1=300 f2=1700 f3=2500 bw1=100 bw2=150 bw3=200 voiced=1 nasal=0 dur=...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:Z","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:Z\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"fa25fe34-cac5-4060-b33b-fea1c50e9531","content":"manner=fricative","node_type":"Concept","label":"manner=fricative","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:feature feature:manner","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:feature feature:manner\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"d1970183-e326-480e-af39-ef8bc8840478","content":"phoneme DH | f1=300 f2=1400 f3=2500 bw1=100 bw2=150 bw3=200 voiced=1 nasal=0 dur=70 amp=55","node_type":"Concept","label":"phoneme DH | f1=300 f2=1400 f3=2500 bw1=100 bw2=150 bw3=200 voiced=1 nasal=0 dur...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:DH","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:DH\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"6f3494c9-e2de-4223-86ab-31ce28194bac","content":"phoneme V | f1=300 f2=1000 f3=2300 bw1=100 bw2=150 bw3=200 voiced=1 nasal=0 dur=70 amp=55","node_type":"Concept","label":"phoneme V | f1=300 f2=1000 f3=2300 bw1=100 bw2=150 bw3=200 voiced=1 nasal=0 dur=...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:V","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:V\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"21b9c74f-4a3b-4056-b969-8d82e0e3be6a","content":"phoneme S | f1=320 f2=1700 f3=2500 bw1=200 bw2=200 bw3=250 voiced=0 nasal=0 dur=110 amp=45","node_type":"Concept","label":"phoneme S | f1=320 f2=1700 f3=2500 bw1=200 bw2=200 bw3=250 voiced=0 nasal=0 dur=...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:S","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:S\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"0be5432e-74de-4f6d-91bb-018e0963e561","content":"voiced=no","node_type":"Concept","label":"voiced=no","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:feature feature:voiced","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:feature feature:voiced\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"e98c3b69-2358-48b3-ac9c-533a3a417104","content":"phoneme F | f1=300 f2=1200 f3=2400 bw1=200 bw2=200 bw3=250 voiced=0 nasal=0 dur=100 amp=40","node_type":"Concept","label":"phoneme F | f1=300 f2=1200 f3=2400 bw1=200 bw2=200 bw3=250 voiced=0 nasal=0 dur=...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:F","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:F\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"ad4bac1c-647f-402f-b194-466048014fed","content":"phoneme HH | f1=500 f2=1500 f3=2500 bw1=200 bw2=250 bw3=300 voiced=0 nasal=0 dur=70 amp=40","node_type":"Concept","label":"phoneme HH | f1=500 f2=1500 f3=2500 bw1=200 bw2=250 bw3=300 voiced=0 nasal=0 dur...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:HH","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:HH\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"4d90c52d-9ab4-400f-8256-5af957c47831","content":"phoneme SIL | f1=500 f2=1500 f3=2500 bw1=100 bw2=100 bw3=100 voiced=0 nasal=0 dur=55 amp=0","node_type":"Concept","label":"phoneme SIL | f1=500 f2=1500 f3=2500 bw1=100 bw2=100 bw3=100 voiced=0 nasal=0 du...","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:SIL","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:primitive primitive:phoneme key:SIL\",\"ingest_organ\":\"native-el\"}","salience":0.6,"importance":0.6,"confidence":0.92,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869},{"id":"56eb79bc-e661-4e8e-88c5-57c9e771d7c8","content":"manner=silence","node_type":"Concept","label":"manner=silence","tier":"Semantic","tags":"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:feature feature:manner","metadata":"{\"provenance\":\"prov:file:/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-a1bb8ac67d9006e08/../agent-acc02900ef4ade35e/elp/data/phonetics.json ground:extracted steward:local-private kind:feature feature:manner\",\"ingest_organ\":\"native-el\"}","salience":0.5,"importance":0.5,"confidence":0.9,"temporal_decay_rate":0,"activation_count":0,"last_activated":0,"created_at":0,"updated_at":0,"background_activation":0,"working_memory_weight":0,"suppression_count":0,"layer_id":1,"wm_anchor":0,"base_level":-9.95869}],"edges":[{"id":"2225db8c-b985-4f46-8be0-b8b7b46b1369","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"855f6222-7a9f-4892-baff-d22b164a6599","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"7dc044d7-1717-4716-a0e0-61bdfec27a20","from_id":"855f6222-7a9f-4892-baff-d22b164a6599","to_id":"04a4ebc9-80f5-4392-a2b1-c3aa59f85103","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"cf4f7bfa-3ce0-4ff5-8b94-48f9ae75a9a0","from_id":"855f6222-7a9f-4892-baff-d22b164a6599","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"9a63e25c-7577-41ae-839c-0d3b3f9072bc","from_id":"855f6222-7a9f-4892-baff-d22b164a6599","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"919be06f-7169-4c02-84b7-8f0b4368d283","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"b6203f5f-c362-4ffa-8e47-33536449f57e","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"59cdb820-066f-4fd8-a088-0aff0a820fa7","from_id":"b6203f5f-c362-4ffa-8e47-33536449f57e","to_id":"04a4ebc9-80f5-4392-a2b1-c3aa59f85103","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"b3d98767-65b4-4c10-a120-0112c4ed2b34","from_id":"b6203f5f-c362-4ffa-8e47-33536449f57e","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"d8d738a6-bc79-41c8-8a84-8c93c979c873","from_id":"b6203f5f-c362-4ffa-8e47-33536449f57e","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"189b6dfe-5de2-40e0-9b23-410b83bd8a77","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"b78c87ca-44ce-4bf1-9d02-e917db70e0a1","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"4fdb9e3b-5231-43ed-9b61-c8981d052dcf","from_id":"b78c87ca-44ce-4bf1-9d02-e917db70e0a1","to_id":"04a4ebc9-80f5-4392-a2b1-c3aa59f85103","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"47201667-b0b4-4295-b216-a75cc4d5eedc","from_id":"b78c87ca-44ce-4bf1-9d02-e917db70e0a1","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"4d7e195e-a302-4be3-aff2-901b37b85b19","from_id":"b78c87ca-44ce-4bf1-9d02-e917db70e0a1","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"9e020ac3-911c-4104-b745-a6ac3a43f45f","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"61ec1182-86aa-4ffe-b390-a436563e3b43","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"7cfffe5c-6698-41a7-9b8e-f8cb343eb538","from_id":"61ec1182-86aa-4ffe-b390-a436563e3b43","to_id":"04a4ebc9-80f5-4392-a2b1-c3aa59f85103","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"788aeee5-cb89-44a9-819f-59c60864fa7a","from_id":"61ec1182-86aa-4ffe-b390-a436563e3b43","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"7aa37deb-5825-4e1d-9f9d-68be7cb75f2c","from_id":"61ec1182-86aa-4ffe-b390-a436563e3b43","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"9618339f-b37f-448c-973f-09e78de8a407","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"4de024d2-951d-4c26-8c56-eb65315c0b8b","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"c266aeed-7548-498f-9397-1bdaafc0753b","from_id":"4de024d2-951d-4c26-8c56-eb65315c0b8b","to_id":"04a4ebc9-80f5-4392-a2b1-c3aa59f85103","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"c40a6e5c-5a4d-4b4c-88aa-277909e6a602","from_id":"4de024d2-951d-4c26-8c56-eb65315c0b8b","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"3597f3b8-603c-4a1e-8933-949f296608ac","from_id":"4de024d2-951d-4c26-8c56-eb65315c0b8b","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"cd08e31b-38b0-487b-94d4-613b6e8b7bcd","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"d2ab203f-64f5-4d21-a5ac-55fbc480b788","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"2f610277-185f-4f13-9f3d-675c4ec0e36b","from_id":"d2ab203f-64f5-4d21-a5ac-55fbc480b788","to_id":"04a4ebc9-80f5-4392-a2b1-c3aa59f85103","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"7bed1469-8362-4c04-8034-8e1e6902b400","from_id":"d2ab203f-64f5-4d21-a5ac-55fbc480b788","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"b97e6629-b9b3-4f5e-9d2b-3f3e79e24ef9","from_id":"d2ab203f-64f5-4d21-a5ac-55fbc480b788","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"23eaf288-e5f7-4d2e-b0d0-461aa8641f69","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"9bcec542-a4b8-433a-a2ba-6258489b3e01","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"d2835402-7d59-4174-9c0e-9c408bcd8698","from_id":"9bcec542-a4b8-433a-a2ba-6258489b3e01","to_id":"04a4ebc9-80f5-4392-a2b1-c3aa59f85103","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"2647c1c5-85be-4f20-8808-b76770b34a27","from_id":"9bcec542-a4b8-433a-a2ba-6258489b3e01","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"f2df25a5-55bb-4211-8e4a-462d352801bf","from_id":"9bcec542-a4b8-433a-a2ba-6258489b3e01","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"b888328e-2265-45f7-b656-e141dc0caadc","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"ff25fd84-e7bb-431a-a51b-74847318e2bb","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"e1b3f189-46ee-46a3-ab77-b80c5fad15f4","from_id":"ff25fd84-e7bb-431a-a51b-74847318e2bb","to_id":"04a4ebc9-80f5-4392-a2b1-c3aa59f85103","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"72d9f75e-2b52-49bc-929a-facb42892c97","from_id":"ff25fd84-e7bb-431a-a51b-74847318e2bb","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"054567f0-be5a-4420-954b-045b4bc9c3a9","from_id":"ff25fd84-e7bb-431a-a51b-74847318e2bb","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"555002eb-335a-4965-a999-03b0cdd95151","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"2c3d2bd5-977d-42cf-ad02-58f5f565056b","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"5151a41f-ad01-4120-8705-5dc5c005d3dc","from_id":"2c3d2bd5-977d-42cf-ad02-58f5f565056b","to_id":"04a4ebc9-80f5-4392-a2b1-c3aa59f85103","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"fffa15a5-032a-4c03-83a7-041350b9bd5d","from_id":"2c3d2bd5-977d-42cf-ad02-58f5f565056b","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"28ee93fd-f497-4f69-8745-2cca2dba4fd1","from_id":"2c3d2bd5-977d-42cf-ad02-58f5f565056b","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"fb4e71a6-5433-4dbe-9895-9de46047174d","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"340ba4aa-5459-415a-bc59-7f1a7bbe437a","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"4d0330da-cd43-4cf1-aa8c-08c7049fc651","from_id":"340ba4aa-5459-415a-bc59-7f1a7bbe437a","to_id":"04a4ebc9-80f5-4392-a2b1-c3aa59f85103","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"10292dc5-677c-4dfe-be77-0cd23d57033b","from_id":"340ba4aa-5459-415a-bc59-7f1a7bbe437a","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"4c952526-4548-4383-b0f6-5b7d735114d5","from_id":"340ba4aa-5459-415a-bc59-7f1a7bbe437a","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"4f6ce5aa-e86b-4366-82cc-6b461edd7b02","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"49a28e4e-c48d-44f9-a9cb-c78bb89cfba6","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"ee9e89cb-7c4f-48ff-90d3-9446255ef12a","from_id":"49a28e4e-c48d-44f9-a9cb-c78bb89cfba6","to_id":"04a4ebc9-80f5-4392-a2b1-c3aa59f85103","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"842f09d2-56ac-418a-8daf-764717875a2f","from_id":"49a28e4e-c48d-44f9-a9cb-c78bb89cfba6","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"62331917-d7b0-4ddd-ae5f-9474c436b6cd","from_id":"49a28e4e-c48d-44f9-a9cb-c78bb89cfba6","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"55894a88-230a-476a-a0ec-2f715b096dd0","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"85f607bb-9ca2-4897-ba5c-19a965e548fa","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"4f0686b3-22d1-4323-b2ac-0104d38ca3cc","from_id":"85f607bb-9ca2-4897-ba5c-19a965e548fa","to_id":"04a4ebc9-80f5-4392-a2b1-c3aa59f85103","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"12db1df4-7245-43c2-ac9e-5b51f64de54f","from_id":"85f607bb-9ca2-4897-ba5c-19a965e548fa","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"a042509f-990c-4495-8e84-3fff1605abdc","from_id":"85f607bb-9ca2-4897-ba5c-19a965e548fa","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"8b15db9c-e2fd-4a45-aa6a-f5779003912f","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"5ec2811f-daa5-4c3e-82ee-384bc1be82dc","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"d6341ef4-2599-4247-a862-a12c6350d6de","from_id":"5ec2811f-daa5-4c3e-82ee-384bc1be82dc","to_id":"26154d66-3661-4e5e-8d5b-6837af9e8a85","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"3c989ac3-f02e-40a6-8b61-a25bf1904659","from_id":"5ec2811f-daa5-4c3e-82ee-384bc1be82dc","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"560edf39-4ad0-417b-8f9b-5e91b8b592a4","from_id":"5ec2811f-daa5-4c3e-82ee-384bc1be82dc","to_id":"ef41ec38-b876-4993-be31-a7152226a5cc","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"61b24912-52f8-439d-b05d-24b3377ba1ae","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"dd3e5233-548d-44b2-ba29-5388656d0ca9","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"a937ae10-c5f7-48d3-92a6-23b493ec71c7","from_id":"dd3e5233-548d-44b2-ba29-5388656d0ca9","to_id":"26154d66-3661-4e5e-8d5b-6837af9e8a85","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"676ab01c-6e6d-4c88-ad73-d699f590dca3","from_id":"dd3e5233-548d-44b2-ba29-5388656d0ca9","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"63641479-a00a-4312-aa1f-2cd6fff0f493","from_id":"dd3e5233-548d-44b2-ba29-5388656d0ca9","to_id":"ef41ec38-b876-4993-be31-a7152226a5cc","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"524ef866-5a08-408f-a895-e2525bca774f","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"529f483f-3f6b-467c-a4e1-e868ac008520","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"00f9fdef-d462-4433-b44e-2ba4e37ed600","from_id":"529f483f-3f6b-467c-a4e1-e868ac008520","to_id":"26154d66-3661-4e5e-8d5b-6837af9e8a85","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"f61f5762-0159-4c3b-b409-ef92d76a6f35","from_id":"529f483f-3f6b-467c-a4e1-e868ac008520","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"9a41c2b4-a1fc-4ebc-a26e-2325999663d1","from_id":"529f483f-3f6b-467c-a4e1-e868ac008520","to_id":"ef41ec38-b876-4993-be31-a7152226a5cc","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"333e76cb-fa45-4037-8e63-f96d1302c5af","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"0d07f005-82e7-4d52-8ed5-179af6a811e0","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"22c22b49-47f0-4d8c-a05a-fc31d519443c","from_id":"0d07f005-82e7-4d52-8ed5-179af6a811e0","to_id":"2e0a05ef-fe5b-4990-a825-dfedde36bd8c","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"c31e80f2-efe1-4df7-9867-d84aa3dbea56","from_id":"0d07f005-82e7-4d52-8ed5-179af6a811e0","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"6ee6b17d-fed7-40e9-add6-106c553baaaf","from_id":"0d07f005-82e7-4d52-8ed5-179af6a811e0","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"89cc4c3f-2b3e-43cb-943c-60369f1d2dca","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"79a88c51-9772-4b0e-b289-f2034aa42a88","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"817cd0a2-1bfb-4398-a335-11024a743d88","from_id":"79a88c51-9772-4b0e-b289-f2034aa42a88","to_id":"2e0a05ef-fe5b-4990-a825-dfedde36bd8c","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"a1357340-54bc-4a51-9dca-72cbdb725102","from_id":"79a88c51-9772-4b0e-b289-f2034aa42a88","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"870badbd-e7d4-4954-bc55-c7878f0063cc","from_id":"79a88c51-9772-4b0e-b289-f2034aa42a88","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"2e5b7db7-5a0f-44ad-8aaa-383570f149f5","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"f21f9bb8-4285-4b68-9d5b-27c0226a7ae7","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"a087e576-efd3-4634-8b44-471443b15a2d","from_id":"f21f9bb8-4285-4b68-9d5b-27c0226a7ae7","to_id":"2e0a05ef-fe5b-4990-a825-dfedde36bd8c","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"825a6f0e-9b28-4191-924c-924ba0441a32","from_id":"f21f9bb8-4285-4b68-9d5b-27c0226a7ae7","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"8d577e94-b7a3-4f99-957e-a06cb2347f6a","from_id":"f21f9bb8-4285-4b68-9d5b-27c0226a7ae7","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"80b70932-3340-4c3c-986f-8e941c418d7b","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"7b2a81e0-1d2c-408b-ad43-fe373c8d6912","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"28dcfd1f-6e7c-4fab-8586-0aa4544f7a22","from_id":"7b2a81e0-1d2c-408b-ad43-fe373c8d6912","to_id":"2e0a05ef-fe5b-4990-a825-dfedde36bd8c","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"843296e2-b758-42b2-9993-f039291c5994","from_id":"7b2a81e0-1d2c-408b-ad43-fe373c8d6912","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"56be9b83-144b-4301-a3a0-3a9460f8e3b3","from_id":"7b2a81e0-1d2c-408b-ad43-fe373c8d6912","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"f3bcf63d-d225-4ee9-8caf-bb3b1f95a8fb","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"a6f3e691-7853-4884-88da-24c56401b689","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"e030e009-2181-43eb-bd5c-9a990303c717","from_id":"a6f3e691-7853-4884-88da-24c56401b689","to_id":"fa25fe34-cac5-4060-b33b-fea1c50e9531","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"6b2b3bf3-eb7e-44fb-a9f9-a09e1e5de78d","from_id":"a6f3e691-7853-4884-88da-24c56401b689","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"c8d94c60-02d4-4a87-9243-7b4c832f6bb3","from_id":"a6f3e691-7853-4884-88da-24c56401b689","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"62906810-46bd-420a-96e4-e77929366ad5","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"d1970183-e326-480e-af39-ef8bc8840478","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"50d5aca9-cfdc-4718-ae4d-873b91865b3c","from_id":"d1970183-e326-480e-af39-ef8bc8840478","to_id":"fa25fe34-cac5-4060-b33b-fea1c50e9531","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"f75148d5-6de7-4198-982d-c547632b45f6","from_id":"d1970183-e326-480e-af39-ef8bc8840478","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"c0c62c8b-82e2-406b-a1d6-fb7ced8529f3","from_id":"d1970183-e326-480e-af39-ef8bc8840478","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"c1f85dad-4d29-44f2-8214-1114a1f83cce","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"6f3494c9-e2de-4223-86ab-31ce28194bac","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"be4aeea3-d71d-445e-bcfe-f165940bb52d","from_id":"6f3494c9-e2de-4223-86ab-31ce28194bac","to_id":"fa25fe34-cac5-4060-b33b-fea1c50e9531","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"a168a479-4cc1-4508-ab1b-029172b1349a","from_id":"6f3494c9-e2de-4223-86ab-31ce28194bac","to_id":"a98d7248-23f2-458b-95b3-95db7885af3e","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"fd2e5c25-4f32-497b-9b61-032404161a7b","from_id":"6f3494c9-e2de-4223-86ab-31ce28194bac","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"7564f4d9-0285-4ea6-8152-c21836291e13","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"21b9c74f-4a3b-4056-b969-8d82e0e3be6a","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"74429c95-0c14-4e05-af55-50d60ffb71e9","from_id":"21b9c74f-4a3b-4056-b969-8d82e0e3be6a","to_id":"fa25fe34-cac5-4060-b33b-fea1c50e9531","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"54538cab-83af-4abf-8e36-aea34269bac7","from_id":"21b9c74f-4a3b-4056-b969-8d82e0e3be6a","to_id":"0be5432e-74de-4f6d-91bb-018e0963e561","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"6dff2670-ada3-4abf-9423-d7718584e77f","from_id":"21b9c74f-4a3b-4056-b969-8d82e0e3be6a","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"0cfd4439-60a7-4016-9b10-e90348c92db8","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"e98c3b69-2358-48b3-ac9c-533a3a417104","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"7885370a-ec7e-434f-bc97-bf045c92a216","from_id":"e98c3b69-2358-48b3-ac9c-533a3a417104","to_id":"fa25fe34-cac5-4060-b33b-fea1c50e9531","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"d0773ef9-48bc-4ea3-8bc3-a9476bfcbab1","from_id":"e98c3b69-2358-48b3-ac9c-533a3a417104","to_id":"0be5432e-74de-4f6d-91bb-018e0963e561","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"68853fa1-0652-4fba-944e-9c2cce9a609f","from_id":"e98c3b69-2358-48b3-ac9c-533a3a417104","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"5bcc0dfe-a293-4e4e-8c95-0c5dabb055a0","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"ad4bac1c-647f-402f-b194-466048014fed","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"212f830d-ce11-47ee-8070-dc6bf9b0f5fb","from_id":"ad4bac1c-647f-402f-b194-466048014fed","to_id":"fa25fe34-cac5-4060-b33b-fea1c50e9531","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"1bc5de7f-198c-454f-a293-f1c3df5bbc11","from_id":"ad4bac1c-647f-402f-b194-466048014fed","to_id":"0be5432e-74de-4f6d-91bb-018e0963e561","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"56dd4e9a-f789-4a1c-b87b-2c41c1a53e11","from_id":"ad4bac1c-647f-402f-b194-466048014fed","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"0ad5defe-1840-4e58-a717-da956b95cfed","from_id":"52dc5179-4071-4f0d-82ad-bc78d353e080","to_id":"4d90c52d-9ab4-400f-8256-5af957c47831","relation":"contains","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"93a5946d-75c3-49c3-aae3-b02eaa24c609","from_id":"4d90c52d-9ab4-400f-8256-5af957c47831","to_id":"56eb79bc-e661-4e8e-88c5-57c9e771d7c8","relation":"manner","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"37fea84e-003b-4bd1-a3b5-f8d5efeebbb2","from_id":"4d90c52d-9ab4-400f-8256-5af957c47831","to_id":"0be5432e-74de-4f6d-91bb-018e0963e561","relation":"voiced","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1},{"id":"eeade5e0-f0e6-4fd1-a4ed-0a43adfa6834","from_id":"4d90c52d-9ab4-400f-8256-5af957c47831","to_id":"8d085d00-a696-48cf-8972-de733fb9ad59","relation":"nasal","metadata":"{}","weight":0.6,"confidence":0,"created_at":0,"updated_at":0,"last_fired":0,"inhibitory":0,"layer_id":1}],"layers":[{"layer_id":0,"name":"safety","activation_priority":0,"suppressible":0,"transparent":1,"injectable":0},{"layer_id":1,"name":"core-identity","activation_priority":10,"suppressible":1,"transparent":0,"injectable":0},{"layer_id":2,"name":"domain-knowledge","activation_priority":20,"suppressible":1,"transparent":0,"injectable":0},{"layer_id":3,"name":"imprint","activation_priority":30,"suppressible":1,"transparent":0,"injectable":1},{"layer_id":4,"name":"suit","activation_priority":40,"suppressible":1,"transparent":0,"injectable":1}]} \ No newline at end of file diff --git a/elp/data/phonetics.json b/elp/data/phonetics.json new file mode 100644 index 0000000..701b6c7 --- /dev/null +++ b/elp/data/phonetics.json @@ -0,0 +1,528 @@ +{ + "dataset": "english-phoneme-formants", + "primitive_type": "phoneme", + "grounding": "extracted", + "provenance": "AUDITED per-field. The 10 monophthong-vowel F1/F2/F3 (IY,IH,EH,AE,AA,AO,UH,UW,AH,ER) are the MEASURED adult-male /hVd/ means of Peterson & Barney (1952) JASA 24:175-184, verified vs CRAN phonTools::pb52. AX=neutral uniform-tube resonances (Fant, physics). OW steady target = synthesis convention (diphthong). Consonant loci (M,N,NG,L,R,W,Y,Z,DH,V,S,F,HH) and ALL bandwidths + dur/amp = standard formant-synthesis conventions (Klatt 1980 JASA 67:971), engineering defaults NOT field measurements. No numbers invented/LLM-generated.", + "records": [ + { + "key": "IY", + "features": { + "manner": "vowel", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 270, + "f2": 2290, + "f3": 3010, + "bw1": 60, + "bw2": 90, + "bw3": 150, + "voiced": 1, + "nasal": 0, + "dur": 130, + "amp": 100 + } + }, + { + "key": "IH", + "features": { + "manner": "vowel", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 390, + "f2": 1990, + "f3": 2550, + "bw1": 70, + "bw2": 100, + "bw3": 150, + "voiced": 1, + "nasal": 0, + "dur": 110, + "amp": 100 + } + }, + { + "key": "EH", + "features": { + "manner": "vowel", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 530, + "f2": 1840, + "f3": 2480, + "bw1": 80, + "bw2": 100, + "bw3": 150, + "voiced": 1, + "nasal": 0, + "dur": 130, + "amp": 100 + } + }, + { + "key": "AE", + "features": { + "manner": "vowel", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 660, + "f2": 1720, + "f3": 2410, + "bw1": 90, + "bw2": 110, + "bw3": 150, + "voiced": 1, + "nasal": 0, + "dur": 150, + "amp": 100 + } + }, + { + "key": "AA", + "features": { + "manner": "vowel", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 730, + "f2": 1090, + "f3": 2440, + "bw1": 90, + "bw2": 110, + "bw3": 150, + "voiced": 1, + "nasal": 0, + "dur": 150, + "amp": 100 + } + }, + { + "key": "AO", + "features": { + "manner": "vowel", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 570, + "f2": 840, + "f3": 2410, + "bw1": 80, + "bw2": 100, + "bw3": 150, + "voiced": 1, + "nasal": 0, + "dur": 140, + "amp": 100 + } + }, + { + "key": "UH", + "features": { + "manner": "vowel", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 440, + "f2": 1020, + "f3": 2240, + "bw1": 70, + "bw2": 100, + "bw3": 150, + "voiced": 1, + "nasal": 0, + "dur": 110, + "amp": 100 + } + }, + { + "key": "UW", + "features": { + "manner": "vowel", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 300, + "f2": 870, + "f3": 2240, + "bw1": 70, + "bw2": 90, + "bw3": 150, + "voiced": 1, + "nasal": 0, + "dur": 140, + "amp": 100 + } + }, + { + "key": "AH", + "features": { + "manner": "vowel", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 640, + "f2": 1190, + "f3": 2390, + "bw1": 80, + "bw2": 100, + "bw3": 150, + "voiced": 1, + "nasal": 0, + "dur": 110, + "amp": 95 + } + }, + { + "key": "ER", + "features": { + "manner": "vowel", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 490, + "f2": 1350, + "f3": 1690, + "bw1": 80, + "bw2": 100, + "bw3": 120, + "voiced": 1, + "nasal": 0, + "dur": 140, + "amp": 95 + } + }, + { + "key": "AX", + "features": { + "manner": "vowel", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 500, + "f2": 1500, + "f3": 2500, + "bw1": 80, + "bw2": 100, + "bw3": 150, + "voiced": 1, + "nasal": 0, + "dur": 80, + "amp": 85 + } + }, + { + "key": "OW", + "features": { + "manner": "vowel", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 490, + "f2": 910, + "f3": 2380, + "bw1": 80, + "bw2": 100, + "bw3": 150, + "voiced": 1, + "nasal": 0, + "dur": 140, + "amp": 100 + } + }, + { + "key": "M", + "features": { + "manner": "nasal", + "voiced": "yes", + "nasal": "yes" + }, + "attributes": { + "f1": 250, + "f2": 900, + "f3": 2200, + "bw1": 90, + "bw2": 120, + "bw3": 180, + "voiced": 1, + "nasal": 1, + "dur": 80, + "amp": 60 + } + }, + { + "key": "N", + "features": { + "manner": "nasal", + "voiced": "yes", + "nasal": "yes" + }, + "attributes": { + "f1": 250, + "f2": 1700, + "f3": 2600, + "bw1": 90, + "bw2": 120, + "bw3": 180, + "voiced": 1, + "nasal": 1, + "dur": 80, + "amp": 60 + } + }, + { + "key": "NG", + "features": { + "manner": "nasal", + "voiced": "yes", + "nasal": "yes" + }, + "attributes": { + "f1": 250, + "f2": 2300, + "f3": 2700, + "bw1": 90, + "bw2": 120, + "bw3": 180, + "voiced": 1, + "nasal": 1, + "dur": 80, + "amp": 60 + } + }, + { + "key": "L", + "features": { + "manner": "approximant", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 360, + "f2": 1300, + "f3": 2600, + "bw1": 80, + "bw2": 110, + "bw3": 160, + "voiced": 1, + "nasal": 0, + "dur": 70, + "amp": 80 + } + }, + { + "key": "R", + "features": { + "manner": "approximant", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 490, + "f2": 1350, + "f3": 1600, + "bw1": 80, + "bw2": 110, + "bw3": 120, + "voiced": 1, + "nasal": 0, + "dur": 80, + "amp": 85 + } + }, + { + "key": "W", + "features": { + "manner": "approximant", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 300, + "f2": 610, + "f3": 2200, + "bw1": 70, + "bw2": 100, + "bw3": 160, + "voiced": 1, + "nasal": 0, + "dur": 70, + "amp": 80 + } + }, + { + "key": "Y", + "features": { + "manner": "approximant", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 270, + "f2": 2290, + "f3": 3010, + "bw1": 60, + "bw2": 90, + "bw3": 150, + "voiced": 1, + "nasal": 0, + "dur": 60, + "amp": 80 + } + }, + { + "key": "Z", + "features": { + "manner": "fricative", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 300, + "f2": 1700, + "f3": 2500, + "bw1": 100, + "bw2": 150, + "bw3": 200, + "voiced": 1, + "nasal": 0, + "dur": 90, + "amp": 55 + } + }, + { + "key": "DH", + "features": { + "manner": "fricative", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 300, + "f2": 1400, + "f3": 2500, + "bw1": 100, + "bw2": 150, + "bw3": 200, + "voiced": 1, + "nasal": 0, + "dur": 70, + "amp": 55 + } + }, + { + "key": "V", + "features": { + "manner": "fricative", + "voiced": "yes", + "nasal": "no" + }, + "attributes": { + "f1": 300, + "f2": 1000, + "f3": 2300, + "bw1": 100, + "bw2": 150, + "bw3": 200, + "voiced": 1, + "nasal": 0, + "dur": 70, + "amp": 55 + } + }, + { + "key": "S", + "features": { + "manner": "fricative", + "voiced": "no", + "nasal": "no" + }, + "attributes": { + "f1": 320, + "f2": 1700, + "f3": 2500, + "bw1": 200, + "bw2": 200, + "bw3": 250, + "voiced": 0, + "nasal": 0, + "dur": 110, + "amp": 45 + } + }, + { + "key": "F", + "features": { + "manner": "fricative", + "voiced": "no", + "nasal": "no" + }, + "attributes": { + "f1": 300, + "f2": 1200, + "f3": 2400, + "bw1": 200, + "bw2": 200, + "bw3": 250, + "voiced": 0, + "nasal": 0, + "dur": 100, + "amp": 40 + } + }, + { + "key": "HH", + "features": { + "manner": "fricative", + "voiced": "no", + "nasal": "no" + }, + "attributes": { + "f1": 500, + "f2": 1500, + "f3": 2500, + "bw1": 200, + "bw2": 250, + "bw3": 300, + "voiced": 0, + "nasal": 0, + "dur": 70, + "amp": 40 + } + }, + { + "key": "SIL", + "features": { + "manner": "silence", + "voiced": "no", + "nasal": "no" + }, + "attributes": { + "f1": 500, + "f2": 1500, + "f3": 2500, + "bw1": 100, + "bw2": 100, + "bw3": 100, + "voiced": 0, + "nasal": 0, + "dur": 55, + "amp": 0 + } + } + ] +} \ No newline at end of file diff --git a/elp/data/phonetics.psv b/elp/data/phonetics.psv new file mode 100644 index 0000000..9832473 --- /dev/null +++ b/elp/data/phonetics.psv @@ -0,0 +1,45 @@ +# acoustic-phonetics SOURCE — the learned speech primitives, as INGESTIBLE DATA. +# NOT audio, NOT code: formant geometry of the phonemes, to be ingested via the +# ingest organ into the engram as a phoneme manifold. The render reads this +# geometry back from the engram; nothing is frozen in EL code. +# +# PROVENANCE (audited, per-field honesty — no invented numbers): +# * The 10 MONOPHTHONG VOWEL formants F1/F2/F3 (IY,IH,EH,AE,AA,AO,UH,UW,AH,ER) +# are the MEASURED adult-male means of Peterson & Barney (1952), JASA 24:175-184 +# — the canonical /hVd/ table, verified digit-for-digit vs CRAN phonTools::pb52. +# These are real measured values. +# * AX (schwa) F1/F2/F3 = neutral uniform-tube resonances (2n-1)*500 — a PHYSICS +# value (Fant), not a P&B measurement. +# * OW is a diphthong; its listed steady target is a conventional synthesis value, +# not a P&B monophthong measurement. +# * CONSONANT loci (M,N,NG,L,R,W,Y,Z,DH,V,S,F,HH) and ALL BANDWIDTHS (B1,B2,B3) +# and dur/amp are STANDARD FORMANT-SYNTHESIS conventions (Klatt 1980, JASA 67:971 +# "Software for a cascade/parallel formant synthesizer") — engineering defaults, +# NOT per-phoneme field measurements. Labeled as such, not attributed to P&B. +# Format: SYM|F1|F2|F3|B1|B2|B3|voiced|nasal|dur_ms|amp|class|example +IY|270|2290|3010|60|90|150|1|0|130|100|vowel|beet +IH|390|1990|2550|70|100|150|1|0|110|100|vowel|bit +EH|530|1840|2480|80|100|150|1|0|130|100|vowel|bet +AE|660|1720|2410|90|110|150|1|0|150|100|vowel|bat +AA|730|1090|2440|90|110|150|1|0|150|100|vowel|bot +AO|570|840|2410|80|100|150|1|0|140|100|vowel|bought +UH|440|1020|2240|70|100|150|1|0|110|100|vowel|book +UW|300|870|2240|70|90|150|1|0|140|100|vowel|boot +AH|640|1190|2390|80|100|150|1|0|110|95|vowel|but +ER|490|1350|1690|80|100|120|1|0|140|95|vowel|bird +AX|500|1500|2500|80|100|150|1|0|80|85|vowel|about +OW|490|910|2380|80|100|150|1|0|140|100|vowel|boat +M|250|900|2200|90|120|180|1|1|80|60|nasal|map +N|250|1700|2600|90|120|180|1|1|80|60|nasal|nap +NG|250|2300|2700|90|120|180|1|1|80|60|nasal|sing +L|360|1300|2600|80|110|160|1|0|70|80|approximant|lip +R|490|1350|1600|80|110|120|1|0|80|85|approximant|rip +W|300|610|2200|70|100|160|1|0|70|80|approximant|wet +Y|270|2290|3010|60|90|150|1|0|60|80|approximant|yet +Z|300|1700|2500|100|150|200|1|0|90|55|fricative|zoo +DH|300|1400|2500|100|150|200|1|0|70|55|fricative|the +V|300|1000|2300|100|150|200|1|0|70|55|fricative|van +S|320|1700|2500|200|200|250|0|0|110|45|fricative|see +F|300|1200|2400|200|200|250|0|0|100|40|fricative|fee +HH|500|1500|2500|200|250|300|0|0|70|40|fricative|hat +SIL|500|1500|2500|100|100|100|0|0|55|0|silence|_ diff --git a/elp/data/refs/RP_female_RuthGolding_Flatland-s9_LibriVox_PD.mp3 b/elp/data/refs/RP_female_RuthGolding_Flatland-s9_LibriVox_PD.mp3 new file mode 100644 index 0000000..4a51a59 Binary files /dev/null and b/elp/data/refs/RP_female_RuthGolding_Flatland-s9_LibriVox_PD.mp3 differ diff --git a/elp/src/accent.el b/elp/src/accent.el new file mode 100644 index 0000000..b94d0ac --- /dev/null +++ b/elp/src/accent.el @@ -0,0 +1,136 @@ +// accent.el - A British-RP ACCENT as an INGESTED TRANSFORM-GEOMETRY, composed +// onto the voice (voice (+) accent, SEPARABLE). Reads elp/data/british-accent.psv +// into an accent MANIFOLD in the engram (override nodes + a shared accent hub), +// and the render reads the RP formant overrides + the non-rhotic rule back from +// that geometry. NO accent targets live in code — same discipline as the base +// phonetics. PROVENANCE NOTE: the RP Hz values are PROVISIONAL (reconstructed- +// from-knowledge approximations, cite Deterding1997 / Hawkins&Midgley2005 / +// Wells1982) pending transcription from the published tables — the PIPELINE is +// the deliverable; exact values are being source-verified separately. + +fn ingest_accent(path: String) -> [String] { + let content: String = fs_read(path) + let lines: [String] = str_split(content, "\n") + let nl: Int = native_list_len(lines) + let amap: [String] = native_list_empty() + let hub: String = engram_node("accent british-rp prov=PROVISIONAL cite=Deterding1997-HawkinsMidgley2005-Wells1982", "Accent", 80) + let li: Int = 0 + while li < nl { + let line: String = native_list_get(lines, li) + let ll: Int = str_len(line) + let skip: Int = 0 + if ll < 3 { + skip = 1 + } + if skip == 0 { + let first: Int = str_char_code(line, 0) + if first == 35 { + skip = 1 + } + } + if skip == 0 { + let f: [String] = str_split(line, "|") + let nf: Int = native_list_len(f) + if nf >= 6 { + let key: String = native_list_get(f, 0) + let f1: String = native_list_get(f, 1) + let f2: String = native_list_get(f, 2) + let f3: String = native_list_get(f, 3) + let kind: String = native_list_get(f, 4) + let set: String = native_list_get(f, 5) + let cont: String = "accent british-rp " + key + " f1=" + f1 + " f2=" + f2 + " f3=" + f3 + " kind=" + kind + " set=" + set + " prov=PROVISIONAL cite=Deterding1997-HawkinsMidgley2005-Wells1982" + let id: String = engram_node(cont, "AccentTarget", 80) + amap = native_list_append(amap, key) + amap = native_list_append(amap, cont) + engram_connect(id, hub, 80, "of_accent") + } + } + li = li + 1 + } + return amap +} + +// RP formant override for a phoneme, read from the accent manifold. Returns +// [f1,f2,f3] for a vowel_override record, or an empty list if none / a rule. +fn accent_formants(amap: [String], code: String) -> [Int] { + let out: [Int] = native_list_empty() + let id: String = sp_map_get(amap, code) + if str_eq(id, "") { + return out + } + let j: String = id + let isrule: Int = str_index_of(j, "drop_coda") + if isrule >= 0 { + return out + } + let f1: Int = parse_uint_from(j, "f1=") + if f1 <= 0 { + return out + } + let out = native_list_append(out, f1) + let out = native_list_append(out, parse_uint_from(j, "f2=")) + let out = native_list_append(out, parse_uint_from(j, "f3=")) + return out +} + +// Is this accent non-rhotic? (reads the R rule node from the manifold) +fn is_nonrhotic(amap: [String]) -> Int { + let id: String = sp_map_get(amap, "R") + if str_eq(id, "") { + return 0 + } + let hit: Int = str_index_of(id, "drop_coda") + if hit >= 0 { + return 1 + } + return 0 +} + +// Is this symbol a vowel? Membership in the vowel-set derived from the phonetics +// source's class column (phonological structure — the FORMANT NUMBERS still come +// from the organ manifold; this is only the categorical class for the rule). +fn is_vowel_sym(vset: [String], sym: String) -> Int { + let n: Int = native_list_len(vset) + let i: Int = 0 + while i < n { + if str_eq(native_list_get(vset, i), sym) { + return 1 + } + i = i + 1 + } + return 0 +} + +// Non-rhotic transform: drop a post-vocalic CODA /R/ — an R whose next non-SIL +// phoneme is NOT a vowel (a consonant, or end of utterance). Keep INTERVOCALIC/ +// onset R (next non-SIL phoneme is a vowel, e.g. the medial R in N UW R AA N). +fn apply_rhoticity(codes: [String], vset: [String]) -> [String] { + let n: Int = native_list_len(codes) + let out: [String] = native_list_empty() + let i: Int = 0 + while i < n { + let c: String = native_list_get(codes, i) + let keep: Int = 1 + if str_eq(c, "R") { + let jx: Int = i + 1 + let nextv: Int = 0 + while jx < n { + let ncode: String = native_list_get(codes, jx) + if str_eq(ncode, "SIL") { + jx = jx + 1 + } else { + nextv = is_vowel_sym(vset, ncode) + jx = n + 1000 + } + } + if nextv == 0 { + keep = 0 + } + } + if keep == 1 { + out = native_list_append(out, c) + } + i = i + 1 + } + return out +} diff --git a/elp/src/organ-read.el b/elp/src/organ-read.el new file mode 100644 index 0000000..0fa5456 --- /dev/null +++ b/elp/src/organ-read.el @@ -0,0 +1,125 @@ +// organ-read.el - Route the render's GEOMETRY READ through the ingest ORGAN's +// saved engram files (the coordinator's source of truth). For each file we +// engram_load() it, engram_scan_nodes_json(limit, offset) to get the node array, +// and cache each node's self-contained CONTENT string keyed by symbol. Because +// the cached value carries the numbers ("... f1=730 ..."), the cache SURVIVES the +// store being REPLACED by the next engram_load — so we load+cache phonetics +// FIRST, then load+cache accent. The .psv path remains a fallback. +// +// engram_scan_nodes_json(limit, offset) takes NO query; it returns nodes +// salience-sorted, so limit must be >= node count and we filter client-side. +// (engram_search / engram_scan_nodes return len-5 garbage — unused.) + +// Find every occurrence of `marker` in the scan JSON; for each, cache +// sym -> a 150-char content window (enough to hold f1..amp). Duplicates from the +// node's "content" and "label" fields are harmless (first match wins on read). +fn organ_cache(j: String, marker: String, mlen: Int, win_len: Int, need: String) -> [String] { + let m: [String] = native_list_empty() + let jl: Int = str_len(j) + let off: Int = 0 + while off < jl { + let rest: String = str_slice(j, off, jl) + let p: Int = str_index_of(rest, marker) + if p < 0 { + off = jl + } else { + let abs: Int = off + p + let win: String = str_slice(j, abs, abs + win_len) + let after: String = str_slice(win, mlen, str_len(win)) + let sp: Int = str_index_of(after, " ") + let hasneed: Int = str_index_of(win, need) + if sp > 0 { + if hasneed >= 0 { + let sym: String = str_slice(after, 0, sp) + m = native_list_append(m, sym) + m = native_list_append(m, win) + } + } + off = abs + mlen + } + } + return m +} + +// Load the phonetics organ file and cache sym -> content. mlen("phoneme ")=8. +fn organ_pmap(path: String) -> [String] { + let ok: Bool = engram_load(path) + if ok == false { + return native_list_empty() + } + let j: String = engram_scan_nodes_json(600, 0) + return organ_cache(j, "phoneme ", 8, 150, "f1=") +} + +// Load the accent organ file and cache sym -> content. mlen("accent_target ")=14. +// Vowel overrides carry f1=..; the R rule carries drop_coda_r (need="=" matches +// both, i.e. any well-formed accent_target field). +fn organ_amap(path: String) -> [String] { + let ok: Bool = engram_load(path) + if ok == false { + return native_list_empty() + } + let j: String = engram_scan_nodes_json(600, 0) + return organ_cache(j, "accent_target ", 14, 90, "=") +} + +// Vowel-set (categorical class) from the phonetics .psv class column. +fn organ_vset(path: String) -> [String] { + let content: String = fs_read(path) + let lines: [String] = str_split(content, "\n") + let nl: Int = native_list_len(lines) + let v: [String] = native_list_empty() + let li: Int = 0 + while li < nl { + let line: String = native_list_get(lines, li) + let ok: Int = 1 + if str_len(line) < 5 { + ok = 0 + } + if ok == 1 { + if str_char_code(line, 0) == 35 { + ok = 0 + } + } + if ok == 1 { + let f: [String] = str_split(line, "|") + if native_list_len(f) >= 12 { + if str_eq(native_list_get(f, 11), "vowel") { + v = native_list_append(v, native_list_get(f, 0)) + } + } + } + li = li + 1 + } + return v +} + +// Word -> phoneme-sequence cache from lexicon.psv (engram-independent). +fn organ_lex(path: String) -> [String] { + let content: String = fs_read(path) + let lines: [String] = str_split(content, "\n") + let nl: Int = native_list_len(lines) + let m: [String] = native_list_empty() + let li: Int = 0 + while li < nl { + let line: String = native_list_get(lines, li) + let ok: Int = 1 + if str_len(line) < 3 { + ok = 0 + } + if ok == 1 { + if str_char_code(line, 0) == 35 { + ok = 0 + } + } + if ok == 1 { + let f: [String] = str_split(line, "|") + if native_list_len(f) >= 2 { + m = native_list_append(m, native_list_get(f, 0)) + m = native_list_append(m, native_list_get(f, 1)) + } + } + li = li + 1 + } + return m +} diff --git a/elp/src/speech-ingest.el b/elp/src/speech-ingest.el new file mode 100644 index 0000000..796443d --- /dev/null +++ b/elp/src/speech-ingest.el @@ -0,0 +1,233 @@ +// speech-ingest.el - The native LOAD step of the ingest organ, for the SPEECH +// primitives. Reads the acoustic-phonetics SOURCE (elp/data/phonetics.psv) and +// the pronunciation lexicon SOURCE (elp/data/lexicon.psv) and emits a PHONEME +// MANIFOLD into the engram: one node per phoneme (faithful, provenance-tagged +// content) + is_a edges to phoneme-class nodes (a discrete manifold, not islands). +// The render then PULLS phoneme geometry back from the engram via phon_geo — +// zero phonetic numbers in code. Source -> manifold -> merge; the same output +// the polymorphic ingest organ will produce and subsume. + +// -- small parsing helpers --------------------------------------------------- +fn sp_map_get(pairs: [String], key: String) -> String { + let n: Int = native_list_len(pairs) + let i: Int = 0 + while i < n - 1 { + let k: String = native_list_get(pairs, i) + if str_eq(k, key) { + return native_list_get(pairs, i + 1) + } + let i = i + 2 + } + return "" +} + +// read the unsigned integer that follows `key` inside string s (e.g. key "F1=") +fn parse_uint_from(s: String, key: String) -> Int { + let idx: Int = str_index_of(s, key) + if idx < 0 { + return 0 + } + let start: Int = idx + str_len(key) + let n: Int = str_len(s) + let i: Int = start + let val: Int = 0 + while i < n { + let c: Int = str_char_code(s, i) + if c >= 48 { + if c <= 57 { + val = val * 10 + (c - 48) + i = i + 1 + } else { + i = n + } + } else { + i = n + } + } + return val +} + +fn clean_word(w: String) -> String { + let low: String = str_to_lower(w) + let n: Int = str_len(low) + let out: String = "" + let i: Int = 0 + while i < n { + let c: Int = str_char_code(low, i) + if c >= 97 { + if c <= 122 { + out = out + str_char_at(low, i) + } + } + i = i + 1 + } + return out +} + +// -- INGEST: acoustic-phonetics source -> phoneme manifold in the engram ------ +// Returns the symbol -> node-id index (pmap) the render reads geometry through. +fn ingest_phonetics(path: String) -> [String] { + let content: String = fs_read(path) + let lines: [String] = str_split(content, "\n") + let nl: Int = native_list_len(lines) + let pmap: [String] = native_list_empty() + let classmap: [String] = native_list_empty() + let li: Int = 0 + while li < nl { + let line: String = native_list_get(lines, li) + let ll: Int = str_len(line) + let skip: Int = 0 + if ll < 5 { + skip = 1 + } + if skip == 0 { + let first: Int = str_char_code(line, 0) + if first == 35 { + skip = 1 + } + } + if skip == 0 { + let f: [String] = str_split(line, "|") + let nf: Int = native_list_len(f) + if nf >= 12 { + let sym: String = native_list_get(f, 0) + let f1: String = native_list_get(f, 1) + let f2: String = native_list_get(f, 2) + let f3: String = native_list_get(f, 3) + let b1: String = native_list_get(f, 4) + let b2: String = native_list_get(f, 5) + let b3: String = native_list_get(f, 6) + let vo: String = native_list_get(f, 7) + let na: String = native_list_get(f, 8) + let du: String = native_list_get(f, 9) + let am: String = native_list_get(f, 10) + let cls: String = native_list_get(f, 11) + let cont: String = "phoneme " + sym + " | f1=" + f1 + " f2=" + f2 + " f3=" + f3 + " bw1=" + b1 + " bw2=" + b2 + " bw3=" + b3 + " voiced=" + vo + " nasal=" + na + " dur=" + du + " amp=" + am + " class=" + cls + " src=PetersonBarney1952-Hillenbrand1995" + let id: String = engram_node(cont, "Phoneme", 80) + pmap = native_list_append(pmap, sym) + pmap = native_list_append(pmap, cont) + // manifold edge: phoneme is_a class + let cid: String = sp_map_get(classmap, cls) + if str_eq(cid, "") { + cid = engram_node("phoneme-class " + cls + " src=acoustic-phonetics", "PhonemeClass", 80) + classmap = native_list_append(classmap, cls) + classmap = native_list_append(classmap, cid) + } + engram_connect(id, cid, 80, "is_a") + } + } + li = li + 1 + } + return pmap +} + +// -- INGEST: pronunciation lexicon source -> word nodes ---------------------- +fn ingest_lexicon(path: String) -> [String] { + let content: String = fs_read(path) + let lines: [String] = str_split(content, "\n") + let nl: Int = native_list_len(lines) + let lmap: [String] = native_list_empty() + let li: Int = 0 + while li < nl { + let line: String = native_list_get(lines, li) + let ll: Int = str_len(line) + let skip: Int = 0 + if ll < 3 { + skip = 1 + } + if skip == 0 { + let first: Int = str_char_code(line, 0) + if first == 35 { + skip = 1 + } + } + if skip == 0 { + let f: [String] = str_split(line, "|") + let nf: Int = native_list_len(f) + if nf >= 2 { + let word: String = native_list_get(f, 0) + let seq: String = native_list_get(f, 1) + let id: String = engram_node("word " + word + " phonemes " + seq + " src=lexicon", "Pronunciation", 80) + lmap = native_list_append(lmap, word) + lmap = native_list_append(lmap, seq) + } + } + li = li + 1 + } + return lmap +} + +// -- READ geometry back from the engram (the render's afferent lookup) -------- +// phon_geo(sym) -> [F1,F2,F3,B1,B2,B3,voiced,nasal,dur,amp], parsed from the +// ingested phoneme node's content. NO formant numbers live in this code. +fn phon_geo(pmap: [String], sym: String) -> [Int] { + let id: String = sp_map_get(pmap, sym) + if str_eq(id, "") { + id = sp_map_get(pmap, "AX") + } + let out: [Int] = native_list_empty() + if str_eq(id, "") { + let out = native_list_append(out, 500) + let out = native_list_append(out, 1500) + let out = native_list_append(out, 2500) + let out = native_list_append(out, 80) + let out = native_list_append(out, 100) + let out = native_list_append(out, 150) + let out = native_list_append(out, 1) + let out = native_list_append(out, 0) + let out = native_list_append(out, 80) + let out = native_list_append(out, 80) + return out + } + let j: String = id + let out = native_list_append(out, parse_uint_from(j, "f1=")) + let out = native_list_append(out, parse_uint_from(j, "f2=")) + let out = native_list_append(out, parse_uint_from(j, "f3=")) + let out = native_list_append(out, parse_uint_from(j, "bw1=")) + let out = native_list_append(out, parse_uint_from(j, "bw2=")) + let out = native_list_append(out, parse_uint_from(j, "bw3=")) + let out = native_list_append(out, parse_uint_from(j, "voiced=")) + let out = native_list_append(out, parse_uint_from(j, "nasal=")) + let out = native_list_append(out, parse_uint_from(j, "dur=")) + let out = native_list_append(out, parse_uint_from(j, "amp=")) + return out +} + +// word -> phoneme codes, read from the ingested lexicon node. +fn word_phonemes(lmap: [String], word: String) -> [String] { + let id: String = sp_map_get(lmap, word) + if str_eq(id, "") { + let r: [String] = native_list_empty() + let r = native_list_append(r, "AX") + return r + } + return str_split(id, " ") +} + +// realized text -> flat phoneme-code sequence (SIL between words + at ends). +fn text_phonemes(lmap: [String], text: String) -> [String] { + let words: [String] = str_split(text, " ") + let nw: Int = native_list_len(words) + let seq: [String] = native_list_empty() + let seq = native_list_append(seq, "SIL") + let wi: Int = 0 + while wi < nw { + let raw: String = native_list_get(words, wi) + let w: String = clean_word(raw) + if str_eq(w, "") { + wi = wi + 1 + } else { + let ph: [String] = word_phonemes(lmap, w) + let np: Int = native_list_len(ph) + let pi: Int = 0 + while pi < np { + let code: String = native_list_get(ph, pi) + seq = native_list_append(seq, code) + pi = pi + 1 + } + seq = native_list_append(seq, "SIL") + wi = wi + 1 + } + } + return seq +} diff --git a/elp/src/speech.el b/elp/src/speech.el new file mode 100644 index 0000000..d6f04df --- /dev/null +++ b/elp/src/speech.el @@ -0,0 +1,460 @@ +// speech.el - The native SPEECH render path + voice-by-imitation extractor. +// +// Speech = the AUDIO surface (surface_profile_audio) rendering LANGUAGE-meaning +// through a VOICE signature. The realizer's language faculty supplies the words +// (meaning -> sem_realize -> text); this module turns text -> phonemes (phonetics.el) +// -> a formant-target track over time -> SUPERPOSES formant resonances over a +// glottal source (own-core formant synthesis, the exact integer mirror of the +// music additive superpose) -> own-core PCM/WAV. Two paths: +// (1) RENDER: speak(text, voice) -> spoken WAV. +// (2) IMITATE: voice_analyze(pcm) -> a voice signature grabbed BY EAR +// (autocorrelation pitch + integer-DFT formant peaks), then render +// any new meaning in that voice. An impression, not a corpus. +// All integer/fixed-point (EL float arithmetic is unusable). + +// -- Own-core integer sine (Bhaskara I), phase 0..65535 = one cycle ----------- +fn sp_sin(phase: Int) -> Int { + let deg: Int = phase * 360 / 65536 + let neg: Int = 0 + if deg > 180 { + deg = deg - 180 + neg = 1 + } + let t: Int = deg * (180 - deg) + let num: Int = 32767 * 4 * t + let den: Int = 40500 - t + let v: Int = num / den + if neg == 1 { + v = 0 - v + } + return v +} + +fn sp_cos(phase: Int) -> Int { + let p: Int = phase + 16384 + p = p - (p / 65536) * 65536 + return sp_sin(p) +} + +// One formant resonance (Lorentzian peak), Q15. Peak 32767 at f=fc. +fn sp_gain(f: Int, fc: Int, bw: Int) -> Int { + let d: Int = f - fc + let den: Int = d * d + bw * bw + let num: Int = 32767 * bw * bw + return num / den +} + +fn sp_isqrt(n: Int) -> Int { + if n <= 0 { + return 0 + } + let x: Int = n + let y: Int = (x + 1) / 2 + while y < x { + x = y + y = (x + n / x) / 2 + } + return x +} + +// -- WAV serializer (thin medium; the only non-DSP glue) --------------------- +fn wav_le16(buf: String, off: Int, v: Int) -> String { + let u: Int = v + if u < 0 { + u = u + 65536 + } + let lo: Int = u - (u / 256) * 256 + let hi: Int = u / 256 + let b: String = __str_set_char(buf, off, lo) + b = __str_set_char(b, off + 1, hi) + return b +} + +fn wav_le32(buf: String, off: Int, v: Int) -> String { + let b0: Int = v - (v / 256) * 256 + let r1: Int = v / 256 + let b1: Int = r1 - (r1 / 256) * 256 + let r2: Int = r1 / 256 + let b2: Int = r2 - (r2 / 256) * 256 + let b3: Int = r2 / 256 + let b: String = __str_set_char(buf, off, b0) + b = __str_set_char(b, off + 1, b1) + b = __str_set_char(b, off + 2, b2) + b = __str_set_char(b, off + 3, b3) + return b +} + +fn wav_ascii(buf: String, off: Int, s: String) -> String { + let n: Int = str_len(s) + let i: Int = 0 + let b: String = buf + while i < n { + let c: Int = str_char_code(s, i) + b = __str_set_char(b, off + i, c) + i = i + 1 + } + return b +} + +fn write_wav(samples: [Int], sr: Int, path: String) -> Bool { + let ns: Int = native_list_len(samples) + let datalen: Int = ns * 2 + let total: Int = 44 + datalen + let buf: String = __str_alloc(total) + buf = wav_ascii(buf, 0, "RIFF") + buf = wav_le32(buf, 4, 36 + datalen) + buf = wav_ascii(buf, 8, "WAVE") + buf = wav_ascii(buf, 12, "fmt ") + buf = wav_le32(buf, 16, 16) + buf = wav_le16(buf, 20, 1) + buf = wav_le16(buf, 22, 1) + buf = wav_le32(buf, 24, sr) + buf = wav_le32(buf, 28, sr * 2) + buf = wav_le16(buf, 32, 2) + buf = wav_le16(buf, 34, 16) + buf = wav_ascii(buf, 36, "data") + buf = wav_le32(buf, 40, datalen) + let j: Int = 0 + let off: Int = 44 + while j < ns { + let raw: Int = native_list_get(samples, j) + buf = wav_le16(buf, off, raw) + off = off + 2 + j = j + 1 + } + return __fs_write_bytes(path, buf, total) +} + +// One formant resonance as a float Lorentzian peak (own-core physics). +fn fgain(f: Float, fc: Float, bw: Float) -> Float { + let d: Float = f - fc + return (bw * bw) / (d * d + bw * bw) +} + +// His PITCH MELODY from measured prosody [f0_median, f0_min, f0_max, declination]. +// A natural statement shape over the utterance: onset rise to the median, a +// near-flat body (his declination is ~0.6 Hz/s), and a final fall toward f0_min. +// Follows his melody + range, not a fixed 0.85 decline. gidx/total = position. +fn prosody_f0(pros: [Int], gidx: Int, total: Int) -> Int { + let med: Int = native_list_get(pros, 0) + let lo: Int = native_list_get(pros, 1) + let hi: Int = native_list_get(pros, 2) + let p: Int = gidx * 1000 / total + let f0: Int = med + if p < 150 { + f0 = lo + (med - lo) * p / 150 + } else { + if p > 700 { + f0 = med + (lo - med) * (p - 700) / 300 + } else { + f0 = med + } + } + if f0 < lo { + f0 = lo + } + if f0 > hi { + f0 = hi + } + return f0 +} + +// -- The render: phoneme codes + voice signature -> normalized PCM samples ---- +// Formant geometry per phoneme is READ FROM THE ENGRAM (pmap) via phon_geo — no +// table in code. The optional ACCENT map (amap) composes a transform onto the +// voice (voice (+) accent, separable): RP formant overrides read from the accent +// manifold + a non-rhotic coda-R drop. Empty amap = base General-American. +// Synthesis is FLOAT: a real phase accumulator + math_sin, superposition physics. +fn synth_codes_accent(codes0: [String], voice: [String], pmap: [String], amap: [String], vset: [String], vmap: [String], prosody: [Int]) -> [Int] { + let sr: Int = 16000 + let srf: Float = 16000.0 + let two_pi: Float = 6.283185307 + let kf: Int = voice_get_int(voice, "kf") + let f0s: Int = voice_get_int(voice, "f0") + let f0e: Int = voice_get_int(voice, "f0_end") + let durm: Int = voice_get_int(voice, "dur") + if kf <= 0 { + kf = 1000 + } + if durm <= 0 { + durm = 1000 + } + let use_accent: Int = 0 + if native_list_len(amap) > 0 { + use_accent = 1 + } + let codes: [String] = codes0 + if use_accent == 1 { + if is_nonrhotic(amap) == 1 { + codes = apply_rhoticity(codes0, vset) + } + } + let nc: Int = native_list_len(codes) + + // pass 1: per-segment sample counts + total + let segn: [Int] = native_list_empty() + let total: Int = 0 + let ci: Int = 0 + while ci < nc { + let code: String = native_list_get(codes, ci) + let p: [Int] = phon_geo(pmap, code) + let durms: Int = native_list_get(p, 8) + let ns: Int = durms * 16 * durm / 1000 + segn = native_list_append(segn, ns) + total = total + ns + ci = ci + 1 + } + if total <= 0 { + total = 1 + } + + // pass 2: synthesize + let samples: [Int] = native_list_empty() + let phasef: Float = 0.0 + let gidx: Int = 0 + let prevF1: Int = 500 * kf / 1000 + let prevF2: Int = 1500 * kf / 1000 + let prevF3: Int = 2500 * kf / 1000 + let nstate: Int = 22695 + let maxabs: Int = 1 + + let ci2: Int = 0 + while ci2 < nc { + let code: String = native_list_get(codes, ci2) + let p: [Int] = phon_geo(pmap, code) + let rf1: Int = native_list_get(p, 0) + let rf2: Int = native_list_get(p, 1) + let rf3: Int = native_list_get(p, 2) + if use_accent == 1 { + let ov: [Int] = accent_formants(amap, code) + if native_list_len(ov) >= 3 { + rf1 = native_list_get(ov, 0) + rf2 = native_list_get(ov, 1) + rf3 = native_list_get(ov, 2) + } + } + // HIS measured vowel target overrides the generic/kf path (absolute Hz — + // his formants already encode his vocal tract, so no kf scaling). + let usekf: Int = 1 + if native_list_len(vmap) > 0 { + let hv: [Int] = vmap_get(vmap, code) + if native_list_len(hv) >= 3 { + rf1 = native_list_get(hv, 0) + rf2 = native_list_get(hv, 1) + rf3 = native_list_get(hv, 2) + usekf = 0 + } + } + let F1t: Int = rf1 * kf / 1000 + let F2t: Int = rf2 * kf / 1000 + let F3t: Int = rf3 * kf / 1000 + if usekf == 0 { + F1t = rf1 + F2t = rf2 + F3t = rf3 + } + let B1: Int = native_list_get(p, 3) + let B2: Int = native_list_get(p, 4) + let B3: Int = native_list_get(p, 5) + let voiced: Int = native_list_get(p, 6) + let ampv: Int = native_list_get(p, 9) + let ns: Int = native_list_get(segn, ci2) + let trans: Int = ns / 2 + if trans > 560 { + trans = 560 + } + if trans < 1 { + trans = 1 + } + let k: Int = 0 + while k < ns { + let cF1: Int = F1t + let cF2: Int = F2t + let cF3: Int = F3t + if k < trans { + cF1 = prevF1 + (F1t - prevF1) * k / trans + cF2 = prevF2 + (F2t - prevF2) * k / trans + cF3 = prevF3 + (F3t - prevF3) * k / trans + } + let f0c: Int = f0s + (f0e - f0s) * gidx / total + if native_list_len(prosody) >= 3 { + f0c = prosody_f0(prosody, gidx, total) + } + if f0c < 40 { + f0c = 40 + } + let env: Int = 32767 + let ar: Int = 96 + if k < ar { + env = 32767 * k / ar + } + let tail: Int = ns - k + if tail < ar { + env = 32767 * tail / ar + } + let f0cf: Float = int_to_float(f0c) + phasef = phasef + two_pi * f0cf / srf + if phasef > two_pi { + phasef = phasef - two_pi + } + + let s: Int = 0 + if voiced == 1 { + let cF1f: Float = int_to_float(cF1) + let cF2f: Float = int_to_float(cF2) + let cF3f: Float = int_to_float(cF3) + let B1f: Float = int_to_float(B1) + let B2f: Float = int_to_float(B2) + let B3f: Float = int_to_float(B3) + let acc: Float = 0.0 + let h: Int = 1 + while h <= 50 { + let hf: Float = int_to_float(h) + let fhf: Float = hf * f0cf + if fhf < 7900.0 { + let sv: Float = math_sin(phasef * hf) + let src: Float = 1.0 / hf + let g1: Float = fgain(fhf, cF1f, B1f) + let g2: Float = fgain(fhf, cF2f, B2f) + let g3: Float = fgain(fhf, cF3f, B3f) + let g: Float = g1 + g2 + g3 + acc = acc + src * g * sv + } + h = h + 1 + } + s = float_to_int(acc * 4000.0) + } else { + if ampv > 0 { + nstate = nstate * 1103515245 + 12345 + nstate = nstate - (nstate / 2147483648) * 2147483648 + if nstate < 0 { + nstate = 0 - nstate + } + let nz: Int = nstate / 32768 - 32768 + s = nz + } + } + s = s * ampv / 100 + s = s * env / 32767 + samples = native_list_append(samples, s) + let a: Int = s + if a < 0 { + a = 0 - a + } + if a > maxabs { + maxabs = a + } + gidx = gidx + 1 + k = k + 1 + } + prevF1 = F1t + prevF2 = F2t + prevF3 = F3t + ci2 = ci2 + 1 + } + + // normalize to int16 range (~22000 peak) + let out: [Int] = native_list_empty() + let ntot: Int = native_list_len(samples) + let j: Int = 0 + while j < ntot { + let raw: Int = native_list_get(samples, j) + let v: Int = raw * 22000 / maxabs + out = native_list_append(out, v) + j = j + 1 + } + return out +} + +// GA convenience wrapper (no accent) — keeps the base render path. +fn synth_codes(codes: [String], voice: [String], pmap: [String]) -> [Int] { + let noacc: [String] = native_list_empty() + let novset: [String] = native_list_empty() + let novmap: [String] = native_list_empty() + let nopros: [Int] = native_list_empty() + return synth_codes_accent(codes, voice, pmap, noacc, novset, novmap, nopros) +} + +// -- Voice-by-imitation: HEAR a PCM sample -> extract the voice signature ----- +// Pitch by autocorrelation; vocal-tract scale (kf) from the F1 formant peak of a +// heard sustained vowel /AA/ (nominal F1 = 730 Hz) via an integer DFT. The +// analyzer sees ONLY the PCM samples — never the source signature numbers — so +// recovery is genuinely by ear. +fn voice_f0(samples: [Int], sr: Int) -> Int { + let n: Int = native_list_len(samples) + let start: Int = n / 4 + let end: Int = n * 3 / 4 + // bound the analysis window so accumulators can never overflow on long input + if end - start > 6000 { + end = start + 6000 + } + let minlag: Int = sr / 300 + let maxlag: Int = sr / 75 + let best: Int = 0 + let bestlag: Int = minlag + let lag: Int = minlag + while lag <= maxlag { + let sum: Int = 0 + let i: Int = start + while i < end { + let ai: Int = native_list_get(samples, i) + let bi: Int = native_list_get(samples, i + lag) + sum = sum + ai * bi / 256 + i = i + 2 + } + if sum > best { + best = sum + bestlag = lag + } + lag = lag + 1 + } + if bestlag < 1 { + bestlag = 1 + } + return sr / bestlag +} + +fn voice_peak_in_band(samples: [Int], sr: Int, flo: Int, fhi: Int) -> Int { + let n: Int = native_list_len(samples) + let start: Int = n / 4 + let end: Int = n * 3 / 4 + // bound the DFT window: re/im are accumulated /4096, and re*re must stay in + // int64 — cap terms so (window/2)*(peak_term) squared cannot overflow. + if end - start > 3000 { + end = start + 3000 + } + let bestmag: Int = 0 + let bestf: Int = flo + let f: Int = flo + while f <= fhi { + let re: Int = 0 + let im: Int = 0 + let i: Int = start + while i < end { + let x: Int = native_list_get(samples, i) + let ph: Int = i * f * 65536 / sr + ph = ph - (ph / 65536) * 65536 + let cq: Int = sp_cos(ph) + let sq: Int = sp_sin(ph) + re = re + x * cq / 4096 + im = im + x * sq / 4096 + i = i + 2 + } + let mag: Int = re * re + im * im + if mag > bestmag { + bestmag = mag + bestf = f + } + f = f + 25 + } + return bestf +} + +// Analyze a heard sustained /AA/ -> a full voice signature (by ear). +fn voice_analyze(samples: [Int], sr: Int) -> [String] { + let f0: Int = voice_f0(samples, sr) + let f1: Int = voice_peak_in_band(samples, sr, 450, 1150) + let kf: Int = 1000 * f1 / 730 + let f0e: Int = f0 * 85 / 100 + return voice_new("imitated", f0, f0e, kf, 1000, 1000, 8) +} diff --git a/elp/src/voice-ingest.el b/elp/src/voice-ingest.el new file mode 100644 index 0000000..e36647f --- /dev/null +++ b/elp/src/voice-ingest.el @@ -0,0 +1,244 @@ +// voice-ingest.el - The LIVE VOICE LOOP reshape + ingest-as-geometry. +// +// EL cannot read a binary WAV (fs_read NUL-truncates), so the thin-medium DSP +// extractor is periph's `voiceprint` (autocorr F0 + LPC formants), equivalent to +// our own voice_analyze. This module: (1) RESHAPE the voiceprint JSON (TEXT) into +// the organ voice-signature schema; (2) INGEST it as a GEOMETRY manifold in the +// engram and engram_save it to a file; (3) READ the target signature BACK from +// that geometry (engram_load + scan + filter), never from the json or a table. +// HONEST: this reaches for pitch + a coarse vocal-tract scale (kf). It is NOT a +// clone — no glottal timbre, vowel-space, or articulation is captured. + +fn parse_leading_int(s: String) -> Int { + let n: Int = str_len(s) + let i: Int = 0 + let v: Int = 0 + let started: Int = 0 + while i < n { + let c: Int = str_char_code(s, i) + if c >= 48 { + if c <= 57 { + v = v * 10 + (c - 48) + started = 1 + i = i + 1 + } else { + i = n + } + } else { + if started == 1 { + i = n + } else { + i = i + 1 + } + } + } + return v +} + +// voiceprint JSON -> organ voice-signature source file; returns [f0,f0_end,kf,f1,f2,f3]. +fn reshape_voiceprint(vppath: String, outjson: String) -> [Int] { + let j: String = fs_read(vppath) + let f0: Int = parse_uint_from(j, "f0_hz\":") + let fp: Int = str_index_of(j, "formants_hz") + let tail: String = str_slice(j, fp, fp + 120) + let br: Int = str_index_of(tail, "[") + let arr: String = str_slice(tail, br + 1, str_len(tail)) + let f1: Int = parse_leading_int(arr) + let c1: Int = str_index_of(arr, ",") + let a2: String = str_slice(arr, c1 + 1, str_len(arr)) + let f2: Int = parse_leading_int(a2) + let c2: Int = str_index_of(a2, ",") + let a3: String = str_slice(a2, c2 + 1, str_len(a2)) + let f3: Int = parse_leading_int(a3) + let f0e: Int = f0 * 85 / 100 + // derive kf honestly: coarse vocal-tract scale from the formant pattern + let t1: Int = 1000 * f1 / 500 + let t2: Int = 1000 * f2 / 1500 + let t3: Int = 1000 * f3 / 2500 + let kf: Int = (t1 + t2 + t3) / 3 + if kf < 800 { + kf = 800 + } + if kf > 1400 { + kf = 1400 + } + let js: String = "{\"dataset\":\"will-voice-signature\",\"primitive_type\":\"voice\",\"grounding\":\"measured\",\"provenance\":\"Will live 30s read 2026-08-15 (elp/data/live/will30_clean.wav, 27.0s) SUPERSEDES the coarse 10s sample; F0+formants via periph voiceprint (autocorr+LPC), averaged over his full vowel set. Still the 11-number average: no coarticulation/prosody. COARSE — pitch + vocal-tract scale, NOT a clone.\",\"records\":[{\"key\":\"will\",\"features\":{\"source\":\"live-mic\"},\"attributes\":{\"f0\":" + int_to_str(f0) + ",\"f0_end\":" + int_to_str(f0e) + ",\"kf\":" + int_to_str(kf) + ",\"f1\":" + int_to_str(f1) + ",\"f2\":" + int_to_str(f2) + ",\"f3\":" + int_to_str(f3) + "}}]}" + let okw: Bool = fs_write(outjson, js) + let r: [Int] = native_list_empty() + let r = native_list_append(r, f0) + let r = native_list_append(r, f0e) + let r = native_list_append(r, kf) + let r = native_list_append(r, f1) + let r = native_list_append(r, f2) + let r = native_list_append(r, f3) + return r +} + +// Ingest the signature as a manifold (a set-hub + the will node + a member edge) +// and engram_save it to a reloadable file. grounding:measured self-declared. +fn ingest_voice(sig: [Int], savepath: String) -> Int { + let f0: Int = native_list_get(sig, 0) + let f0e: Int = native_list_get(sig, 1) + let kf: Int = native_list_get(sig, 2) + let f1: Int = native_list_get(sig, 3) + let f2: Int = native_list_get(sig, 4) + let f3: Int = native_list_get(sig, 5) + let hub: String = engram_node("voice-signature-set will grounding=measured src=periph-voiceprint", "VoiceSet", 90) + let cont: String = "voice will | f0=" + int_to_str(f0) + " f0_end=" + int_to_str(f0e) + " kf=" + int_to_str(kf) + " f1=" + int_to_str(f1) + " f2=" + int_to_str(f2) + " f3=" + int_to_str(f3) + " grounding=measured src=periph-voiceprint-30s supersedes=prior-voice-region prov=COARSE-pitch+tractscale-NOT-a-clone" + let id: String = engram_node(cont, "Voice", 90) + engram_connect(id, hub, 90, "member_of") + let oks: Bool = engram_save(savepath) + return 1 +} + +// READ the target voice back FROM the ingested geometry (engram_load + scan + +// client-filter for "voice will"). Returns [f0,f0_end,kf,f1,f2,f3] or empty. +fn load_voice(savepath: String) -> [Int] { + let ok: Bool = engram_load(savepath) + let r: [Int] = native_list_empty() + if ok == false { + return r + } + let j: String = engram_scan_nodes_json(200, 0) + let p: Int = str_index_of(j, "voice will ") + if p < 0 { + return r + } + let win: String = str_slice(j, p, p + 200) + let r = native_list_append(r, parse_uint_from(win, "f0=")) + let r = native_list_append(r, parse_uint_from(win, "f0_end=")) + let r = native_list_append(r, parse_uint_from(win, "kf=")) + let r = native_list_append(r, parse_uint_from(win, "f1=")) + let r = native_list_append(r, parse_uint_from(win, "f2=")) + let r = native_list_append(r, parse_uint_from(win, "f3=")) + return r +} + +// ---- Vowel-space + prosody: ingest-as-geometry + read-back (no source layer) -- +// vowel target lookup from the ingested vowel-space manifold: sym -> [f1,f2,f3]. +fn vmap_get(vmap: [String], code: String) -> [Int] { + let out: [Int] = native_list_empty() + let id: String = sp_map_get(vmap, code) + if str_eq(id, "") { + return out + } + let f1: Int = parse_uint_from(id, "f1=") + if f1 <= 0 { + return out + } + let out = native_list_append(out, f1) + let out = native_list_append(out, parse_uint_from(id, "f2=")) + let out = native_list_append(out, parse_uint_from(id, "f3=")) + return out +} + +// Ingest his measured vowel space + prosody as ONE manifold (VowelSpace hub + +// per-vowel target nodes + a prosody node) and engram_save it. Fresh empty store +// per run => set-replace, no duplicate. +fn ingest_voicegeom(vpath: String, ppath: String, savepath: String) -> Int { + let hub: String = engram_node("vowel-space-set will grounding=measured src=lpc-formant-track-30s", "VowelSpace", 90) + let content: String = fs_read(vpath) + let lines: [String] = str_split(content, "\n") + let nl: Int = native_list_len(lines) + let li: Int = 0 + while li < nl { + let line: String = native_list_get(lines, li) + let ok: Int = 1 + if str_len(line) < 5 { + ok = 0 + } + if ok == 1 { + if str_char_code(line, 0) == 35 { + ok = 0 + } + } + if ok == 1 { + let f: [String] = str_split(line, "|") + if native_list_len(f) >= 5 { + let sym: String = native_list_get(f, 0) + let cont: String = "vowel-target will " + sym + " | f1=" + native_list_get(f, 1) + " f2=" + native_list_get(f, 2) + " f3=" + native_list_get(f, 3) + " n=" + native_list_get(f, 4) + " grounding=measured src=lpc-formant-track-30s" + let id: String = engram_node(cont, "VowelTarget", 90) + engram_connect(id, hub, 90, "member_of") + } + } + li = li + 1 + } + let pc: String = fs_read(ppath) + let plines: [String] = str_split(pc, "\n") + let pnl: Int = native_list_len(plines) + let pi: Int = 0 + while pi < pnl { + let pl: String = native_list_get(plines, pi) + let ok2: Int = 1 + if str_len(pl) < 5 { + ok2 = 0 + } + if ok2 == 1 { + if str_char_code(pl, 0) == 35 { + ok2 = 0 + } + } + if ok2 == 1 { + let pf: [String] = str_split(pl, "|") + if native_list_len(pf) >= 4 { + let pcont: String = "prosody will | f0_median=" + native_list_get(pf, 0) + " f0_min=" + native_list_get(pf, 1) + " f0_max=" + native_list_get(pf, 2) + " declination=" + native_list_get(pf, 3) + " src=f0-contour-30s" + let pid: String = engram_node(pcont, "Prosody", 90) + engram_connect(pid, hub, 90, "prosody_of") + } + } + pi = pi + 1 + } + let oks: Bool = engram_save(savepath) + return 1 +} + +// Read the vowel-space back from geometry; prosody folded under key __PROSODY__. +fn load_voicegeom(savepath: String) -> [String] { + let m: [String] = native_list_empty() + let ok: Bool = engram_load(savepath) + if ok == false { + return m + } + let j: String = engram_scan_nodes_json(400, 0) + let jl: Int = str_len(j) + let off: Int = 0 + while off < jl { + let rest: String = str_slice(j, off, jl) + let p: Int = str_index_of(rest, "vowel-target will ") + if p < 0 { + off = jl + } else { + let abs: Int = off + p + let win: String = str_slice(j, abs, abs + 140) + let after: String = str_slice(win, 18, str_len(win)) + let sp: Int = str_index_of(after, " ") + if sp > 0 { + let sym: String = str_slice(after, 0, sp) + m = native_list_append(m, sym) + m = native_list_append(m, win) + } + off = abs + 18 + } + } + let pp: Int = str_index_of(j, "prosody will ") + if pp >= 0 { + let pwin: String = str_slice(j, pp, pp + 160) + m = native_list_append(m, "__PROSODY__") + m = native_list_append(m, pwin) + } + return m +} + +// Prosody stats [f0_median, f0_min, f0_max, declination] read from geometry. +fn prosody_from(vmap: [String]) -> [Int] { + let out: [Int] = native_list_empty() + let id: String = sp_map_get(vmap, "__PROSODY__") + if str_eq(id, "") { + return out + } + let out = native_list_append(out, parse_uint_from(id, "f0_median=")) + let out = native_list_append(out, parse_uint_from(id, "f0_min=")) + let out = native_list_append(out, parse_uint_from(id, "f0_max=")) + let out = native_list_append(out, parse_uint_from(id, "declination=")) + return out +} diff --git a/elp/src/voice-profile.el b/elp/src/voice-profile.el new file mode 100644 index 0000000..854f173 --- /dev/null +++ b/elp/src/voice-profile.el @@ -0,0 +1,85 @@ +// voice-profile.el - The VOICE signature as a pluggable PROFILE. +// +// Exact mirror of surface-profile.el / language-profile.el: a voice is a +// [String] slot-map read via voice_get, the SAME mechanism the realizer uses +// for language and surface. Where an instrument signature (a few dozen numbers) +// is the timbre of a musical tone, a VOICE signature is the timbre of the vocal +// tract — the instrument that renders LANGUAGE-meaning as SPEECH on the audio +// surface. Physics (source-filter), not a recorded corpus. +// +// The signature is a few numbers, all integer (EL float arithmetic is unusable): +// name - label +// f0 - base pitch, Hz (glottal source rate at utterance start) +// f0_end - pitch at utterance end (declination -> falling = declarative) +// kf - formant scale in PER-MILLE (1000 = x1.0). Encodes vocal-tract +// length: shorter tract (child/female) -> higher kf. Scales every +// phoneme's nominal formant: F_actual = F_nominal * kf / 1000. +// dur - speaking-rate multiplier in per-mille (1000 = nominal; >1000 slower) +// tilt - source spectral tilt (per-mille; higher = darker/steeper rolloff) +// breath - breathiness 0..100 (aspiration mixed into the source) +// +// A voice is grabbed BY EAR (voice_analyze in speech.el extracts these numbers +// from a short PCM sample — an impression, not 10h of training), or declared. + +fn voice_new(name: String, f0: Int, f0_end: Int, kf: Int, dur: Int, tilt: Int, breath: Int) -> [String] { + let r: [String] = native_list_empty() + let r = native_list_append(r, "name") + let r = native_list_append(r, name) + let r = native_list_append(r, "f0") + let r = native_list_append(r, int_to_str(f0)) + let r = native_list_append(r, "f0_end") + let r = native_list_append(r, int_to_str(f0_end)) + let r = native_list_append(r, "kf") + let r = native_list_append(r, int_to_str(kf)) + let r = native_list_append(r, "dur") + let r = native_list_append(r, int_to_str(dur)) + let r = native_list_append(r, "tilt") + let r = native_list_append(r, int_to_str(tilt)) + let r = native_list_append(r, "breath") + let r = native_list_append(r, int_to_str(breath)) + return r +} + +// Accessor — identical convention to surface_get / lang_get. +fn voice_get(profile: [String], key: String) -> String { + let n: Int = native_list_len(profile) + let i: Int = 0 + while i < n - 1 { + let k: String = native_list_get(profile, i) + if str_eq(k, key) { + return native_list_get(profile, i + 1) + } + let i = i + 2 + } + return "" +} + +fn voice_get_int(profile: [String], key: String) -> Int { + let s: String = voice_get(profile, key) + if str_eq(s, "") { + return 0 + } + return str_to_int(s) +} + +// -- Built-in voices --------------------------------------------------------- + +// Neuron's own voice: calm, precise, androgynous-neutral. Low-ish base pitch, +// gentle declination, near-neutral vocal-tract length. +fn voice_neuron() -> [String] { + return voice_new("neuron", 112, 96, 1020, 1000, 1000, 6) +} + +// Will's voice signature, built from the INGESTED geometry (f0/f0_end/kf read +// back from the will-voice manifold — passed in, never hardcoded). Composable +// with an accent transform exactly like voice_neuron() (voice (+) accent). +fn voice_will(f0: Int, f0_end: Int, kf: Int) -> [String] { + return voice_new("will", f0, f0_end, kf, 1000, 1000, 6) +} + +// A deliberately DISTINCT target voice for the imitation proof: higher pitch, +// shorter vocal tract (kf=1.20) -> a clearly different speaker. Neuron will +// HEAR a sample of this voice and reconstruct these numbers by ear. +fn voice_target_a() -> [String] { + return voice_new("target_a", 178, 150, 1200, 950, 1000, 10) +} diff --git a/elp/tests/examples/speech-accent-demo.el b/elp/tests/examples/speech-accent-demo.el new file mode 100644 index 0000000..17b69bd --- /dev/null +++ b/elp/tests/examples/speech-accent-demo.el @@ -0,0 +1,45 @@ +// speech-accent-demo.el - PROOF: Neuron speaks with a BRITISH accent, where the +// accent is a TRANSFORM composed onto the voice (voice (+) accent, separable), +// INGESTED as geometry (not a table). Same voice, accent toggled on/off = RP/GA. + +fn main() { + let outdir: String = "/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-acc02900ef4ade35e/elp/tests/examples/out/" + + // LEARN: base phonetics + lexicon + the British-RP accent transform, all as + // ingested geometry (source -> manifold -> engram). + let pmap: [String] = ingest_phonetics("elp/data/phonetics.psv") + let lmap: [String] = ingest_lexicon("elp/data/lexicon.psv") + let amap: [String] = ingest_accent("elp/data/british-accent.psv") + println("[learn] phonemes=" + int_to_str(native_list_len(pmap) / 2) + " words=" + int_to_str(native_list_len(lmap) / 2) + " accent_targets=" + int_to_str(native_list_len(amap) / 2)) + + let neuron: [String] = voice_neuron() + let noaccent: [String] = native_list_empty() + + // -- Sentence 1: "I am Neuron." from meaning ---------------------------- + let fr1: [String] = sem_frame("describe", "I", "Neuron", "") + let t1: String = sem_realize(fr1) + let c1: [String] = text_phonemes(lmap, t1) + println("[s1] " + t1 + " :: " + list_join(c1, " ")) + + // separability: SAME voice, accent OFF (GA) vs ON (RP) + let ga: [Int] = synth_codes_accent(c1, neuron, pmap, noaccent) + let okga: Bool = write_wav(ga, 16000, outdir + "ga-neuron.wav") + let br1: [Int] = synth_codes_accent(c1, neuron, pmap, amap) + let okb1: Bool = write_wav(br1, 16000, outdir + "british-neuron.wav") + + // -- Sentence 2: showcases NON-RHOTICITY -------------------------------- + let fr2: [String] = sem_frame("describe", "I", "here", "") + let t2: String = sem_realize(fr2) + let c2: [String] = text_phonemes(lmap, t2) + let c2rp: [String] = apply_rhoticity(c2, pmap) + println("[s2] " + t2 + " :: GA=" + list_join(c2, " ") + " RP=" + list_join(c2rp, " ")) + let br2: [Int] = synth_codes_accent(c2, neuron, pmap, amap) + let okb2: Bool = write_wav(br2, 16000, outdir + "british-2.wav") + + // show an RP override read straight from the accent geometry + let ovAA: [Int] = accent_formants(amap, "AA") + if native_list_len(ovAA) >= 3 { + println("[accent-geometry] AA(LOT) RP f1=" + int_to_str(native_list_get(ovAA, 0)) + " f2=" + int_to_str(native_list_get(ovAA, 1)) + " (base GA 730/1090) [PROVISIONAL]") + } + println("[done] ga-neuron=" + bool_to_str(okga) + " british-neuron=" + bool_to_str(okb1) + " british-2=" + bool_to_str(okb2)) +} diff --git a/elp/tests/examples/speech-demo.el b/elp/tests/examples/speech-demo.el new file mode 100644 index 0000000..3336dc5 --- /dev/null +++ b/elp/tests/examples/speech-demo.el @@ -0,0 +1,69 @@ +// speech-demo.el - PROOF: Neuron speaks from MEANING, rendered through INGESTED +// phonetic geometry, own-core, plus voice-by-IMITATION. Built by concatenating +// the elp realizer + voice-profile + speech-ingest + speech, then this main. +// +// LEARN : ingest acoustic-phonetics + lexicon SOURCES -> phoneme manifold in +// the engram (source -> manifold -> merge). +// MEANING : sem_frame("describe","I","Neuron","") -> sem_realize -> "I am Neuron." +// PHONES : words -> phoneme codes, READ from the ingested lexicon geometry. +// RENDER : superpose formant resonances (read from engram) over a glottal +// source -> own-core PCM/WAV, in Neuron's own voice. +// IMITATE : HEAR a short sample of a different voice -> extract its signature +// by ear (autocorrelation pitch + integer-DFT formant) -> render new +// speech in that voice. An impression, not a corpus. + +fn speak_report(tag: String, codes: [String], voice: [String], pmap: [String], path: String) -> [Int] { + let s: [Int] = synth_codes(codes, voice, pmap) + let ok: Bool = write_wav(s, 16000, path) + println(tag + " samples=" + int_to_str(native_list_len(s)) + " ok=" + bool_to_str(ok) + " -> " + path) + return s +} + +fn main() { + let outdir: String = "/private/tmp/claude-501/-Users-will/6531446d-bc27-4095-930b-e04777c3db4f/scratchpad/" + + // -- LEARN: ingest the speech primitives as geometry -------------------- + let pmap: [String] = ingest_phonetics("elp/data/phonetics.psv") + let lmap: [String] = ingest_lexicon("elp/data/lexicon.psv") + let saved: Bool = engram_save(outdir + "phoneme-manifold.json") + println("[learn] phonemes=" + int_to_str(native_list_len(pmap) / 2) + " words=" + int_to_str(native_list_len(lmap) / 2) + " manifold_saved=" + bool_to_str(saved)) + + // sanity: show that AA's formants came from ingested geometry, not code + let aa: [Int] = phon_geo(pmap, "AA") + let aaF1: Int = native_list_get(aa, 0) + let aaF2: Int = native_list_get(aa, 1) + println("[read-geometry] AA F1=" + int_to_str(aaF1) + " F2=" + int_to_str(aaF2) + " (parsed from engram node)") + + // -- MEANING -> WORDS via the realizer's language faculty ---------------- + let frame: [String] = sem_frame("describe", "I", "Neuron", "") + let text: String = sem_realize(frame) + println("[meaning->text] " + text) + + // -- WORDS -> PHONEMES (read from ingested lexicon geometry) -------------- + let codes: [String] = text_phonemes(lmap, text) + println("[phonemes] " + list_join(codes, " ")) + + // -- RENDER in Neuron's own voice ---------------------------------------- + let neuron: [String] = voice_neuron() + let s1: [Int] = speak_report("[speak neuron]", codes, neuron, pmap, outdir + "neuron.wav") + + // -- IMITATION: hear a distinct voice, recover its signature, re-render --- + let vA: [String] = voice_target_a() + let hcodes: [String] = native_list_empty() + hcodes = native_list_append(hcodes, "SIL") + let z: Int = 0 + while z < 6 { + hcodes = native_list_append(hcodes, "AA") + z = z + 1 + } + hcodes = native_list_append(hcodes, "SIL") + let heard: [Int] = synth_codes(hcodes, vA, pmap) + let okh: Bool = write_wav(heard, 16000, outdir + "heard.wav") + + let vB: [String] = voice_analyze(heard, 16000) + println("[imitate] heard ACTUAL f0=" + voice_get(vA, "f0") + " kf=" + voice_get(vA, "kf")) + println("[imitate] heard RECOVERED f0=" + voice_get(vB, "f0") + " kf=" + voice_get(vB, "kf") + " (extracted by ear from PCM)") + let s2: [Int] = speak_report("[speak imitation]", codes, vB, pmap, outdir + "imitation.wav") + + println("[done] rendered from meaning + ingested geometry; imitation from a heard sample.") +} diff --git a/elp/tests/examples/speech-organ-demo.el b/elp/tests/examples/speech-organ-demo.el new file mode 100644 index 0000000..ec8db5c --- /dev/null +++ b/elp/tests/examples/speech-organ-demo.el @@ -0,0 +1,48 @@ +// speech-organ-demo.el - PROOF: the render now reads its phoneme + accent +// GEOMETRY from the ingest ORGAN's saved engram files (engram_load + +// engram_scan_nodes_json + cache), not a same-run hand-load. The British accent +// is still a composed transform-geometry (voice (+) accent, separable). Numbers +// come from the organ manifold; the .psv supplies only categorical vowel-class. + +fn main() { + let outdir: String = "/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-acc02900ef4ade35e/elp/tests/examples/out/" + + // engram-independent caches from source (survive engram_load replacement) + let vset: [String] = organ_vset("elp/data/phonetics.psv") + let lmap: [String] = organ_lex("elp/data/lexicon.psv") + // ORGAN read: phonetics FIRST (cache), THEN accent (engram_load replaces store) + let pmap: [String] = organ_pmap("elp/data/phonetics-formants.engram.json") + let amap: [String] = organ_amap("elp/data/british-accent.engram.json") + println("[organ] phon_syms=" + int_to_str(native_list_len(pmap) / 2) + " accent_syms=" + int_to_str(native_list_len(amap) / 2) + " vowels=" + int_to_str(native_list_len(vset)) + " words=" + int_to_str(native_list_len(lmap) / 2)) + + // prove the numbers came from the organ node content + let g: [Int] = phon_geo(pmap, "AA") + println("[organ-read] phoneme AA f1=" + int_to_str(native_list_get(g, 0)) + " f2=" + int_to_str(native_list_get(g, 1)) + " f3=" + int_to_str(native_list_get(g, 2)) + " (P&B1952 MEASURED)") + let ov: [Int] = accent_formants(amap, "AA") + if native_list_len(ov) >= 3 { + println("[organ-read] accent AA(LOT) f1=" + int_to_str(native_list_get(ov, 0)) + " f2=" + int_to_str(native_list_get(ov, 1)) + " (DERIVED RP, PROVISIONAL)") + } + println("[organ-read] non_rhotic=" + int_to_str(is_nonrhotic(amap))) + + let neuron: [String] = voice_neuron() + let noacc: [String] = native_list_empty() + + // Sentence 1: "I am Neuron." from meaning; GA vs RP = separable toggle + let t1: String = sem_realize(sem_frame("describe", "I", "Neuron", "")) + let c1: [String] = text_phonemes(lmap, t1) + println("[s1] " + t1 + " :: " + list_join(c1, " ")) + let ga: [Int] = synth_codes_accent(c1, neuron, pmap, noacc, vset) + let okga: Bool = write_wav(ga, 16000, outdir + "ga-neuron-organ.wav") + let br1: [Int] = synth_codes_accent(c1, neuron, pmap, amap, vset) + let okb1: Bool = write_wav(br1, 16000, outdir + "british-neuron-organ.wav") + + // Sentence 2: non-rhoticity showcase + let t2: String = sem_realize(sem_frame("describe", "I", "here", "")) + let c2: [String] = text_phonemes(lmap, t2) + let c2rp: [String] = apply_rhoticity(c2, vset) + println("[s2] " + t2 + " :: GA=" + list_join(c2, " ") + " RP=" + list_join(c2rp, " ")) + let br2: [Int] = synth_codes_accent(c2, neuron, pmap, amap, vset) + let okb2: Bool = write_wav(br2, 16000, outdir + "british-2-organ.wav") + + println("[done] ga-organ=" + bool_to_str(okga) + " british-organ=" + bool_to_str(okb1) + " british-2-organ=" + bool_to_str(okb2)) +} diff --git a/elp/tests/examples/speech-voice-demo.el b/elp/tests/examples/speech-voice-demo.el new file mode 100644 index 0000000..2ade2ec --- /dev/null +++ b/elp/tests/examples/speech-voice-demo.el @@ -0,0 +1,31 @@ +// speech-voice-demo.el - LIVE VOICE LOOP (stand-in test). Capture -> voiceprint +// -> reshape -> INGEST AS GEOMETRY -> read the target back FROM geometry -> the +// EL projector renders a line reaching for that voice. Stand-in "Will" = the +// voiceprint of imitation.wav. HONEST: pitch + coarse vocal-tract scale, NOT a clone. + +fn main() { + let outdir: String = "/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-acc02900ef4ade35e/elp/tests/examples/out/" + let vp: String = "/private/tmp/claude-501/-Users-will/6531446d-bc27-4095-930b-e04777c3db4f/scratchpad/will-voiceprint.json" + + // 1+2: reshape voiceprint JSON -> organ voice-signature source + let sig0: [String] = native_list_empty() + let sig: [Int] = reshape_voiceprint(vp, "elp/data/will-voice.json") + // 3: ingest as geometry + engram_save a reloadable manifold file + let ig: Int = ingest_voice(sig, "elp/data/will-voice.engram.json") + // 4: READ the target back FROM geometry (engram_load + scan + filter) + let g: [Int] = load_voice("elp/data/will-voice.engram.json") + println("[voice-geometry] read from manifold: f0=" + int_to_str(native_list_get(g, 0)) + " f0_end=" + int_to_str(native_list_get(g, 1)) + " kf=" + int_to_str(native_list_get(g, 2)) + " f1=" + int_to_str(native_list_get(g, 3)) + " f2=" + int_to_str(native_list_get(g, 4)) + " f3=" + int_to_str(native_list_get(g, 5)) + " (measured, COARSE — not a clone)") + + // phoneme geometry from the organ (loaded AFTER the voice sig is cached in EL) + let pmap: [String] = organ_pmap("elp/data/phonetics-formants.engram.json") + let lmap: [String] = organ_lex("elp/data/lexicon.psv") + + // 5: render a line FROM MEANING in Will's voice + let vw: [String] = voice_will(native_list_get(g, 0), native_list_get(g, 1), native_list_get(g, 2)) + let t: String = sem_realize(sem_frame("greet", "Will", "", "")) + let codes: [String] = text_phonemes(lmap, t) + println("[render] \"" + t + "\" :: " + list_join(codes, " ") + " in voice=will f0=" + int_to_str(voice_get_int(vw, "f0")) + " kf=" + int_to_str(voice_get_int(vw, "kf"))) + let samples: [Int] = synth_codes(codes, vw, pmap) + let ok: Bool = write_wav(samples, 16000, outdir + "will-reply.wav") + println("[done] will-reply.wav=" + bool_to_str(ok)) +} diff --git a/elp/tests/examples/speech-voice-demo2.el b/elp/tests/examples/speech-voice-demo2.el new file mode 100644 index 0000000..f339a7b --- /dev/null +++ b/elp/tests/examples/speech-voice-demo2.el @@ -0,0 +1,48 @@ +// speech-voice-demo2.el - LIVE VOICE LOOP on Will's richer 30s read, with a +// GEOMETRIC SET-REPLACE of the voice_will manifold (supersede the coarse 10s +// region, insert the 30s region — no duplicate node, no per-node CRUD; Will's +// standing rule f999c5ff). HONEST: 30s steadies the 11-number average over more +// of his vowels, but it is still one formant triple with no coarticulation or +// prosody — closer but still synthetic, not a clone. + +fn main() { + let outdir: String = "/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-acc02900ef4ade35e/elp/tests/examples/out/" + let vp: String = "/private/tmp/claude-501/-Users-will/6531446d-bc27-4095-930b-e04777c3db4f/scratchpad/will30-voiceprint.json" + let manifest: String = "elp/data/will-voice.engram.json" + + // --- SET-REPLACE step 1: read the PRIOR region (text read of the manifold + // file — no engram_load, so the store stays clean) and report what is + // being superseded. --- + let prior: String = fs_read(manifest) + let pp: Int = str_index_of(prior, "voice will ") + if pp >= 0 { + let pw: String = str_slice(prior, pp, pp + 200) + println("[set-replace] superseding PRIOR voice region: f0=" + int_to_str(parse_uint_from(pw, "f0=")) + " kf=" + int_to_str(parse_uint_from(pw, "kf=")) + " f1=" + int_to_str(parse_uint_from(pw, "f1="))) + } + + // --- step 2: reshape the 30s voiceprint -> organ voice-signature source --- + let sig: [Int] = reshape_voiceprint(vp, "elp/data/will-voice.json") + + // --- step 3: INSERT the fresh 30s region into an EMPTY engram and save -> + // wholesale replaces the manifold file (old region dropped, not edited, + // not duplicated). This is the geometric set-replace. --- + let ig: Int = ingest_voice(sig, manifest) + + // --- step 4: READ the new target BACK from geometry --- + let g: [Int] = load_voice(manifest) + println("[voice-geometry] new region read from manifold: f0=" + int_to_str(native_list_get(g, 0)) + " f0_end=" + int_to_str(native_list_get(g, 1)) + " kf=" + int_to_str(native_list_get(g, 2)) + " f1=" + int_to_str(native_list_get(g, 3)) + " f2=" + int_to_str(native_list_get(g, 4)) + " f3=" + int_to_str(native_list_get(g, 5)) + " (measured 30s, COARSE — not a clone)") + + // phoneme + lexicon geometry from the organ (loaded after the voice sig is + // cached in EL, since engram_load replaces the store) + let pmap: [String] = organ_pmap("elp/data/phonetics-formants.engram.json") + let lmap: [String] = organ_lex("elp/data/lexicon.psv") + + // --- step 5: render a fresh reply FROM MEANING in the 30s Will voice --- + let vw: [String] = voice_will(native_list_get(g, 0), native_list_get(g, 1), native_list_get(g, 2)) + let t: String = sem_realize(sem_frame("greet", "Will", "", "")) + let codes: [String] = text_phonemes(lmap, t) + println("[render] \"" + t + "\" :: " + list_join(codes, " ") + " in voice=will f0=" + int_to_str(voice_get_int(vw, "f0")) + " kf=" + int_to_str(voice_get_int(vw, "kf"))) + let samples: [Int] = synth_codes(codes, vw, pmap) + let ok: Bool = write_wav(samples, 16000, outdir + "will-reply2.wav") + println("[done] will-reply2.wav=" + bool_to_str(ok)) +} diff --git a/elp/tests/examples/speech-voicegeom-demo.el b/elp/tests/examples/speech-voicegeom-demo.el new file mode 100644 index 0000000..afde5a6 --- /dev/null +++ b/elp/tests/examples/speech-voicegeom-demo.el @@ -0,0 +1,37 @@ +// speech-voicegeom-demo.el - THE JUMP: render Will's VOWEL SPACE + PROSODY +// (measured over 30s), not the single 11-number average. His vowels land at HIS +// targets; pitch follows HIS melody. All read back FROM the ingested geometry. +// INTERIM: the geometry was Python-measured (measure_voice.py, numpy LPC/F0) — +// to be superseded by the engram-measures-audio path. No source layer. + +fn main() { + let outdir: String = "/Users/will/Development/neuron-technologies/foundation/el/.claude/worktrees/agent-acc02900ef4ade35e/elp/tests/examples/out/" + + // 1: ingest vowel space + prosody as geometry (empty store -> save; set-replace) + let ig: Int = ingest_voicegeom("elp/data/will-vowelspace.psv", "elp/data/will-prosody.psv", "elp/data/will-voicegeom.engram.json") + // kf (vocal-tract scale for consonants) from the earlier will-voice manifold + let sigv: [Int] = load_voice("elp/data/will-voice.engram.json") + let kf: Int = native_list_get(sigv, 2) + // 2: read vowel space + prosody back FROM geometry + let vmap: [String] = load_voicegeom("elp/data/will-voicegeom.engram.json") + let pros: [Int] = prosody_from(vmap) + println("[geometry] vowels=" + int_to_str((native_list_len(vmap) - 2) / 2) + " prosody f0_median=" + int_to_str(native_list_get(pros, 0)) + " f0_min=" + int_to_str(native_list_get(pros, 1)) + " f0_max=" + int_to_str(native_list_get(pros, 2)) + " kf=" + int_to_str(kf)) + let ehv: [Int] = vmap_get(vmap, "EH") + let ihv: [Int] = vmap_get(vmap, "IH") + println("[his-vowels] EH=" + int_to_str(native_list_get(ehv, 0)) + "/" + int_to_str(native_list_get(ehv, 1)) + " IH=" + int_to_str(native_list_get(ihv, 0)) + "/" + int_to_str(native_list_get(ihv, 1))) + + // phoneme geometry from the organ (loaded AFTER caches are in EL) + let pmap: [String] = organ_pmap("elp/data/phonetics-formants.engram.json") + let lmap: [String] = organ_lex("elp/data/lexicon.psv") + + // 3+4: render FROM MEANING in his-vowels + his-prosody voice + let vw: [String] = voice_will(native_list_get(pros, 0), native_list_get(pros, 1), kf) + let noacc: [String] = native_list_empty() + let novset: [String] = native_list_empty() + let t: String = sem_realize(sem_frame("greet", "Will", "", "")) + let codes: [String] = text_phonemes(lmap, t) + println("[render] \"" + t + "\" :: " + list_join(codes, " ")) + let samples: [Int] = synth_codes_accent(codes, vw, pmap, noacc, novset, vmap, pros) + let ok: Bool = write_wav(samples, 16000, outdir + "will-reply3.wav") + println("[done] will-reply3.wav=" + bool_to_str(ok)) +}