SAPI5 Organizer

An NVDA add-on that turns one unmanageably long list of SAPI5 voices into three short, meaningful ones: SAPI engine, SAPI language and SAPI voice variant.

What it does

If you have several SAPI5 engines installed, NVDA's Voice combo box in Speech settings becomes a single flat list of every voice from every engine, in every language. On a well stocked machine that can be hundreds of entries.

SAPI5 Organizer indexes every SAPI5 voice on the system and adds three cascading combo boxes to NVDA's existing Speech settings category:

Choosing an engine immediately narrows the language list, and choosing a language immediately narrows the variant list. Choosing a variant selects that voice, and NVDA's own Voice combo box updates to match. It works the other way round too: change the Voice combo box and the three new combo boxes follow.

The controls appear only while the Microsoft Speech API version 5 (32 bit) or Microsoft Speech API version 5 (64 bit) synthesizer is selected. With any other synthesizer, NVDA's Speech settings are exactly as they always were.

Every engine, not just some

SAPI5 publishes voices in two different ways. Some voices have a registry key of their own. Others are produced at run time by a token enumerator: a COM object registered under TokenEnums that invents its voices when SAPI asks for them, so those voices have no registry keys at all. On a well stocked machine the second kind can easily outnumber the first.

SAPI5 Organizer covers both, working out the engine behind a voice from the container its id sits in rather than from a registry key that may not exist. Every voice is attributed to the engine that actually provides it, so there is no catch-all "other" group, and an engine registered in more than one voice category is listed once rather than twice.

Saving your settings

The three controls are ordinary NVDA driver settings, so they behave like every other speech setting:

The voice index

NVDA menu, Tools, SAPI5 voice index opens a report of the complete catalogue, which is broader than what any single synthesizer can offer. For each voice it shows the voice name, the engine that provides it, the language or languages it declares, whether that engine is registered for 32 bit programs, 64 bit programs or both, the SAPI category, and the registry key the voice comes from.

The list can be filtered as you type, and the whole report can be copied to the clipboard, saved to a text file, or written to the NVDA log. An engine shown as not registered is worth knowing about: it usually explains a voice that appears in a list but refuses to speak, because the engine was uninstalled without its voices being removed.

Commands

The add-on ships no assigned gestures, so it cannot clash with anything you already use. To assign one, open NVDA menu, Preferences, Input gestures, and look under the SAPI5 Organizer category:

Troubleshooting

The add-on logs in detail. Set NVDA menu, Preferences, Settings, General, Logging level to Debug, restart NVDA, then open the log with NVDA+f1. Every line the add-on writes is prefixed with SAPI5 Organizer:, including one line per voice token discovered, the engine each voice was grouped into, and every voice change the three combo boxes make.

Licence

Copyright (C) 2026 Josh Kennedy. Released under the GNU General Public License version 2.