aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/module.mk5
-rw-r--r--common/text-to-speech.cpp47
-rw-r--r--common/text-to-speech.h75
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