diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/module.mk | 5 | ||||
-rw-r--r-- | common/text-to-speech.cpp | 47 | ||||
-rw-r--r-- | common/text-to-speech.h | 75 |
3 files changed, 125 insertions, 2 deletions
diff --git a/common/module.mk b/common/module.mk index 46e32d72d9..56ed05fe72 100644 --- a/common/module.mk +++ b/common/module.mk @@ -99,5 +99,10 @@ MODULE_OBJS += \ lua/scummvm_file.o endif +ifdef USE_TTS +MODULE_OBJS += \ + text-to-speech.o +endif + # Include common rules include $(srcdir)/rules.mk diff --git a/common/text-to-speech.cpp b/common/text-to-speech.cpp new file mode 100644 index 0000000000..d1b9539f93 --- /dev/null +++ b/common/text-to-speech.cpp @@ -0,0 +1,47 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + + +#include "common/text-to-speech.h" +#if defined(USE_TTS) + +namespace Common { +TextToSpeechManager::TextToSpeechManager() { + _ttsState = new TTSState; + _ttsState->_pitch = 0; + _ttsState->_volume = 0; + _ttsState->_rate = 0; + _ttsState->_activeVoice = nullptr; + _ttsState->_next = nullptr; +} + +TextToSpeechManager::~TextToSpeechManager() { + TTSState *tmp = _ttsState; + while (tmp != nullptr) { + tmp = _ttsState->_next; + delete _ttsState; + _ttsState = tmp; + } +} + +} +#endif diff --git a/common/text-to-speech.h b/common/text-to-speech.h index e95050e3f5..62cc5e878b 100644 --- a/common/text-to-speech.h +++ b/common/text-to-speech.h @@ -23,19 +23,90 @@ #ifndef BACKENDS_TEXT_TO_SPEECH_ABSTRACT_H #define BACKENDS_TEXT_TO_SPEECH_ABSTRACT_H +#include "common/scummsys.h" + #if defined(USE_TTS) +#include "common/array.h" +#include "common/debug.h" namespace Common { +class TTSVoice { + friend class TextToSpeechManager; + + public: + enum Gender { + MALE, + FEMALE, + UNKNOWN + }; + + public: + TTSVoice() + : _gender(UNKNOWN) + , _data(nullptr) {} + TTSVoice(Gender gender, void *data) + : _gender(gender) + , _data(data) {} + ~TTSVoice() { debug("%d", * (int *)_data); if (_data != nullptr) free(_data); } + Gender getGender() { return _gender; }; + void setGender(Gender gender) { _gender = gender; }; + void setData(void *data) { _data = data; }; + void *getData() { return _data; }; + + protected: + Gender _gender; + void *_data; +}; + +struct TTSState { + int _rate; + int _pitch; + int _volume; + String _language; + TTSVoice *_activeVoice; + Array<TTSVoice> _availaibleVoices; + TTSState *_next; +}; + /** * The TextToSpeechManager allows speech synthesis. * */ class TextToSpeechManager { public: - TextToSpeechManager() {} - virtual ~TextToSpeechManager() {} + TextToSpeechManager(); + virtual ~TextToSpeechManager(); + + virtual bool say(String str) { return false; } + + virtual bool stop() { return false; } + virtual bool pause() { return false; } + virtual bool resume() { return false; } + + virtual bool isSpeaking() { return false; } + + virtual void setVoice(TTSVoice *voice) {} + TTSVoice getVoice() { return *(_ttsState->_activeVoice); } + + virtual void setRate(int rate) {} + int getRate() { return _ttsState->_rate; } + + virtual void setPitch(int pitch) {} + int getPitch() { return _ttsState->_pitch; } + + virtual void setVolume(int volume) {} + int getVolume() { return _ttsState->_volume; } + + virtual void setLanguage(String language) {} + String getLanguage() { return _ttsState->_language; } + + Array<TTSVoice> getVoicesArray() { return _ttsState->_availaibleVoices; } + +protected: + TTSState *_ttsState; + virtual void updateVoices() {}; }; } // End of namespace Common |