Skip to content

Add nvdaController_isSpeaking to the controller client #20188

@ethindp

Description

@ethindp

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    audience/nvda-devPR or issue is relevant to NVDA / Add-on developersfeaturep5https://github.com/nvaccess/nvda/blob/master/projectDocs/issues/triage.md#prioritytriagedHas been triaged, issue is waiting for implementation.
    No fields configured for Feature.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions