Synth Dictionary Editor

Version 1.0 — by crucio2211

Overview

Synth Dictionary Editor is an NVDA add-on that lets you view and edit the pronunciation dictionary files (.dic) used by the IBMTTS and Eloquence synthesizers directly from within NVDA — no need to open a separate text editor or restart NVDA manually.

Note: This is separate from NVDA's built-in Speech Dictionary (found under NVDA menu → Preferences → Speech Dictionaries). This add-on edits the low-level .dic files read directly by the synthesizer engine itself, giving you direct control over how the synthesizer pronounces specific words.

Compatibility

SynthesizerNotes
IBMTTSMust be installed as an NVDA add-on. All versions supported.
EloquenceMust be installed as an NVDA add-on. All versions supported.

Requires NVDA 2019.3 or later.

Opening the Editor

Go to NVDA menu → Tools → Synth Dictionary Editor...

The Editor Interface

Dictionary File Selector

The Dictionary file dropdown at the top lets you switch between the available .dic files in the synthesizer folder. Each file may serve a different purpose (e.g., main word list, root forms, abbreviations). Changes apply only to the currently selected file.

Search

Type in the Search box to filter the list by word or pronunciation in real time. Press the X button inside the search box to clear the filter and show all entries.

Entry List

The list shows all entries in the selected dictionary file. Each row has two columns: Word (what the synth reads in text) and Pronunciation (how it should be spoken). The entry count is shown below the list.

Managing Entries

Adding an Entry

Press Add, enter the word and its pronunciation, then press OK.

Editing an Entry

Select an entry and press Edit, or double-click it. Change the word or pronunciation as needed, then press OK.

Removing an Entry

Select an entry and press Remove. A confirmation dialog will appear before deletion.

Word Variation Generator

Select a root word entry and press Add Variations... to automatically generate morphological variations based on common affixes — prefixes, suffixes, and infixes. This is useful for any language with regular affixation patterns.

All suggestions are unchecked by default. Review the list, check the ones you want to add, edit individual phonemes if needed, or add a custom variation manually. Press Add Checked to insert them.

Importing Entries

Press Import... to bring in entries from a single .dic or .txt file. You will be asked which dictionary file to merge them into. Entries whose words already exist in the destination (case-insensitive) are skipped automatically.

Batch Import

Press Batch Import... to import multiple files at once. Select one or more .dic or .txt files in the file picker.

For each selected file, the add-on checks if its filename matches the standard naming convention (see below). If it matches, the destination file is determined automatically. If not, a dialog will ask you to assign a language and dictionary type before importing.

A summary dialog appears at the end showing how many files were processed and how many new entries were added. Any files that were skipped (cancelled or unreadable) are listed separately.

Dictionary File Naming Convention

Dictionary files follow a strict naming pattern: langcode + type + .dic

The language code is a 3-letter prefix identifying the language:

CodeLanguage
enuEnglish (US)
engEnglish (UK)
espSpanish (Spain)
esmSpanish (Latin America)
ptbPortuguese (Brazil)
fraFrench (France)
frcFrench (Canada)
deuGerman
itaItalian
finFinnish
chsChinese (Simplified)
jpnJapanese
korKorean

The type suffix identifies the dictionary's role:

SuffixPurpose
mainMain word pronunciation dictionary
rootRoot word forms
abbrAbbreviations and acronyms

Examples: enumain.dic, enuroot.dic, enuabbr.dic, ptbmain.dic, deuroot.dic

Note: Files that already follow this naming convention are matched automatically during batch import without prompting. Files with non-standard names will trigger the language and type assignment dialog.

Exporting Entries

Press Export... to save all entries in the current dictionary to a file of your choice.

Saving

Press Save to write your changes to disk. After pressing OK in the confirmation dialog, the synthesizer reloads automatically so the new pronunciations take effect immediately — no need to restart NVDA.

Important: Changes only take effect after saving. If you close the editor without saving, you will be prompted to save or discard your changes.

