Skip to content

Releases: alexoloopios/pico-sapi5

Release list

Pico SAPI5 V1.0.0

Choose a tag to compare

@alexoloopios alexoloopios released this 31 Aug 22:35

The first release of Pico SAPI5: the SVOX Pico synthesizer, available to every
Windows application through SAPI 5.

Pico is small, fast and very intelligible, and on Windows it has until now been
reachable only from NVDA through the
PicoTTS-NVDA add-on. This makes
the same engine available everywhere else — screen readers, Word, Balabolka,
anything that lists SAPI 5 voices.

Install

Download PicoSAPI5-1.0.0-setup.exe below and run it as administrator
SAPI reads its voice list only from HKLM, and a voice registered under HKCU
is silently ignored.

Silent install:

PicoSAPI5-1.0.0-setup.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART

Both a 32-bit and a 64-bit engine are installed into C:\Program Files\Pico SAPI5 and each is registered for applications of its own bitness, so 32-bit
programs get the same voices. They share one copy of the speech data.

Applications that are already running — screen readers especially — need
restarting before the new voices appear in their voice list. Uninstall from
Add/Remove Programs.

Requires Windows 10 or later. Developed and tested on Windows 11.

The voices

All six ship in the installer; there is nothing further to download. Pico
provides one adult female speaker per language, which is the whole of its
lingware.

Voice Language
Pico American English en-US
Pico British English en-GB
Pico German de-DE
Pico Spanish es-ES
Pico French fr-FR
Pico Italian it-IT

16 kHz, 16-bit, mono — what Pico's lingware is built for. SAPI converts it if an
application asks for something else.

You can hear all six, and the rate and pitch extremes, in
samples/ without
installing anything.

What works

Rate, pitch and volume, both as the voice's own settings and as per-fragment
overrides in SSML. SAPI's −10…+10 is a factor of three either way for rate and an
octave either way for pitch; the latter lines up exactly with Pico's own 50–200
range, so neither end clips. Volume is applied to the samples rather than as
markup, which is what lets it follow a slider being moved while an utterance is
already playing — as does a rate change.

Word and sentence boundaries, and bookmarks, so a screen reader can highlight
what is being spoken. Pico reports no marks of its own, so word positions are
derived: exact at every sentence boundary, interpolated within a sentence. The
practical effect is that a caret tracks the speech and never drifts or runs
backwards.

Silence, spelling out, aborting and forward sentence skipping. An abort is
noticed within a sentence and leaves the engine clean for the next utterance;
skipped text is never synthesised. SPVA_Pronounce speaks the fragment's text
rather than its phonemes, because SAPI supplies pronunciations in its own
universal phone set and Pico's <phoneme> tag takes SAMPA.

Notes

Pico parses its own markup out of whatever it is asked to speak, and text
arriving from an application is not necessarily trustworthy — a screen reader
reading a web page hands over whatever is on it. An embedded <speed> tag is
obeyed, which would let a document change the listener's speaking rate, and
<spell> faults the engine outright, which inside a screen reader takes the
application down with it. Text is escaped so that a bracket opening one of Pico's
tags is neutralised while an ordinary one is still pronounced: 5 < 10 still
reads as "less than".

Unlike most engine wrappers, there is no helper process and no interprocess
audio. Pico is portable C, so it is compiled into the engine DLL for each
architecture — which is also why 32-bit Windows is supported rather than 64-bit
being a requirement. Both builds are statically linked against the CRT, so the
installation needs no redistributable.

Selecting a voice after speaking with a differently sized one used to fail
silently. Pico suballocates its speech data from a fixed memory arena, and
releasing a voice left that arena too fragmented to load a larger one; choosing
American English after using French failed every time. A voice change now
reinitialises the engine.

Diagnostics are off by default. Set PICO_SAPI5_LOG to 1–3, or put logLevel=2
under [diagnostics] in %LOCALAPPDATA%\Pico SAPI5\config.ini; the log is
written beside it.

Verification

Both engines pass a harness that drives the full ISpTTSEngine contract without
registration, checking the output format, voice selection through a token, one
word event per word with monotonic in-range offsets, rate and volume actually
changing the audio, aborting and recovering, bookmarks, silence, spelling out,
and that Pico's own markup arriving as text neither changes the rate nor crashes
the engine.

The suite runs once per voice for each architecture — twelve runs — because which
voice the engine starts on turned out to matter.

Licence

Apache License 2.0, the same as SVOX Pico itself. The engine and language data
are © 2008–2009 SVOX AG. The three small changes needed to build them for Windows
are listed in
docs/notes.md,
and the language data is byte-identical to upstream.