Earcons and Speech Rules is an NVDA add-on that allows NVDA to play earcons as well as other speech effects, such as prosody changes. Formerly this add-on was known as Phonetic punctuation. This add-on also includes almost all functionality of Unspoken add-on, which appears to be abandoned as of 2024.
You can listen to a sample speech output with phonetic punctuation here (10 seconds audio): https://soundcloud.com/user-977282820/nvda-phonetic-punctuation-demo
Please install the latest version from NVDA add-on store.
earconsAndSpeechRules.json in NVDA user configuration directory.Rules can be configured in NVDA Settings, in the Earcons and speech rules pane.
Text rules trigger on a configurable regular expression in NVDA speech. Once a rule is triggered, you can either replace matched text with an earcon or adjust prosody (such as voice pitch) for that match.
Additionally you can specify a text rule to trigger for only:
Text rules are executed in the order they appear in the configuration dialog. If your rule doesn't seem to work, try moving it to the topmost position. E.g., if you are trying to match an IP address containing periods, check whether periods have been replaced by a preceding rule, which would make matching IP address impossible.
Text rules are not triggered when moving by character - please see the next section.
Character rules allow you to substitute a character description in spelling mode (such as "space" or "Tab") with an earcon. These rules don't affect NVDA speech when reading text unless spelling characters.
Roles such as Editable or Button are internal NVDA property of objects describing their type. You can configure an earcon to be played for each role instead of speaking role name.
This feature was previously a part of Unspoken add-on, which appears to be abandoned as of 2024.
States like "checked" and negative states like "Unchecked" can also be replaced with earcons.
You can also suppress announcing certain states that are not that important. In order to do so, check "Suppress this state in non-verbose mode" checkbox. Then you can triggerconsise state reporting by pressing NVDA+Alt+[ (left bracket; the key immediately to the right from letter P on English keyboard).
To further illustrate concise state reporting, open http://google.com and compare how the main editable is reported in verbose and concise modes.
Certain formatting attributes can be expressed either as prosody or an earcon. Currently we support:
We support two options here:
This includes some unrelated phrases spoken by NVDA that can also be replaced with earcons:
Earcons and speech rules makes use of advanced NVDA speech commands and they are not always well supported by all TTS synthesizers.
Synthesizers known to work well with Earcons and Speech Rules: * Microsoft Speech API * eSpeak * Windows OneCore Voices * Eloquence threshold
Synthesizers known to have issues with Earcons and Speech Rules: * IBMTTS (as of December 2024): see this issue. I fixed this problem in this PR, however the author for some reason is not accepting it, so if you want to use earcons and Speech Rules with IBM TTS, please ask the author to merge this PR. * RHVoice: Break command is not supported as of January 2020.
You can disable Earcons and Speech Rules in certain applications. This is a comma-separated blacklist of applications where Earcons and Speech Rules will be disabled. If you are not sure what should be the name of your application, switch to that application, Press NVDA+Control+Z to open up NVDA console and type: "focus.appModule.appName" without quotes to obtain the name of current application. Example list: slack,discord
speech.getTextInfoSpeech() commands for each chunk between headings. The interplay of computing "out of container messages with the fact that we surgically remove headings from textInfo fields, creates enormous amount of complexity.if not extraDetail: inside def getTextInfoSpeech that makes it to repeat link message every time, but not in extraDetail mode (which is enabled when navigating by word or character). I don't understand why this clause is there, but it's too hard to work around this without causing more side effects.