Removing a Dictionary File

Press Remove Dictionary to permanently delete the currently selected .dic file from disk. A confirmation dialog appears with No as the default to prevent accidental deletion.

Online Dictionary Update

The Online Dictionary Update section at the bottom of the editor lets you download and merge pronunciation entries from community-maintained GitHub repositories.

  1. Select a source from the Source dropdown.
  2. Press Check for Updates.
  3. The add-on downloads the repository's dictionary files and merges any new entries into your existing .dic files. Duplicate entries are skipped. New dictionary files not yet present in your folder are created automatically.
Note: The update affects all .dic files in the repository, not just the one currently selected in the editor. All entries are written in CP1252 encoding with Windows-style line endings (CRLF) for full compatibility with the synthesizer.

Pronunciation Guide

The IBMTTS and Eloquence engines support two ways to specify a pronunciation for a word: phoneme strings (SPR) and spelled-out pronunciations. The phoneme symbols listed here are for American English (enu). Other languages have their own symbol sets — refer to the IBM TTS API Reference for details.

Spelled-Out Pronunciation

The simplest method. Write how the word should sound using ordinary words that the synth already reads naturally. Best used for abbreviations and acronyms.

WordSpelled-Out EntryResult
OMGoh em jeeReads as "oh em jee"
NVDAen vee dee ayReads as "en vee dee ay"
CPUsee pee youReads as "see pee you"

Phoneme String (SPR) Format

A Symbolic Phonetic Representation (SPR) gives you direct control over the exact sounds the synthesizer produces. The format is:

`[phoneme_sequence]

The backtick-bracket wrapper (`[...]) tells the synthesizer to treat the contents as a raw phoneme sequence rather than ordinary text.

Syllable Stress Markers

SymbolMeaning
1Primary stress (most prominent)
2Secondary stress
0No stress
.Syllable boundary (optional in most languages)

Stress markers go to the left of the vowel of the stressed syllable.

American English — Regular Vowels

SymbolExample Words
afather, lot
Aback, had
ecake, pain
Ehedge, let
isee, speak, believe
Ipick, ill
oboth, oak
claw, cough
uzoo, truth
Utook, put
Hbut, mug, son
Rbutter, hurt

American English — Diphthongs

SymbolExample Words
Otoil, boy
Wout, cow
Ylife, fine

American English — Reduced Vowels

SymbolExample Words
xsofa, alone, suppose, America
Xroses, connect, melody, symphony, hinted

American English — Consonants

SymbolExample Words
bbad, sob
ppit, rip
ddip, had
ttip, pet
ggood, bug
kkill, cat, make, back
Dthis, breathe
Tthing, Beth
vvase, save
ffield, if, graph
zzip, phase
sseal, miss, ceiling
Ztreasure, garage
Sship, wish
JJane, huge
Cchip, witch, nature
hhot, hero
mman, hum, summer
nnever, sun, winner
Gsing, finger
rborrow, rake
llow, hall
wwear, quick
yyes, Virginia
Mhmmm
?glottal stop — kitten, Latin
Fflap — writer, fiddle
Nsyllabic nasal — button, satin, eaten

Complete SPR Examples (American English)

WordSPR Entry
though`[.1Do]
shocking`[.1Sa.0kIG]
construction`[kXn1strHkSXn]
hello`[h.1E.0lo]
beautiful`[.1byu.0tI.0fXl]
writer`[.1rY.0FR]
button`[.1bH.0tN]
Tip: Start with spelled-out pronunciation for simple cases. Use SPR strings when you need precise control over stress, vowel quality, or sounds that do not map naturally to English spelling. Note that x and X are reduced vowels (like the unstressed vowel in "sofa"), not consonants.

Changelog

Version 1.0

License

This add-on is licensed under the GNU General Public License v2.0. It is based in part on code from the Eloquence for NVDA add-on, which is also licensed under GPL v2.