pantheraspeech 1.1.0 - Lion sings, and every voice speaks SAPI
This release was moved forward by two contributors, and their work is most of what is new: Brandon made interrupting speech fast on Lion and Snow Leopard, and Dan brought every Panthera voice to SAPI. Thank you both — pull requests like these are the best thing that can happen to a project like this one.
Interrupting is fast on Lion and Snow Leopard (Brandon, #7)
Cancelled speech on 10.6 and 10.7 used to hold the worker for 345–947 ms while the replacement rendered in tens of milliseconds once it got through. Brandon's fix keeps a standby engine process warm and gives a cancelled render a short handoff grace — 60 ms — when newer speech is already waiting behind it, so rapid arrowing moves the way it should.
The grace is a per-generation answer: Leopard says never, because there the cancel already lands in tens of milliseconds and a replacement host means reloading Alex's 701 MB bank — a suite of regression tests guards exactly that trade, and Brandon's improvement lands precisely where it pays.
Every voice speaks SAPI (Dan, #8)
A new 32-bit and 64-bit SAPI 5 driver carries all four generations — Tiger, Leopard, Snow Leopard and Lion, ninety-plus voices on a full install — to every SAPI application, JAWS included. The attached installer sets it up: it finds the speech data NVDA users have already extracted (the shared %APPDATA%\nvda\macintalk folder), so nothing is extracted twice and nothing is copied; a settings program handles registering and unregistering voices, choosing a different data folder (voices re-register automatically when you move it), and extracting from an install image — with a live progress bar, and a proper question before it will replace an install you already have.
The engine itself remains exactly what the NVDA add-on runs, and the same rule holds everywhere: no Apple data ships in anything here. The installer carries only our code; your discs supply the voices.
Lion sings
[[inpt TUNE]] and [[inpt PHON]] are on for Lion, for the first time. Reported from outside on 1.0.0: tune sequences that sang on Leopard and on real Mountain Lion spoke their phonemes on our Lion with none of the tuning. Two faults, both ours, both fixed:
- The dictionary parsed every annotation correctly and built the melody — which then died in two CoreFoundation constructors the host had never implemented, so the engine was told "no tune" on every utterance. The issue's own repro case now renders 12094 frames against Leopard's 12096.
- A malformed phoneme used to kill the host outright. The engine's error handler is a stack block the host never truly copied, firing from a dead stack frame; with the Blocks runtime done honestly, Apple's own error recovery works as designed — a typo gets you the phonemes it could read, not a dead synthesizer.
Duration and pitch annotations, held notes, melodies — on Lion's Fred, and on Alex, they sing. (Tune pitch values are hertz; Fred is happiest between about 130 and 300.)
Also in 1.1.0
- The interim stripping of input-mode commands is retired as policy and kept as machinery, tested, for any future generation that needs it.
- 542 tests pass, across all four generations.
The add-on still ships no part of any engine; the Tools menu extracts what you own.
Installer updated to 1.1.1 shortly after release: the settings program gained the two NVDA driver settings SAPI users need most — Accept embedded speech commands in text (off by default; the engine otherwise eats [[bracketed]] words, wiki links included) and Pauses, the phrase-break threshold. Both apply to every SAPI application from the next utterance. The settings dialog also opens without a console flash now, extraction shows live progress, and re-extracting asks before replacing an install.