added support for delayed phonetic character descriptions#13550
added support for delayed phonetic character descriptions#13550seanbudd merged 51 commits intonvaccess:masterfrom
Conversation
See test results for failed build of commit 7d03e287be |
See test results for failed build of commit f3ead48311 |
Co-authored-by: Ozancan Karataş <ozancankaratas96@outlook.com>
Co-authored-by: Ozancan Karataş <ozancankaratas96@outlook.com>
Co-authored-by: Ozancan Karataş <ozancankaratas96@outlook.com>
|
I am interested in this feature, But the current CI build is dead and I can't test it. |
|
Hi @cary-rowen , the links expire after one month, try with this new one that was generated by the new commit. Please take in account that your antivirus can try to delete this file because the installer is unsigned. |
|
Hi @davidacm |
…imeoutMsEdit if delayedPhoneticDescriptionsCheckBox is toggled.
|
Hi @cary-rowen. Thanks! |
See test results for failed build of commit 18e0ee0daa |
|
Hello, |
|
Hi, @davidacm |
|
Hi @cary-rowen , I don't know what more improvements I can do to this pr. I have some ideas related to this feature, but those ideas should be implemented in another pr because I don't want to mix features. I'm open to suggestions in code implementation and improvements, and ideas from users, but at this time, I did receive suggestions about that. |
|
Hi @davidacm AppVeyor CI seems to have a check failure, you might be able to take a look, What is NV Access's attitude towards this, can you take a look at this PR? |
See test results for failed build of commit 2303847532 |
See test results for failed build of commit 3970f37de2 |
|
I would like to thank everyone for their feedback on this PR.
The importance of configuring the delay is clear, however we would like to
implement a generic solution for this problem.
An outline of this solution can be found in #13915
<#13915>.
In summary, instead of defining a specific delay for phonetic character
descriptions, we would like to implement an option to determine how long to
wait before considering a user as idle. After no speech or keyboard input
after X milliseconds, the delayed phonetic character description would be
announced.
How does this differ from currently, where the delayed description is
canceled after the speech queue is flushed, I.E. a key is pressed or new
speech occurs?
… Introducing this generic feature will take longer, and with added risk, so
it is not possible to include this in 2022.3.
If we include an option to configure the delay for phonetic character
descriptions specifically, it will be difficult to remove when
transitioning to the idle time design in a later release (e.g. 2022.4).
As a result, we would like to introduce this feature into 2022.3 with a
set delay of 1 second, and introduce the ability to configure the delay in
a later release.
Introducing the feature like this also allows add-on authors to easily
override how long the delay should be, e.g. with an explicit option,
function based on rate, etc.
—
Reply to this email directly, view it on GitHub
<#13550 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/ABI2FPP4UZFSY4IZXH2PRCDVUTGS5ANCNFSM5R2YA4KA>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
--
Derek Riemer:
Improving the world, one byte at a time. ⠊⠍⠏⠗⠕⠧⠬ ⠮ ⠸⠺⠂ ⠐⠕ ⠃⠽⠞⠑ ⠁⠞ ⠁ ⠐⠞⠲
Software engineer, Drive web
|
|
@derekriemer - no difference, except that the delay parameter will be generic, and used to configure other settings as well. |
See test results for failed build of commit 9e3e9a94c4 |
|
I don't agree with the delay parameter to be generic if the feature is still relying on the synth break command. Even espeak has imprecision times on rate speed changes, so this can be a issue when changing the synthesizer because with breakCommands, the same value is not equivalent for each synthesizer. I did not see the new code yet, and I didn't see the code of #13915 (although the idea of that pr sounds interesting) at least in the way I understood it. P.S. Why not reuse the code to read the character description, and the code to obtain the delayed character description? I don't know if this has been made, but is just a suggestion. |
See test results for failed build of commit fcd1b10179 |
This change is simpler, it adds the character description to the same speech sequence, as opposed to starting a new one. The code to read a character description when activating a script is a different scenario - I don't think it makes sense to activate that script as a side effect of speech. |
See test results for failed build of commit fcd1b10179 |
|
I don't mean the script, just the function to get this information. So, both features can call the same function to obtain the information. P.S. Consider the possibility to use indidual values for the delay for each synthesizer, since most of synths are not accurate in the pause time. I would not like that if i'm using IBMTTS with 1000ms delay and when change to sapi5 or one core, get a different pause time for the delay. Because then, I would need to adjust the delay each time I change the synthesizer. |
|
I don't know if everything is already locked in, but I would like to register an opinion. I am very nervous about using a generic setting for the time delay for Delayed descriptions for characters. To explain. I am used to using a 1 second delay in the Enhanced Phonetic Reading addon, so I would naturally want to initially set this generic idle time delay to 1s. However, if I then find myself having to wait for 1s delays in other places to get information I used to be able to obtain more quickly, this will be problematic. If I have spent years getting the information relatively fast, then I know I am going to find any new delays a drag, and would want to turn them off to retain the quickness I am used to. But then that would be highly problematic for the Delayed descriptions for characters, where I definately do not want an immediate description. That's it, just wished to register my high feelings of caution on putting the time delay for Delayed descriptions on a generic one-size-fits-all time delay setting, as I feel that this sort of thing has the potential to adversely affect my experience of using NVDA. On a more positive note. Thanks for introducing this essential feature at all. I haven't updated NVDA in over two years for no other reason than I didn't want to lose the Enhanced Phonetic Reading addon's functionality, when it stopped being compatible. |
|
@TechHorseG - I suggest you read #13915 (and comment there - not here) before making assumptions of what could be affected by a generic parameter. Additional note: As far I am aware Enhanced Phonetic Reading is compatible with the latest NVDA, and has been regularly updated with each breaking release. Thanks to @davidacm! |
|
Hi @TechHorseG. Is hard to me to update all my add-ons in the main NVDA's repo, because I still found the process a little tedious, but this add-on will always be available to everyone until it's no longer useful. You can see my comments about my concerns in this thread. In my opinion timers are the correct way to go, but I know there are some technical limitations and also architecture implementations to be satisfied first. |
Fixes #13969 Fixes #13966 Background for the feature in PR #13550 Summary of the issue: NVDA does not correctly handle language switching commands when speaking character descriptions. Description of user facing changes Ensure character descriptions are read in the proper locale where known. Description of development approach Use the same code other spelling commands use, _getSpellingSpeechWithoutCharMode, which handles language switching.
|
seanbudd and davidacm thanks for the enhanced phonetic reading links. I had no idea that the addon was still alive. Good to know! |
Link to issue number:
Closes #13509
Summary of the issue:
The main use case is navigating character by character and a user encounters a character that they do not understand. The delayed phonetic character description is something like “alpha”/“beta”/“romeo”/“igloo”.
What makes understanding a character difficult?
This may be because a synthesizer pronounces a character unusually or indistinguishable from another character.
A user may also be hearing impaired or have other trouble processing the character. In this case, the user waits for the delayed phonetic description to occur.
Other ways to report the character description:
What makes determining the delay difficult?
The main determinate of the delay is the speed that a user interacts with the device, e.g. speed of navigating by character.
NVDA currently does not have a way to configure interaction rate, which is a general problem described in #13915.
Meeting auditory processing needs is generally achieved by adjusting the synthesizer rate.
Unfortunately, synthesizer rate varies by synthesizer, and so calculating a delay based on rate is challenging.
While a general solution for the interaction rate is blocked by #13915, using a sensible default will handle most users requirements. This delay can be configured easily by add-ons.
Description of user facing changes
Adds an option, which when enabled, causes character descriptions to be announced after a fixed delay of 1 second.
This delay value has been tested as a default in the “Enhanced phonetic reading” Add-on.
Description of development
This code modifies getTextInfoSpeech to emit a BreakCommand followed by several commands to speak a character description. This only happens if the unit of resolution is a single character, and the reason for querying for textInfo speech is caret. This causes NVDA to emit character descriptions in the following conditions:
This solution also reads the character description with capitalization settings.
Using the BreakCommand means that the overall approach is simpler as opposed to using a timer, and handled by the synthesizer rather than NVDA.
Testing strategy:
This feature was taken from an add-on called "Enhanced Phonetic Reading". The UX has been tested by many users in form of add-on by years. The default delay is 1 second, and can be configured between 100-5000ms.
The internal code has largely been rewritten in this PR.
System tests have been created to test that delayed descriptions are spoken.
Manual testing of reading characters in notepad has been performed using eSpeak, OneCore, SAPI5 and SAPI4.
This involved testing different delay rates and cancelling the description.
Known issues with pull request:
None
Change log entries:
New features
Code Review Checklist: