summaryrefslogtreecommitdiff
path: root/rbutil/rbutilqt/base/ttsexes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'rbutil/rbutilqt/base/ttsexes.cpp')
-rw-r--r--rbutil/rbutilqt/base/ttsexes.cpp48
1 files changed, 32 insertions, 16 deletions
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
23TTSExes::TTSExes(QString name,QObject* parent) : TTSBase(parent) 24TTSExes::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
33TTSBase::Capabilities TTSExes::capabilities() 34TTSBase::Capabilities TTSExes::capabilities()
34{ 35{
35 return RunInParallel; 36 return m_capabilities;
36} 37}
37 38
38void TTSExes::generateSettings() 39void TTSExes::generateSettings()
@@ -46,9 +47,9 @@ void TTSExes::generateSettings()
46 47
47void TTSExes::saveSettings() 48void 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
57void TTSExes::loadSettings(void) 58void 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
65bool TTSExes::start(QString *errStr) 66bool 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
82TTSStatus TTSExes::voice(QString text,QString wavfile, QString *errStr) 82TTSStatus 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 }