aboutsummaryrefslogtreecommitdiff
path: root/common/text-to-speech.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'common/text-to-speech.cpp')
-rw-r--r--common/text-to-speech.cpp35
1 files changed, 34 insertions, 1 deletions
diff --git a/common/text-to-speech.cpp b/common/text-to-speech.cpp
index 1e2456d8a6..459d4706db 100644
--- a/common/text-to-speech.cpp
+++ b/common/text-to-speech.cpp
@@ -30,7 +30,8 @@ TextToSpeechManager::TextToSpeechManager() {
_ttsState->_pitch = 0;
_ttsState->_volume = 0;
_ttsState->_rate = 0;
- _ttsState->_activeVoice = nullptr;
+ _ttsState->_activeVoice = 0;
+ _ttsState->_language = "en";
_ttsState->_next = nullptr;
}
@@ -46,5 +47,37 @@ TextToSpeechManager::~TextToSpeechManager() {
}
}
+void TextToSpeechManager::pushState() {
+ TTSState *newState = new TTSState;
+ newState->_pitch = _ttsState->_pitch;
+ newState->_volume = _ttsState->_volume;
+ newState->_rate = _ttsState->_rate;
+ newState->_activeVoice = _ttsState->_activeVoice;
+ newState->_language = _ttsState->_language;
+ newState->_next = _ttsState;
+ _ttsState = newState;
+ updateVoices();
+}
+
+bool TextToSpeechManager::popState() {
+ if (_ttsState->_next == nullptr)
+ return true;
+
+ for (TTSVoice *i = _ttsState->_availaibleVoices.begin(); i < _ttsState->_availaibleVoices.end(); i++) {
+ free(i->_data);
+ }
+
+ TTSState *oldState = _ttsState;
+ _ttsState = _ttsState->_next;
+
+ delete oldState;
+
+ setLanguage(_ttsState->_language);
+ setPitch(_ttsState->_pitch);
+ setVolume(_ttsState->_volume);
+ setRate(_ttsState->_rate);
+ return false;
+}
+
}
#endif