Save and restore speech rate in espeak (#19661)
Fixes #19660
Fixes #10214
Summary of the issue:
When using eSpeak with the rate set to any value less than 100% in NVDA's math settings, the original speech rate was not being restored after reading math content.
Description of user facing changes:
After navigating away from math content while using eSpeak, the original (non-math) speech rate is restored.
Description of developer facing changes:
A new attribute _rate was added to the SynthDriver class in synthDrivers/espeak.py. This value is updated whenever _set_rate is called (but not when eSpeak's rate is changed through SSML), so it will always reflect the original speech rate before applying the possibly slower math rate. In the speak method, a call to _set_rate(_rate) was added so that the original rate is restored.