summaryrefslogtreecommitdiffstats
path: root/platform/linuxbsd/tts_linux.h
diff options
context:
space:
mode:
Diffstat (limited to 'platform/linuxbsd/tts_linux.h')
-rw-r--r--platform/linuxbsd/tts_linux.h20
1 files changed, 18 insertions, 2 deletions
diff --git a/platform/linuxbsd/tts_linux.h b/platform/linuxbsd/tts_linux.h
index 425654d975..ec68219689 100644
--- a/platform/linuxbsd/tts_linux.h
+++ b/platform/linuxbsd/tts_linux.h
@@ -34,14 +34,18 @@
#include "core/os/thread.h"
#include "core/os/thread_safe.h"
#include "core/string/ustring.h"
+#include "core/templates/hash_map.h"
#include "core/templates/list.h"
-#include "core/templates/rb_map.h"
#include "core/variant/array.h"
#include "servers/display_server.h"
+#ifdef SOWRAP_ENABLED
#include "speechd-so_wrap.h"
+#else
+#include <libspeechd.h>
+#endif
-class TTS_Linux {
+class TTS_Linux : public Object {
_THREAD_SAFE_CLASS_
List<DisplayServer::TTSUtterance> queue;
@@ -51,6 +55,13 @@ class TTS_Linux {
int last_msg_id = -1;
HashMap<int, int> ids;
+ struct VoiceInfo {
+ String language;
+ String variant;
+ };
+ bool voices_loaded = false;
+ HashMap<String, VoiceInfo> voices;
+
Thread init_thread;
static void speech_init_thread_func(void *p_userdata);
@@ -59,6 +70,11 @@ class TTS_Linux {
static TTS_Linux *singleton;
+protected:
+ void _load_voices();
+ void _speech_event(size_t p_msg_id, size_t p_client_id, int p_type);
+ void _speech_index_mark(size_t p_msg_id, size_t p_client_id, int p_type, const String &p_index_mark);
+
public:
static TTS_Linux *get_singleton();