aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/text-to-speech/windows/windows-text-to-speech.cpp1
-rw-r--r--common/text-to-speech.cpp6
2 files changed, 6 insertions, 1 deletions
diff --git a/backends/text-to-speech/windows/windows-text-to-speech.cpp b/backends/text-to-speech/windows/windows-text-to-speech.cpp
index 58389e5141..d102300028 100644
--- a/backends/text-to-speech/windows/windows-text-to-speech.cpp
+++ b/backends/text-to-speech/windows/windows-text-to-speech.cpp
@@ -181,6 +181,7 @@ void WindowsTextToSpeechManager::setVoice(unsigned index) {
if(_speechState == BROKEN || _speechState == NO_VOICE)
return;
_voice->SetVoice((ISpObjectToken *) _ttsState->_availableVoices[index].getData());
+ _ttsState->_activeVoice = index;
}
void WindowsTextToSpeechManager::setRate(int rate) {
diff --git a/common/text-to-speech.cpp b/common/text-to-speech.cpp
index 9289cba214..f9dc4c69aa 100644
--- a/common/text-to-speech.cpp
+++ b/common/text-to-speech.cpp
@@ -98,6 +98,7 @@ TextToSpeechManager::~TextToSpeechManager() {
}
void TextToSpeechManager::pushState() {
+ stop();
TTSState *newState = new TTSState;
newState->_pitch = _ttsState->_pitch;
newState->_volume = _ttsState->_volume;
@@ -110,6 +111,7 @@ void TextToSpeechManager::pushState() {
}
bool TextToSpeechManager::popState() {
+ stop();
if (_ttsState->_next == nullptr)
return true;
@@ -118,11 +120,13 @@ bool TextToSpeechManager::popState() {
delete oldState;
+ // The voice has to be saved, because some backends change it when changing language
+ int voice = _ttsState->_activeVoice;
setLanguage(_ttsState->_language);
setPitch(_ttsState->_pitch);
setVolume(_ttsState->_volume);
setRate(_ttsState->_rate);
- setVoice(_ttsState->_activeVoice);
+ setVoice(voice);
return false;
}