Earcons for NVDA. VoiceOver plays a short sound when you focus a control, type a character, delete text, tab between elements or expand a tree — so you can tell what kind of thing you landed on before the speech synthesiser finishes saying it.
Türkçe: README.tr.md
- Requires: NVDA 2024.1 or newer
- Tested up to: NVDA 2026.1
- License: GPL v2
- Download the latest
VoiceOver-x.y.z.nvda-addonfrom the Releases page. - Press Enter on the downloaded file, or use NVDA menu → Tools → Add-on store → Install from external source.
- Restart NVDA when prompted.
| Gesture | Action |
|---|---|
NVDA+Alt+O |
Turn all VoiceOver sounds on or off |
NVDA+Alt+M |
Mute or unmute VoiceOver for the application in front |
Settings live in NVDA menu → Preferences → Settings → VoiceOver:
| Setting | What it controls |
|---|---|
| Enable VoiceOver sounds | Master on/off, same as NVDA+Alt+O |
| Sound scheme | Which set of sounds to use |
| Play navigation / typing / action / object sounds | Each category on or off |
| Master volume | Scales every category below |
| Navigation sounds volume | Tab, Shift+Tab, scroll |
| Typing sounds volume | Characters, space, Enter, backspace, delete |
| Action sounds volume | Button and checkbox activation |
| Object sounds volume | Per-role focus sounds |
| Muted applications | One application name per line |
All volumes are 0–100 spin boxes: Up arrow is louder, Down arrow is quieter.
The original sounds are the default. Four generated schemes ship with the add-on and can be picked from the settings panel:
| Scheme | Character |
|---|---|
default |
The sounds the add-on has always shipped with |
minimal |
Pure sine tones, quiet. The least fatiguing over a long day |
warm |
Soft triangle waves. Rounder than minimal, gentler than retro |
retro |
Chiptune square waves, bit-crushed. Bright and unmistakable |
glass |
FM bells with a long ring. Distinct without being sharp |
All of them use the same vocabulary — a rising pair means "moved forward", a falling pair means "collapsed" — so switching schemes does not mean relearning what anything means.
Create a directory under globalPlugins/voiceover/schemes/ and put WAV files in
it using the same names as the table below. A scheme only needs the sounds it
wants to change: anything it leaves out falls back to the default set, file by
file, so a scheme containing a single typekey.wav is perfectly valid.
Role sounds go in an objdata subdirectory inside your scheme. Add a
scheme.txt whose first line describes the scheme — that line is shown in the
settings panel.
The bundled schemes are generated rather than recorded:
python scripts/make_schemes.pyscripts/synth.py holds the synthesiser and scripts/make_schemes.py holds one
recipe table shared by every scheme. Regenerating is deterministic — the same
source produces byte-identical files.
On focus — a per-role sound, taken from globalPlugins/voiceover/objdata/.
Buttons, checkboxes, links, list items, menu items, headings, sliders, tabs,
documents, edit fields and dialogs each have their own. Roles without a
dedicated file fall back to a related one (a combo box uses the popup-menu
sound, a table cell uses the list-item sound, and so on).
Collapsed and expanded states override the role sound, so a tree item tells you which way it is pointing before it tells you what it is.
Container roles — plain windows, panes, frames and unknown objects — only sound when the foreground application actually changed. Without that rule a media player firing focus events on its own window while you change the volume would click at you on every key press.
On typing — a key sound in anything that really accepts text: edit fields, terminals, and any object NVDA reports as editable. Space has its own sound; password fields have a distinct one so a masked field is audible as masked. NVDA still speaks the typed character as normal — the add-on never swallows the event.
On delete — Backspace and Delete have separate sounds, and only fire inside a text field. Enter has its own sound there too, and still plays the activation sound when the focus is on a button.
On navigation — Tab, Shift+Tab and the paging keys play a sound, but only when the key actually moved focus to a different object. Arrow keys inside a text field move the caret, not the focus, and stay silent.
Every sound is a plain WAV file. Drop your own in over the shipped one, keep the filename, and restart NVDA. Both 16 and 24-bit PCM work, mono or stereo, any sample rate. Changes made this way are lost when the add-on is updated — put them in a scheme directory instead if you want them to survive.
| File | Played when |
|---|---|
typekey.wav |
A printable character is typed |
typekeyspace.wav |
Space is typed |
typekeypr.wav |
A character is typed into a password field |
typekeyremove.wav |
Backspace |
typekeydelete.wav |
Delete |
typekeyenter.wav |
Enter, inside a text field |
Tab.wav / ShiftTab.wav |
Focus moved forward / backward |
scroll.wav |
Page Up/Down, Home, End moved focus |
clicked.wav |
Space or Enter activated a button or checkbox |
collapsed.wav / expanded.wav |
Focused object is collapsed / expanded |
notext.wav |
Switched to an application whose window has no name |
objdata/<role>.wav |
An object with that NVDA role got focus |
Role file names are the lowercased NVDA role name, e.g. objdata/button.wav,
objdata/listitem.wav.
python scripts/build.pyWrites dist/VoiceOver-<version>.nvda-addon, taking the version from
manifest.ini. No build dependencies beyond the standard library.
Run the test suite with:
python -m pytest tests -qThe tests stub out NVDA's modules, so they run on any Python 3.11+ without NVDA installed.
Bug reports, sound submissions and pull requests are welcome — see CONTRIBUTING.md and the Code of Conduct. Version history is in CHANGELOG.md.
Original add-on by Bilal Özçatak (ozcitakbilal@gmail.com), https://latesignalgaming.com.tr.