TGSpeechBox v3.0-beta7
Changes since v3.0-beta6. 72 commits.
New Features
- Pronunciation dictionary system: Full dictionary editor on all platforms — iOS, Android, and Windows (phoneme editor). Add, edit, delete, search, import/export text-to-text respellings. Four dictionary types: pronunciation, stress, compound, and character. Case-sensitive lookup with lowercase fallback. Cross-language browsing without switching the synthesis engine. Per-language dictionary type enable/disable. TalkBack and VoiceOver fully accessible. On the desktop phoneme editor, "Convert to IPA" buttons call eSpeak to populate IPA fields — a feature mobile can't match.
- Character dictionaries: New dictionary type for letter-name overrides during character navigation. Spanish letter-name dictionary included (issue #49).
- SAPI settings UI: Full settings panel for the Windows SAPI engine — sample rate, voicing tone (14 sliders), voice quality (creakiness, breathiness, jitter, shimmer, sharpness), pitch mode selector, inflection scale, and pause mode (Off/Short/Long). Settings persist in
%APPDATA%\TGSpeechSapi\settings.ini. Installer now offers to launch settings after install. - Win32 phoneme editor: dictionary editor: New Editor menu (File | Editor | Settings | Help) with full dictionary editor. Language and type selection, listview with search, add/edit/delete, import/export TSV. IPA fields are editable — "Convert to IPA" pre-fills from eSpeak, but users can hand-edit for exact control. Handles 110K-entry stress dictionaries. Also moved voice profile, allophone rule, and special coarticulation editors into the Editor menu.
- Phoneme overrides import/export: Share your phoneme tuning as files from the mobile editor. Merged YAML export preserves comments from the base pack.
- Pack import: Import shared pack YAML files — extracts settings as per-key overrides without replacing the base pack.
- Allophone rule conditions: New
beforeSamePhonemeandafterSamePhonemeconditions for allophone rules, enabling geminate-aware rules. - Unicode text normalization: NFKC normalization and zero-width character stripping applied to all input text before processing.
Join Test Flight and Google Play for Mac OS, iOS, and Android!
Join TestFlight here by clicking this link from your mobile device.
Join the Android beta test here from the web
Join the Android test from your phone directly
Bug Fixes
- Phoneme overrides not reaching synthesis (iOS + Android): User-edited phoneme values from the mobile phoneme editor were saved correctly but never applied by the iOS Audio Unit extension or Android TTS service. Only the in-app preview heard changes — VoiceOver and TalkBack used factory defaults. Fixed on both platforms.
- iOS dictionary "Export all" broken: Two
.fileExporterSwiftUI modifiers on the same view caused a conflict — export silently failed. Consolidated into a single modifier. - Soft-knee peak limiter (issue #50): Replaced hard-knee limiter with soft-knee design (quadratic blend around threshold). Fixed Android distortion at high gain. Android output gain reduced from 3.0x to 1.6x.
- Voiced alveolar word-final /d/ inaudible: "created" sounded like "creadeh" —
voiced_alveolar_word_final_softenrule was cutting too hard. Raised frication and burst scaling. - Tap sounding like stop: Tap /ɾ/ lacked boundary smoothing, causing stop-like transient. Added tap-specific smoothing path.
- Ellipsis clause boundary: Unicode ellipsis (U+2026) now handled as clause boundary on all 6 platforms.
- Locale-sensitive number parsing (Hungarian, Polish): Process locale set by NVDA UI language caused
atof/stodto parse decimal points as zeros. All pack float values now use locale-safe parsing. - Hungarian geminate stop burst: Suppressed duplicate burst on extended stop closures in hu.yaml.
- Spanish velar approximant: Fixed /u/-like percept and word-final tap nasality in es.yaml.
- Dictionary autocorrect (issue #55): Disabled autocorrect and auto-capitalization on all dictionary editor text fields on iOS and Android. No more "xianxia" being corrected to "Shanghai".
Architecture
- Frame emission unified: Merged ~900 lines of duplicated acoustic math (stop bursts, trill modulation, tap notches, diphthong staircasing) from
emitFramesandemitFramesExinto a singlegenerateAcousticEvents<Emitter>template. Both public functions are now thin wrappers. Eliminates the ghost-bug risk of updating one path but not the other. - Frontend refactored:
ipa_engine.cppsplit intoipa_engine.cpp+ipa_normalize.cpp+ipa_parser.cpp.text_parser.cppsplit intotext_parser.cpp+text_prepare.cpp+dict_lookup.cpp. Data query API extracted tofrontend_data_api.cpp. YAML serialization deduplicated — phoneme editor reusesyaml_export.cpp. - Orphaned iOS packs removed: iOS
project.ymlalready referenced canonicalpacks/via relative path. Stale local copy (122K lines including stress dict) deleted.
Platform Notes
- Android: Dictionary editor with search, export/share, TalkBack actions. Alpha track builds beta24–beta26.
- iOS: Dictionary editor matching Android feature set. Phoneme override fix for AU extension. Export fix. More Options button accessibility unified with phoneme editor.
- SAPI: Full settings UI. Installer post-install settings launch.
- NVDA: Unchanged from beta6 — benefits from engine-level fixes (locale parsing, frame emission).
- Linux: Makefile updated for new source file splits.
- Win32 Phoneme Editor: Dictionary editor with IPA conversion. Menu restructured.