-
-
Notifications
You must be signed in to change notification settings - Fork 783
Add nvdaController_isSpeaking to the controller client #20188
Copy link
Copy link
Open
Labels
audience/nvda-devPR or issue is relevant to NVDA / Add-on developersPR or issue is relevant to NVDA / Add-on developersfeaturep5https://github.com/nvaccess/nvda/blob/master/projectDocs/issues/triage.md#priorityhttps://github.com/nvaccess/nvda/blob/master/projectDocs/issues/triage.md#prioritytriagedHas been triaged, issue is waiting for implementation.Has been triaged, issue is waiting for implementation.
Metadata
Metadata
Assignees
Labels
audience/nvda-devPR or issue is relevant to NVDA / Add-on developersPR or issue is relevant to NVDA / Add-on developersfeaturep5https://github.com/nvaccess/nvda/blob/master/projectDocs/issues/triage.md#priorityhttps://github.com/nvaccess/nvda/blob/master/projectDocs/issues/triage.md#prioritytriagedHas been triaged, issue is waiting for implementation.Has been triaged, issue is waiting for implementation.
Type
Fields
Give feedbackNo fields configured for Feature.
Is your feature request related to a problem? Please describe.
Right now, NVDA is not able to communicate to consumers of the controller client whether it's speaking or not. Applications that wish to know this must therefore settle for screen reader calibration, which involves printing a long string and waiting for the user to press a key (or otherwise signal to the app) to indicate when the screen reader is done. This is extremely error prone, highly inaccurate and unnecessary when NVDA has this capability already.
Describe the solution you'd like
My solution is to add nvdaController3 as an MSRPC interface, exposing
isSpeaking([out] boolean* speaking). That would define "speaking" as the synthesizer producing audio at the present time and not as speech as queued (since speech being queued is a different question to pose, and does not intuitively map to what a controller client consumer would expect). PR #20179 performs the necessary work to implement this interface.Describe alternatives you've considered
The alternative is screen reader calibration, or just not doing anything. This is problematic in things such as RPGs or turn-based games where we need the game to pause and wait but only until the screen reader has finished speaking. Another alternative is to define "speaking" as "speech is queued," but this is problematic because the time between a certain phrase being queued and being spoken are variable and unknown.
Additional context
This functionality would be exposed via the Prism library.