diff options
Diffstat (limited to 'common/text-to-speech.cpp')
-rw-r--r-- | common/text-to-speech.cpp | 35 |
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 |