I suggest that brave users test the new MultiLang add-on, which is a virtual speech synthesizer that determines the language of the input text and transmits this text to other, real synthesizers selected for the target language. Something like WorldVoice on minimals.
MultiLang requires NVDA version 2023.2 and higher.
Published at:
https://t.me/nvda_group/38962
In the synthesizer selection dialog (NVDA+Control+S), MultiLang should be activated, after which all synthesizer parameters will be available in the speech settings (NVDA+Control+V), namely:
Other settings, I think, will be familiar to many. A little later I will make more detailed instructions with a description of each of them.
MultiLang is theoretically capable of
work with any real speech synthesizers, the drivers of which correctly and timely notify NVDA about the completion of reading the text previously transmitted to them.
Normal operation has been confirmed with RHVoice, Vocalizer Expressive V2, SAPI5, eSpeak NG, ru_tts and OneCore.
Constructive (detailed) error messages are welcome.
The source code repository can be found here:
https://gitverse.ru/kvark128/MultiLang
If you liked this add-on and you want to express your gratitude
to its author, you can do this by transferring any amount to the following YooMoney wallet: https://yoomoney.ru/to/410012293543375
Some answers to the questions collected by the administrator @NVDA_Groupfrom messages from users and the developer of the add-on.
The help has also been collected by the administrator. The developer will write a detailed help later.
Real synthesizers are configured in the usual way in the software configuration
by default (nvda.ini file) or in any NVDA user configuration profile (profiles/*.ini files). You can create as many configuration profiles as you want in NVDA.
Next, in the Multilang settings for a particular voice/language, the desired speech synthesizer and configuration profile are selected, from which MultiLang will take the settings (voice/speed/height/volume, etc.) and apply them to the selected synthesizer. The synthesizer+profile bundle can be customized for each language individually.
numbers when determining the language of the text.
If this option is unchecked, the numbers will always be read in the default voice (you must select Russian).
If the check box is selected, the numbers will be read in the voice/language that was used before the numbers. For example, the line "New Year 2024" will be read in a completely Russian voice, and "new year 2024" in full English.
Quote from the question:
In my case, it also depends on which language is the default in the Multilang settings.
That is, if you configure each language separately (select a synthesizer for it) and leave, for example, English, then the time by INSERT+F12 will always be read in English, regardless of how the checkbox responsible for ignoring numbers is set. And also, in cases where the numbers go immediately in Latin, they are also read in an English voice, regardless of any settings.
Answer:
Yes, that's right. This is not an isolated case, but it should be. If there is no text in front of the numbers, then it is used
the default voice, in your case, is English.
The NVDA configuration profile, which is activated by hotkeys, does not disable the profile that was activated by a trigger.
If you have set up a profile for Outlook with column header reading disabled and it is activated automatically when you go to the program window, then in this very Outlook window you can activate other profiles using hotkeys, and they will not disable the Outlook profile.
Three sets will be active at the same time
Settings: hotkey activated profile, trigger activated profile and default NVDA configuration. And the search for one or another setting will be performed on this stack from top to bottom.
That is, if reading column headers is disabled in a profile activated by a trigger, then after activating another profile by hotkeys, reading headers will remain disabled, unless, of course, the profile activated by hotkeys overrides this setting.
Create two NVDA configuration profiles and assign your own keyboard shortcut to each of them.
In the first profile, in the MultiLang settings for Latin voice, select English , and in the second Spanish. Of course, do not forget to set up your own synthesizer+ profile pair for each of these languages.
Then just switch between profiles using the assigned keys.
Create a separate NVDA configuration profile with the necessary settings for a particular synthesizer, and then use this profile
exclusively in MultiLang. This is necessary in order to use other synthesizers in the default configuration without fear that changing their settings will affect MultiLang.
With Vocalizer, the setup is a little easier, since it can switch voices according to the language of the text, if asked to do so.
1. Open the NVDA menu → Options → Settings for automatic language switching Vocalizer.
2. In this dialog, select the primary voice for English, Spanish and other languages that you plan to use
use. Save the changes with the OK button.
3. Switch to MultiLang and use NVDA+Control+V to open the speech settings.
4. Here, by default, select English first and select Vocalizer Expressive as the synthesizer for it. Be sure to set the flag "Transfer the text language to the synthesizer".
5. Without closing the speech settings, switch to Spanish and do the same for it as for English.
6. In the Latin Voice combo box, select English.
7. Now by voice over
by default, select the one that you really plan to use by default (for example, Russian). Save the changes with the OK button.
8. Now the Latin alphabet will be considered the language that was selected in step 6. The voice for this language will be the one that was selected in step 2.
If you need to adjust the speed /pitch/volume of some voice, then switch the synthesizer to Vocalizer and make this adjustment already in its speech settings.
Now you can create an additional profile
NVDA configuration, hang hotkeys on it, and in it, in the MultiLang speech settings, select Spanish as the Latin voice. By enabling/disabling this profile, you can quickly switch between English and Spanish.
Quote from the question:
Thanks, it works, but it's not clear why, during the reading there are long pauses between the speech of different synthesizers.
Answer:
I assume that you have set the Vocalizer in the settings too
great value for the "Waiting factor" option. Set it to zero for each voice used.
https://t.me/nvda_group/60124?single
All the main functions of the add-on are already implemented.
In the future, it is planned to add the ability to make custom mappings of arbitrary characters with the desired language, but I do not know when this will happen.
I am attaching the latest version that is compatible with NVDA 2025.1
to this message.
I find it difficult to answer why you can't do it.
Now I have configured SAPI5 for Russian-Irina's voice (included with windows), and for English SAPI5-Guy's voice (Natural Voices).
The SAPI5 NVDA driver cannot handle language switching commands, so different SAPI5 voices must be configured in different NVDA configuration profiles, specifying
these profiles are then in the MultiLang settings. Maybe that's why you can't make several SAPI5 voices.
Additionally, I attach the following version of MultiLang to this message, where I tried to level out some glitches in the SAPI5 version of Natural Voices. Now in MultiLang, these voices should work more stably.
Currently, these characters enclosed in quotation marks are not declared by espeak.
These are the symbols:
"।",
"॥",
"",
"॑",
"",
please familiarize yourself with these characters by going through the letters using e-speak
https://t.me/nvda_group/40854
According to the Unicode 15.1.0 standard, none of the above characters are considered part of any writing. MultiLang transmits such commonly used characters to the voice by default.
As the default voice, select the language you need using the Devanagari script (for example, Nepali), and then the characters shown will be read in that language.
A new version of MultiLang with
I am attaching Nepali support to this message.
Here is a new version of MultiLang, where the problem with continuous reading when using RHVoice should be solved.
Also, at the request of users, the checkbox for ignoring numbers when determining the language of the text has been returned to the speech settings.
The default synthesizer for all voices/languages is now eSpeak instead of OneCore.
eSpeak correctly notifies NVDA of completion
processing the text transmitted to him, even if there was no speech.
Among other things, in this version, the text language detection module has been completely rewritten, the work of which is now based on the writing of the Unicode standard.
Added support for Devanagari script (Hindi, Marathi and Sanskrit languages).
Belarusian and Tatar have been added to the list of Cyrillic languages.
The flags for ignoring numbers and punctuation marks have been removed from the settings.
Optimized usage
the same synthesizer with the same settings when reading text in different languages.
Compatibility with older NVDA versions has been implemented (NVDA 2019.3 and higher is now required).
Fixed a couple of minor bugs.
Combining text fragments in different languages is implemented under the following conditions:
In the MultiLang speech settings, the same synthesizer and profile should be selected for all the languages being combined (in your case, for Russian and English).
The "Transfer text language to synthesizer" flag must be unchecked for all combined languages.
Make these settings for Russian and English, and the extra pauses in RHVoice should disappear. Transfer the Arabic text to Vocalizer as before.
The first issue.