Skip to content

Re-enable audio ducking for proxied x86 speech synths#19672

Merged
seanbudd merged 1 commit into
masterfrom
reEnableX86Ducking
Feb 26, 2026
Merged

Re-enable audio ducking for proxied x86 speech synths#19672
seanbudd merged 1 commit into
masterfrom
reEnableX86Ducking

Conversation

@SaschaCowley

@SaschaCowley SaschaCowley commented Feb 23, 2026

Copy link
Copy Markdown
Member

Link to issue number:

Follow-up to #19665

Summary of the issue:

#19665 prevents audio ducking when using a proxied SAPI4 or SAPI 5 speech synth, as it does not work correctly on betas due to the synth outputting sound out of process. However, as alpha builds broker the audio from from the 32-bit host process and output it in process, audio ducking works correctly.

Description of user facing changes:

Audio ducking again works on alpha builds when using a SAPI 4 or 32-bit SAPI 5 synth.

Description of developer facing changes:

None

Description of development approach:

Reverted the changes to source/_bridge/components/proxies/synthDriver.py introduced in b0228fe9aa.

Testing strategy:

Built a self-signed launcher and installed NVDA. Switched to SAPI 4, played some music, and tested that all 3 ducking modes work as expected.

Known issues with pull request:

None known

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.

@SaschaCowley SaschaCowley marked this pull request as ready for review February 26, 2026 03:14
@SaschaCowley SaschaCowley requested a review from a team as a code owner February 26, 2026 03:14
@seanbudd seanbudd merged commit 5306000 into master Feb 26, 2026
43 checks passed
@seanbudd seanbudd deleted the reEnableX86Ducking branch February 26, 2026 05:16
@github-actions github-actions Bot added this to the 2026.2 milestone Feb 26, 2026
@seanbudd seanbudd added the conceptApproved Similar 'triaged' for issues, PR accepted in theory, implementation needs review. label Feb 26, 2026
michaelDCurran added a commit that referenced this pull request May 25, 2026
seanbudd pushed a commit that referenced this pull request May 25, 2026
…026.2 as it is not stable enough yet. (#20206)

Fixes #19667
Fixes #19819
Reverts #19672
Summary of the issue:

Experimental code was recently added to NVDA (after 2026.1) that caused the 32 bit synthDriver shim to send its audio back to NvDA for playing, rather than playing it directly in its own process. This was done to test / prepare for the time when add-ons would be running in an app container, and therefore probably would not have direct access to the audio device.
However, currently this code is still quite unstable, causing NVDA to freeze when rapidly changing the speech rate, or arrowing up and down in lists, when using sapi4 or 32 bit sapi5.
This instability is most likely a similar issue to what was fixed in pr #19609, where RPYC is handoing the return of a call on the wrong thread. But in this case, it is calls to/from nvwave in NVDA's process.
Description of user facing changes:
Description of developer facing changes:
Description of development approach:

    Simply instruct the synthDriver process not to install the nvwave proxy that brokers back to NvDA.
    Reverts Re-enable audio ducking for proxied x86 speech synths #19672 so that 32 bit synthDrivers suspend audioDucking while they are running, as audioDucking cnanot be supported without brokering audio.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

conceptApproved Similar 'triaged' for issues, PR accepted in theory, implementation needs review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants