Skip to content

VoiceOver for NVDA

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

Install

  1. Download the latest VoiceOver-x.y.z.nvda-addon from the Releases page.
  2. Press Enter on the downloaded file, or use NVDA menu → Tools → Add-on store → Install from external source.
  3. Restart NVDA when prompted.

Usage

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.

Sound schemes

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.

Making your own scheme

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.py

scripts/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.

What makes a sound

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.

Replacing individual sounds

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.

Building from source

python scripts/build.py

Writes 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 -q

The tests stub out NVDA's modules, so they run on any Python 3.11+ without NVDA installed.

Contributing

Bug reports, sound submissions and pull requests are welcome — see CONTRIBUTING.md and the Code of Conduct. Version history is in CHANGELOG.md.

Credits

Original add-on by Bilal Özçatak (ozcitakbilal@gmail.com), https://latesignalgaming.com.tr.

About

Earcons for NVDA: a short sound for focus, typing, deletion and navigation, so you know what you landed on before speech finishes.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages