github tgeczy/TGSpeechBox v-300b7
TG SpeechBox with phoneme editor, NVDA Addon, SAPI5, Linux, Android, iOS, Mac OS, version 3.0 public beta 7

pre-release8 hours ago

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 beforeSamePhoneme and afterSamePhoneme conditions 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 .fileExporter SwiftUI 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_soften rule 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/stod to 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 emitFrames and emitFramesEx into a single generateAcousticEvents<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.cpp split into ipa_engine.cpp + ipa_normalize.cpp + ipa_parser.cpp. text_parser.cpp split into text_parser.cpp + text_prepare.cpp + dict_lookup.cpp. Data query API extracted to frontend_data_api.cpp. YAML serialization deduplicated — phoneme editor reuses yaml_export.cpp.
  • Orphaned iOS packs removed: iOS project.yml already referenced canonical packs/ 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.

Don't miss a new TGSpeechBox release

NewReleases is sending notifications on new releases.