TGSpeechBox v3.10 Beta 1.1 — targeted /l/ fix for Spanish ear testing
This is a FOCUSED beta between b1 and b2. The only substantive change vs
b1 is a targeted fix for the "entregado sounds like entrelado" perceptual
collapse that multiple community members have reported in Spanish (issues
#84 and #95).
The fix
Spanish /l/ (phoneme l_es) now carries a lateral side-branch anti-resonance
at 1700 Hz, activated via the cascade anti-resonator path. This gives /l/
its characteristic dark quality that distinguishes it from /ɣ/ (the voiced
velar approximant in "entregado"), which was previously rendered as
spectrally too similar in word-medial position.
Acoustic evidence via LPC root-finding on synthesized audio:
/l/ in /entɾelaðo/ BEFORE: F1=410 (BW 254) F2=1794 (BW 137) F3=2734
/l/ in /entɾelaðo/ AFTER: F1=416 (BW 228) F2=1803 (BW 99) F3=2727 F4=3499
Key improvements:
- F1 preserved
- F2 bandwidth sharpened from 137 → 99 Hz (more distinctively lateral)
- New spectral null at 1700 Hz between F2 and F3 (the side-cavity zero)
- F4 emerges cleanly
/ɣ/ is untouched. The acoustic distinction is now a spectral shape
difference, not just a center-frequency difference.
DSP v9 infrastructure
Bumps the DSP version from 8 to 9. Adds a new FrameEx field caN0 for
future use cases that need the cascade anti-resonator decoupled from the
nasal-pole path. The /l/ fix itself uses the existing caNP path with a
heavily-damped rNP so nasal pole coloring stays inaudible — but caN0 is
there as the architectural abstraction for future phonemes that need
pole-free anti-resonance.
Please ear-test
Native Spanish speakers, especially @gregodejesus2, @rmcpantoja, @yaresDg,
and @dgomez42 — please test on Windows (NVDA or SAPI) or Android (APK).
Test words:
- entregado / entrelado (the direct pair)
- hola, lunes, alga, olvido, final (/l/ in various positions)
- alma, almacén (/l/ before nasals)
Listen for:
- Is /l/ now audibly different from /ɣ/ in "entregado"?
- Does /l/ sound like natural Spanish /l/?
- Any unexpected "boominess" or nasal coloring on /l/?
- Any regressions in non-/l/ contexts?
What's NOT in this beta
This is a hotfix for the /l/ issue specifically. Other v3.10 roadmap items
(Android Engine-tab language selector #97, currency dictionary #83,
emoji name translations #96, echo at slow rates #98) are NOT in this beta.
A proper Beta 2 with those will follow once the /l/ fix is ear-verified.
Testing
- 43 C++ unit tests (doctest) + 18 Python tests (pytest) all pass
- LPC root-finding on synthesized audio confirms acoustic spectrum change
- No regressions against existing test corpus
If something sounds wrong
Post on #95 with the word(s) affected and any comparison to b1 or to
another synthesizer (eSpeak, Eloquence). We'll tune and re-release.