b7e2c580a8
El SDK CI - dev / build-and-test (pull_request) Successful in 6m28s
speech.el: formant/glottal integer DSP synthesis + voice-analyze-by-
imitation. voice-profile.el / voice-ingest.el: voice-profile plumbing.
accent.el: British-RP as an ingested transform-geometry (explicitly marked
provisional/citation-pending by its own comments). organ-read.el:
engram read-through for the speech organ. Includes demo/test drivers and
non-personal reference data (British-RP phonetics/lexicon derived data,
a public-domain LibriVox RP reference recording).
Deliberately excludes elp/data/live/ (raw recorded voice + face-photo
samples of the repo owner) and the will-*.{json,psv} derived voiceprint
files — personal biometric data that shouldn't be committed to a shared
repo without an explicit decision from the owner. Also excludes this
worktree's elp/src/surface-profile.el, which diverges from the copy in
other worktrees (agent-aaf04b0a9714c4070, main) — needs manual
reconciliation before landing, left out here to avoid silently picking a
version.
70 lines
3.6 KiB
EmacsLisp
70 lines
3.6 KiB
EmacsLisp
// 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.")
|
|
}
|