diff options
Diffstat (limited to 'rbutil/rbutilqt')
-rw-r--r-- | rbutil/rbutilqt/base/ttsbase.cpp | 17 | ||||
-rw-r--r-- | rbutil/rbutilqt/base/ttscarbon.h | 4 | ||||
-rw-r--r-- | rbutil/rbutilqt/base/ttsespeak.h | 42 | ||||
-rw-r--r-- | rbutil/rbutilqt/base/ttsexes.cpp | 48 | ||||
-rw-r--r-- | rbutil/rbutilqt/base/ttsexes.h | 10 | ||||
-rw-r--r-- | rbutil/rbutilqt/base/ttsflite.h | 43 | ||||
-rw-r--r-- | rbutil/rbutilqt/base/ttsswift.h | 40 | ||||
-rw-r--r-- | rbutil/rbutilqt/rbutilqt.pri | 3 |
8 files changed, 182 insertions, 25 deletions
diff --git a/rbutil/rbutilqt/base/ttsbase.cpp b/rbutil/rbutilqt/base/ttsbase.cpp index ae2a78f606..3b8384f534 100644 --- a/rbutil/rbutilqt/base/ttsbase.cpp +++ b/rbutil/rbutilqt/base/ttsbase.cpp | |||
@@ -16,6 +16,7 @@ | |||
16 | * | 16 | * |
17 | ****************************************************************************/ | 17 | ****************************************************************************/ |
18 | 18 | ||
19 | #include <QtCore> | ||
19 | #include "ttsbase.h" | 20 | #include "ttsbase.h" |
20 | 21 | ||
21 | #include "ttsfestival.h" | 22 | #include "ttsfestival.h" |
@@ -23,6 +24,9 @@ | |||
23 | #include "ttssapi4.h" | 24 | #include "ttssapi4.h" |
24 | #include "ttsmssp.h" | 25 | #include "ttsmssp.h" |
25 | #include "ttsexes.h" | 26 | #include "ttsexes.h" |
27 | #include "ttsespeak.h" | ||
28 | #include "ttsflite.h" | ||
29 | #include "ttsswift.h" | ||
26 | #if defined(Q_OS_MACX) | 30 | #if defined(Q_OS_MACX) |
27 | #include "ttscarbon.h" | 31 | #include "ttscarbon.h" |
28 | #endif | 32 | #endif |
@@ -32,7 +36,6 @@ QMap<QString,QString> TTSBase::ttsList; | |||
32 | 36 | ||
33 | TTSBase::TTSBase(QObject* parent): EncTtsSettingInterface(parent) | 37 | TTSBase::TTSBase(QObject* parent): EncTtsSettingInterface(parent) |
34 | { | 38 | { |
35 | |||
36 | } | 39 | } |
37 | 40 | ||
38 | // static functions | 41 | // static functions |
@@ -80,9 +83,15 @@ TTSBase* TTSBase::getTTS(QObject* parent,QString ttsName) | |||
80 | tts = new TTSCarbon(parent); | 83 | tts = new TTSCarbon(parent); |
81 | else | 84 | else |
82 | #endif | 85 | #endif |
83 | // fix for OS other than WIN or LINUX | 86 | if(ttsName == "espeak") |
84 | if (true) | 87 | tts = new TTSEspeak(parent); |
85 | tts = new TTSExes(ttsName, parent); | 88 | else if(ttsName == "flite") |
89 | tts = new TTSFlite(parent); | ||
90 | else if(ttsName == "swift") | ||
91 | tts = new TTSSwift(parent); | ||
92 | else if(ttsName == "user") | ||
93 | tts = new TTSExes(parent); | ||
94 | |||
86 | return tts; | 95 | return tts; |
87 | } | 96 | } |
88 | 97 | ||
diff --git a/rbutil/rbutilqt/base/ttscarbon.h b/rbutil/rbutilqt/base/ttscarbon.h index 4d7cef24d8..2e9e84aa7d 100644 --- a/rbutil/rbutilqt/base/ttscarbon.h +++ b/rbutil/rbutilqt/base/ttscarbon.h | |||
@@ -39,7 +39,7 @@ class TTSCarbon : public TTSBase | |||
39 | TTSCarbon(QObject *parent = NULL); | 39 | TTSCarbon(QObject *parent = NULL); |
40 | 40 | ||
41 | //! Child class should generate a clip | 41 | //! Child class should generate a clip |
42 | TTSStatus voice(QString text,QString wavfile, QString* errStr); | 42 | TTSStatus voice(QString text, QString wavfile, QString* errStr); |
43 | //! Child class should do startup | 43 | //! Child class should do startup |
44 | bool start(QString *errStr); | 44 | bool start(QString *errStr); |
45 | //! child class should stop | 45 | //! child class should stop |
@@ -51,7 +51,7 @@ class TTSCarbon : public TTSBase | |||
51 | bool configOk(); | 51 | bool configOk(); |
52 | //! Child class should generate and insertSetting(..) its settings | 52 | //! Child class should generate and insertSetting(..) its settings |
53 | void generateSettings(); | 53 | void generateSettings(); |
54 | //! Chlid class should commit the Settings to permanent storage | 54 | //! Child class should commit the Settings to permanent storage |
55 | void saveSettings(); | 55 | void saveSettings(); |
56 | 56 | ||
57 | Capabilities capabilities(); | 57 | Capabilities capabilities(); |
diff --git a/rbutil/rbutilqt/base/ttsespeak.h b/rbutil/rbutilqt/base/ttsespeak.h new file mode 100644 index 0000000000..85d126e94f --- /dev/null +++ b/rbutil/rbutilqt/base/ttsespeak.h | |||
@@ -0,0 +1,42 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * | ||
9 | * Copyright (C) 2012 by Dominik Riebeling | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or | ||
12 | * modify it under the terms of the GNU General Public License | ||
13 | * as published by the Free Software Foundation; either version 2 | ||
14 | * of the License, or (at your option) any later version. | ||
15 | * | ||
16 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
17 | * KIND, either express or implied. | ||
18 | * | ||
19 | ****************************************************************************/ | ||
20 | |||
21 | #ifndef TTSESPEAK_H | ||
22 | #define TTSESPEAK_H | ||
23 | |||
24 | #include <QtCore> | ||
25 | #include "ttsexes.h" | ||
26 | |||
27 | class TTSEspeak : public TTSExes | ||
28 | { | ||
29 | Q_OBJECT | ||
30 | public: | ||
31 | TTSEspeak(QObject* parent=NULL) : TTSExes(parent) | ||
32 | { | ||
33 | m_name = "espeak"; | ||
34 | |||
35 | /* default to espeak */ | ||
36 | m_TTSTemplate = "\"%exe\" %options -w \"%wavfile\" -- \"%text\""; | ||
37 | m_TTSSpeakTemplate = "\"%exe\" %options -- \"%text\""; | ||
38 | m_capabilities = TTSBase::CanSpeak; | ||
39 | } | ||
40 | }; | ||
41 | |||
42 | #endif | ||
diff --git a/rbutil/rbutilqt/base/ttsexes.cpp b/rbutil/rbutilqt/base/ttsexes.cpp index 5d06d6c1e6..348db103bc 100644 --- a/rbutil/rbutilqt/base/ttsexes.cpp +++ b/rbutil/rbutilqt/base/ttsexes.cpp | |||
@@ -16,23 +16,24 @@ | |||
16 | * | 16 | * |
17 | ****************************************************************************/ | 17 | ****************************************************************************/ |
18 | 18 | ||
19 | #include <QtCore> | ||
19 | #include "ttsexes.h" | 20 | #include "ttsexes.h" |
20 | #include "utils.h" | 21 | #include "utils.h" |
21 | #include "rbsettings.h" | 22 | #include "rbsettings.h" |
22 | 23 | ||
23 | TTSExes::TTSExes(QString name,QObject* parent) : TTSBase(parent) | 24 | TTSExes::TTSExes(QObject* parent) : TTSBase(parent) |
24 | { | 25 | { |
25 | m_name = name; | 26 | /* default to espeak */ |
26 | 27 | m_name = "espeak"; | |
27 | m_TemplateMap["espeak"] = "\"%exe\" %options -w \"%wavfile\" -- \"%text\""; | 28 | m_capabilities = TTSBase::CanSpeak; |
28 | m_TemplateMap["flite"] = "\"%exe\" %options -o \"%wavfile\" -t \"%text\""; | 29 | m_TTSTemplate = "\"%exe\" %options -w \"%wavfile\" -- \"%text\""; |
29 | m_TemplateMap["swift"] = "\"%exe\" %options -o \"%wavfile\" -- \"%text\""; | 30 | m_TTSSpeakTemplate = "\"%exe\" %options -- \"%text\""; |
30 | |||
31 | } | 31 | } |
32 | 32 | ||
33 | |||
33 | TTSBase::Capabilities TTSExes::capabilities() | 34 | TTSBase::Capabilities TTSExes::capabilities() |
34 | { | 35 | { |
35 | return RunInParallel; | 36 | return m_capabilities; |
36 | } | 37 | } |
37 | 38 | ||
38 | void TTSExes::generateSettings() | 39 | void TTSExes::generateSettings() |
@@ -46,9 +47,9 @@ void TTSExes::generateSettings() | |||
46 | 47 | ||
47 | void TTSExes::saveSettings() | 48 | void TTSExes::saveSettings() |
48 | { | 49 | { |
49 | RbSettings::setSubValue(m_name,RbSettings::TtsPath, | 50 | RbSettings::setSubValue(m_name, RbSettings::TtsPath, |
50 | getSetting(eEXEPATH)->current().toString()); | 51 | getSetting(eEXEPATH)->current().toString()); |
51 | RbSettings::setSubValue(m_name,RbSettings::TtsOptions, | 52 | RbSettings::setSubValue(m_name, RbSettings::TtsOptions, |
52 | getSetting(eOPTIONS)->current().toString()); | 53 | getSetting(eOPTIONS)->current().toString()); |
53 | RbSettings::sync(); | 54 | RbSettings::sync(); |
54 | } | 55 | } |
@@ -56,16 +57,15 @@ void TTSExes::saveSettings() | |||
56 | 57 | ||
57 | void TTSExes::loadSettings(void) | 58 | void TTSExes::loadSettings(void) |
58 | { | 59 | { |
59 | m_TTSexec = RbSettings::subValue(m_name,RbSettings::TtsPath).toString(); | 60 | m_TTSexec = RbSettings::subValue(m_name, RbSettings::TtsPath).toString(); |
60 | if(m_TTSexec.isEmpty()) m_TTSexec = Utils::findExecutable(m_name); | 61 | if(m_TTSexec.isEmpty()) m_TTSexec = Utils::findExecutable(m_name); |
61 | m_TTSOpts = RbSettings::subValue(m_name,RbSettings::TtsOptions).toString(); | 62 | m_TTSOpts = RbSettings::subValue(m_name, RbSettings::TtsOptions).toString(); |
62 | } | 63 | } |
63 | 64 | ||
64 | 65 | ||
65 | bool TTSExes::start(QString *errStr) | 66 | bool TTSExes::start(QString *errStr) |
66 | { | 67 | { |
67 | loadSettings(); | 68 | loadSettings(); |
68 | m_TTSTemplate = m_TemplateMap.value(m_name); | ||
69 | 69 | ||
70 | QFileInfo tts(m_TTSexec); | 70 | QFileInfo tts(m_TTSexec); |
71 | if(tts.exists()) | 71 | if(tts.exists()) |
@@ -79,10 +79,26 @@ bool TTSExes::start(QString *errStr) | |||
79 | } | 79 | } |
80 | } | 80 | } |
81 | 81 | ||
82 | TTSStatus TTSExes::voice(QString text,QString wavfile, QString *errStr) | 82 | TTSStatus TTSExes::voice(QString text, QString wavfile, QString *errStr) |
83 | { | 83 | { |
84 | (void) errStr; | 84 | (void) errStr; |
85 | QString execstring = m_TTSTemplate; | 85 | QString execstring; |
86 | if(wavfile.isEmpty() && m_capabilities & TTSBase::CanSpeak) { | ||
87 | if(m_TTSSpeakTemplate.isEmpty()) { | ||
88 | qDebug() << "[TTSExes] internal error: TTS announces CanSpeak " | ||
89 | "but template empty!"; | ||
90 | return FatalError; | ||
91 | } | ||
92 | execstring = m_TTSSpeakTemplate; | ||
93 | } | ||
94 | else if(wavfile.isEmpty()) { | ||
95 | qDebug() << "[TTSExes] no output file passed to voice() " | ||
96 | "but TTS can't speak directly."; | ||
97 | return FatalError; | ||
98 | } | ||
99 | else { | ||
100 | execstring = m_TTSTemplate; | ||
101 | } | ||
86 | 102 | ||
87 | execstring.replace("%exe",m_TTSexec); | 103 | execstring.replace("%exe",m_TTSexec); |
88 | execstring.replace("%options",m_TTSOpts); | 104 | execstring.replace("%options",m_TTSOpts); |
@@ -91,7 +107,7 @@ TTSStatus TTSExes::voice(QString text,QString wavfile, QString *errStr) | |||
91 | 107 | ||
92 | QProcess::execute(execstring); | 108 | QProcess::execute(execstring); |
93 | 109 | ||
94 | if(!QFileInfo(wavfile).isFile()) { | 110 | if(!wavfile.isEmpty() && !QFileInfo(wavfile).isFile()) { |
95 | qDebug() << "[TTSExes] output file does not exist:" << wavfile; | 111 | qDebug() << "[TTSExes] output file does not exist:" << wavfile; |
96 | return FatalError; | 112 | return FatalError; |
97 | } | 113 | } |
diff --git a/rbutil/rbutilqt/base/ttsexes.h b/rbutil/rbutilqt/base/ttsexes.h index 6f9152ef4b..03252cdc92 100644 --- a/rbutil/rbutilqt/base/ttsexes.h +++ b/rbutil/rbutilqt/base/ttsexes.h | |||
@@ -21,6 +21,7 @@ | |||
21 | #ifndef TTSEXES_H | 21 | #ifndef TTSEXES_H |
22 | #define TTSEXES_H | 22 | #define TTSEXES_H |
23 | 23 | ||
24 | #include <QtCore> | ||
24 | #include "ttsbase.h" | 25 | #include "ttsbase.h" |
25 | 26 | ||
26 | class TTSExes : public TTSBase | 27 | class TTSExes : public TTSBase |
@@ -33,7 +34,7 @@ class TTSExes : public TTSBase | |||
33 | 34 | ||
34 | Q_OBJECT | 35 | Q_OBJECT |
35 | public: | 36 | public: |
36 | TTSExes(QString name,QObject* parent=NULL); | 37 | TTSExes(QObject* parent=NULL); |
37 | TTSStatus voice(QString text, QString wavfile, QString *errStr); | 38 | TTSStatus voice(QString text, QString wavfile, QString *errStr); |
38 | bool start(QString *errStr); | 39 | bool start(QString *errStr); |
39 | bool stop() {return true;} | 40 | bool stop() {return true;} |
@@ -47,11 +48,14 @@ class TTSExes : public TTSBase | |||
47 | 48 | ||
48 | private: | 49 | private: |
49 | void loadSettings(void); | 50 | void loadSettings(void); |
51 | |||
52 | protected: | ||
53 | QString m_TTSTemplate; | ||
54 | QString m_TTSSpeakTemplate; | ||
50 | QString m_name; | 55 | QString m_name; |
51 | QString m_TTSexec; | 56 | QString m_TTSexec; |
52 | QString m_TTSOpts; | 57 | QString m_TTSOpts; |
53 | QString m_TTSTemplate; | 58 | TTSBase::Capabilities m_capabilities; |
54 | QMap<QString,QString> m_TemplateMap; | ||
55 | }; | 59 | }; |
56 | 60 | ||
57 | #endif | 61 | #endif |
diff --git a/rbutil/rbutilqt/base/ttsflite.h b/rbutil/rbutilqt/base/ttsflite.h new file mode 100644 index 0000000000..1d9021108e --- /dev/null +++ b/rbutil/rbutilqt/base/ttsflite.h | |||
@@ -0,0 +1,43 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * | ||
9 | * Copyright (C) 2012 by Dominik Riebeling | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or | ||
12 | * modify it under the terms of the GNU General Public License | ||
13 | * as published by the Free Software Foundation; either version 2 | ||
14 | * of the License, or (at your option) any later version. | ||
15 | * | ||
16 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
17 | * KIND, either express or implied. | ||
18 | * | ||
19 | ****************************************************************************/ | ||
20 | |||
21 | #ifndef TTSFLITE_H | ||
22 | #define TTSFLITE_H | ||
23 | |||
24 | #include <QtCore> | ||
25 | #include "ttsexes.h" | ||
26 | |||
27 | class TTSFlite : public TTSExes | ||
28 | { | ||
29 | Q_OBJECT | ||
30 | public: | ||
31 | TTSFlite(QObject* parent=NULL) : TTSExes(parent) | ||
32 | { | ||
33 | m_name = "flite"; | ||
34 | |||
35 | /* default to espeak */ | ||
36 | m_TTSTemplate = "\"%exe\" %options -o \"%wavfile\" -t \"%text\""; | ||
37 | m_TTSSpeakTemplate = ""; | ||
38 | m_capabilities = TTSBase::None; | ||
39 | |||
40 | } | ||
41 | }; | ||
42 | |||
43 | #endif | ||
diff --git a/rbutil/rbutilqt/base/ttsswift.h b/rbutil/rbutilqt/base/ttsswift.h new file mode 100644 index 0000000000..9d678a6d92 --- /dev/null +++ b/rbutil/rbutilqt/base/ttsswift.h | |||
@@ -0,0 +1,40 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * | ||
9 | * Copyright (C) 2012 by Dominik Riebeling | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or | ||
12 | * modify it under the terms of the GNU General Public License | ||
13 | * as published by the Free Software Foundation; either version 2 | ||
14 | * of the License, or (at your option) any later version. | ||
15 | * | ||
16 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
17 | * KIND, either express or implied. | ||
18 | * | ||
19 | ****************************************************************************/ | ||
20 | |||
21 | #ifndef TTSSWIFT_H | ||
22 | #define TTSSWIFT_H | ||
23 | |||
24 | #include <QtCore> | ||
25 | #include "ttsexes.h" | ||
26 | |||
27 | class TTSSwift : public TTSExes | ||
28 | { | ||
29 | Q_OBJECT | ||
30 | public: | ||
31 | TTSSwift(QObject* parent=NULL) : TTSExes(parent) | ||
32 | { | ||
33 | m_name = "swift"; | ||
34 | m_TTSTemplate = "\"%exe\" %options -o \"%wavfile\" -- \"%text\""; | ||
35 | m_TTSSpeakTemplate = ""; | ||
36 | m_capabilities = TTSBase::None; | ||
37 | } | ||
38 | }; | ||
39 | |||
40 | #endif | ||
diff --git a/rbutil/rbutilqt/rbutilqt.pri b/rbutil/rbutilqt/rbutilqt.pri index 5ee1f7b9d2..13f7ebc042 100644 --- a/rbutil/rbutilqt/rbutilqt.pri +++ b/rbutil/rbutilqt/rbutilqt.pri | |||
@@ -111,7 +111,10 @@ HEADERS += \ | |||
111 | base/encttssettings.h \ | 111 | base/encttssettings.h \ |
112 | base/ttsbase.h \ | 112 | base/ttsbase.h \ |
113 | base/ttsexes.h \ | 113 | base/ttsexes.h \ |
114 | base/ttsespeak.h \ | ||
115 | base/ttsflite.h \ | ||
114 | base/ttsfestival.h \ | 116 | base/ttsfestival.h \ |
117 | base/ttsswift.h \ | ||
115 | base/ttssapi.h \ | 118 | base/ttssapi.h \ |
116 | base/ttssapi4.h \ | 119 | base/ttssapi4.h \ |
117 | base/ttsmssp.h \ | 120 | base/ttsmssp.h \ |