nvda
bf3ba01b - Fix SAPI 4 driver (#17599)

Commit
359 days ago
Fix SAPI 4 driver (#17599) Fixes #17516 Summary of the issue: After the move to exclusively Windows core audio APIs, the SAPI4 driver stopped working. Description of user facing changes The SAPI4 driver works again. A warning is shown the first time the user uses SAPI4 informing them that it is deprecated. Description of development approach Implemented a function to translate between MMDevice Endpoint IDs and WaveOut device IDs, based on <https://learn.microsoft.com/en-gb/windows/win32/coreaudio/device-roles-for-legacy-windows-multimedia-applications>. Added a config key, `speech.hasSapi4WarningBeenShown`, which defaults to False. Added a synthChanged callback that shows a dialog when the synth is set to SAPI4 if this config key is False and this is not a fallback synthesizer. Testing strategy: Ran NVDA, from source and installed, and on the user desktop, in secure mode, and on secure desktops, and used it with SAPI4. Changed the audio output device to ensure audio was routed as expected. Known issues with pull request: When first updating to a version with this PR merged, if the user uses SAPI4 as their primary speech synth, they will be warned about its deprecation in the launcher and when they first start the newly updated NVDA. This is unavoidable as we don't save config from the launcher. The dialog is only shown once per config profile, so may be missed by some users. Other options I have considered include: * Making this a nag dialog that appears, say, once a week or once a month. * Also making a dialog appear whenever the user manually sets their synth to SAPI4. * Adding a new dialog in 2025.4 (or the last release before 2026.1) that warns users that this will be the last release to support SAPI4. * Adding a dialog when updating to 2026.1 that warns users that they will no longer be able to use SAPI4. * Adding a Windows toast notification that appears every time NVDA starts with SAPI4 as the synth. The warning dialog is shown after SAPI4 is loaded. In the instance that the user is already using SAPI4, this is correct behaviour. In the case of switching to SAPI4, perhaps a dialog should appear before we terminate the current synth and initialise SAPI4.
Author
Parents
Loading