Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Windows OneCore, if a given language isn't installed, speech does not fall back to default voice #10451

MarcoZehe opened this issue Nov 1, 2019 · 7 comments · Fixed by #12647


Copy link

Steps to reproduce:

This happened on my home laptop which, being installed with German by default, did not have any of the OneCore English UK or US voices installed. The steps were:

  1. Had NVDA 2019.2.1 installed, which used Vocalizer voices.
  2. Upgraded to latest 2019.3 alpha build, which started to use the German OneCore voice.
  3. Went to the Nuance download page, or it could have been any page that has the page language set to English US or English UK, in Firefox.

Actual behavior:

Whenever NVDA tried to read something in English from that page, the following error was logged, and the text was not spoken:

IO - inputCore.InputManager.executeGesture (14:30:50.699) - winInputHook (1524):
Input: kb(laptop):downArrow
DEBUG - synthDrivers.oneCore.SynthDriver.cancel (14:30:50.707) - MainThread (1348):
DEBUG - synthDrivers.oneCore.SynthDriver._callback (14:30:50.709) - Dummy-6 (8980):
Done pushing audio
DEBUG - synthDrivers.oneCore.SynthDriver._processQueue (14:30:50.709) - Dummy-6 (8980):
Calling idle on audio player
DEBUG - synthDrivers.oneCore.SynthDriver._processQueue (14:30:50.711) - Dummy-6 (8980):
Queue empty, done processing
IO - speech.speak (14:30:50.714) - MainThread (1348):
Speaking [LangChangeCommand ('de_DE'), 'Überschrift  Ebene 4', LangChangeCommand ('en'), 'United Kingdom']
DEBUG - synthDrivers.oneCore.SynthDriver._processQueue (14:30:50.728) - MainThread (1348):
Begin processing speech
IO - braille.BrailleBuffer.update (14:30:50.757) - MainThread (1348):
Braille regions text: ['ü4 United Kingdom ']
IO - braille.BrailleHandler.update (14:30:50.759) - MainThread (1348):
Braille window dots: 12568 1456 - 1367 1345 24 2345 15 145 -
ERROR - NVDAHelperLocal (14:30:50.735) - Dummy-7 (16768):
Thread 16768, build\x86\localWin10\oneCoreSpeech.cpp, ocSpeech_speak::<lambda_21151d5a0dfc8f546bcaed819f94e1de>::operator (), 98:
Error -2147024894: Das System kann die angegebene Datei nicht finden.

Das System kann die angegebene Datei nicht finden.

DEBUGWARNING - synthDrivers.oneCore.SynthDriver._callback (14:30:50.763) - Dummy-7 (16768):
ocSpeech_speak failed!
DEBUG - synthDrivers.oneCore.SynthDriver._processQueue (14:30:50.763) - Dummy-7 (16768):
Calling idle on audio player
DEBUG - synthDrivers.oneCore.SynthDriver._processQueue (14:30:50.765) - Dummy-7 (16768):
Queue empty, done processing
DEBUG - synthDrivers.oneCore.SynthDriver.cancel (14:30:53.350) - MainThread (1348):

Expected behavior:

It should have noticed that the language wasn't available and fell back to the default voice instead.

System configuration

NVDA installed/portable/running from source: Installed.

NVDA version: alpha-19051,054d7b29

Windows version: Version 1909 (Build 18363.449)

Name and version of other software in use when reproducing the issue: Firefox 71 beta.

Other information about your system:

None relevant. The braille display connected was a Handy Tech Actilino, but the error occurred without braille as well.

Other questions

Does the issue still occur after restarting your PC?


Have you tried any other versions of NVDA? If so, please report their behaviors.

I noticed version 2019.2.1, when using with OneCore, did fall back to justusing the normal voice in such cases.

Copy link

Brian1Gaff commented Nov 2, 2019 via email

Copy link

cc @michaelDCurran It looks like a speech refactor regression.

Copy link

@MarcoZehe, what voices are listed in your NVDA 2019.3 Alpha? I assume only the German voices?
Does this problem also occur when you have a bare configuration of NVDA?

Copy link
Contributor Author

MarcoZehe commented Dec 4, 2019 via email

Copy link

This is also a problem for languages where OneCore does not have a voice, such as Ukranian, as reported to me by a user. They didn't send me a log, but if we can't load the chosen OneCore voice for whatever reason, we should drop back to eSpeak-NG. Theoretically, we could potentially fall back to another installed OneCore voice on the basis that if a user has installed a voice they likely speak the language, but even then, there are a number of reasons why someone might have a language they don't speak installed on a system they use.

Copy link

Hi dear friends.
There are many languages for which there are no Windows OneCore voices. Among them is Ukrainian.
NVDA immediately launches Windows OneCore. If the language of the system and NVDA is Ukrainian, then the selected voice does not read Cyrillic. Therefore, a blind user who encounters NVDA for the first time will not be able to change the synthesizer to eSpeak.
An experienced user can do this if he remembers how many and what actions need to be performed.
My suggestions are:

  1. Leave Windows OneCore voices by default.
  2. If the system does not have a OneCore voice for the current system language, automatically switch to eSpeak.
    For example, if the speech is about Ukraine, you can switch into Russian or Latvian version of eSpeak.

Copy link

Hi all!
Some users cannot even install NVDA themselves due to the fact that there are no Windows OneCore voices for their languages.
I suggest: for languages for which there are no these voices, make the synthesizer eSpeak speak by defoult.
Among such languages, there are, in particular, Ukrainian.
I wrote to developers on both Github and Facebook, but the problem has not yet been solved.

@feerrenrut feerrenrut added this to the 2021.2 milestone Jun 4, 2021
@seanbudd seanbudd self-assigned this Jul 14, 2021
@seanbudd seanbudd modified the milestones: 2021.2, 2021.3 Jul 21, 2021
seanbudd added a commit that referenced this issue Jul 29, 2021
Fixes #10451 and fixes #11544

Summary of the issue:
OneCore voices silently fail when attempting to speak an alphabet they don't support (eg an English voice reading Cyrillic characters). This makes installing NVDA for the first time for the first time inaccessible if someone is using a system with a language that isn't supported by their OneCore installed voices.

An issue was raised on #11543 where oneCore failed to initialise, causing all speech to fail.
If no speech succeeds, the _player is never set and so a subsequent error is thrown in _processQueue.

Description of how this pull request fixes the issue:
When picking a synthesizer automatically (using "auto", ie not overriden by a user), fail if the current NVDA language and current system language is not supported by installed OneCore voices.

If oneCore fails to speak more than N=5 times in a row, try the next synth on the synth priority list.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment