Skip to content

Add isSpeaking function to NVDA controller client#20179

Closed
ethindp wants to merge 1 commit into
nvaccess:masterfrom
ethindp:nvda-controller-enhancements
Closed

Add isSpeaking function to NVDA controller client#20179
ethindp wants to merge 1 commit into
nvaccess:masterfrom
ethindp:nvda-controller-enhancements

Conversation

@ethindp
Copy link
Copy Markdown

@ethindp ethindp commented May 19, 2026

Link to issue number:

N/A

Summary of the issue:

Right now, NVDA provides no way of detecting when it is speaking. This PR attempts to close that gap.

Description of user facing changes:

N/A

Description of developer facing changes:

A new method, isSpeaking, is added to the speech module. This is a composite check, in that it returns false if either the speech mode is not talk or if speech is paused.

Description of development approach:

In the NVDA codebase, "speaking" is a highly ambiguous term. It could mean that the synth driver is actively producing audio or speech is queued but may not be pushed to the synth driver. In this PR, we define "speaking" as the former: NVDA is "speaking" when the synth is actually speaking/producing audio, not when NVDA has speech queued. We do this because this naturally maps to what a user would consider as "speaking" intuitively.

Testing strategy:

This is a difficult property to actively test. Right now, I know that the implementation works over the RPC endpoint at least.

Known issues with pull request:

Code Review Checklist:

  • Documentation:
    • Change log entry
    • User Documentation
    • Developer / Technical Documentation
    • Context sensitive help for GUI changes
  • Testing:
    • Unit tests
    • System (end to end) tests
    • Manual testing
  • UX of all users considered:
    • Speech
    • Braille
    • Low Vision
    • Different web browsers
    • Localization in other languages / culture than English
  • API is compatible with existing add-ons.
  • Security precautions taken.

@ethindp ethindp marked this pull request as ready for review May 19, 2026 23:05
@ethindp ethindp requested a review from a team as a code owner May 19, 2026 23:05
@ethindp ethindp requested a review from SaschaCowley May 19, 2026 23:05
@seanbudd seanbudd added the blocked/needs-product-decision A product decision needs to be made. Decisions about NVDA UX or supported use-cases. label May 20, 2026
@seanbudd seanbudd requested review from seanbudd and removed request for SaschaCowley May 20, 2026 00:07
@seanbudd
Copy link
Copy Markdown
Member

seanbudd commented May 20, 2026

Closing for now.
Please open an issue first, per our contributing guidelines:

For anything other than minor bug fixes, ensure an issue has been filed and triaged. Please understand that we very likely will not accept non-trivial changes that are not discussed first.

@seanbudd seanbudd closed this May 20, 2026
@ethindp
Copy link
Copy Markdown
Author

ethindp commented May 20, 2026

@seanbudd I'm confused. Can you explain how this is a non-trivial change?

@ethindp
Copy link
Copy Markdown
Author

ethindp commented May 20, 2026

By this, I mean it doesn't break or affect anything, since it's just the controller client and creates a new interface.

@seanbudd
Copy link
Copy Markdown
Member

This is a new feature. For new features, we generally want some justification for why they should exist (e.g. user stories).

@ethindp
Copy link
Copy Markdown
Author

ethindp commented May 20, 2026

@seanbudd Sure, but it's a new feature that my TTS library, Prism, can take advantage of, and would also eliminate screen reader calibration being needed in games and other environments which need to know when the screen reader has finished speaking.

@seanbudd
Copy link
Copy Markdown
Member

Thanks - can you open a feature request or developer facing changes issue to document the problem, and serve as a place for discussion

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

blocked/needs-product-decision A product decision needs to be made. Decisions about NVDA UX or supported use-cases.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants