summaryrefslogtreecommitdiff
path: root/rbutil/rbutilqt/talkfile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'rbutil/rbutilqt/talkfile.cpp')
-rw-r--r--rbutil/rbutilqt/talkfile.cpp110
1 files changed, 81 insertions, 29 deletions
diff --git a/rbutil/rbutilqt/talkfile.cpp b/rbutil/rbutilqt/talkfile.cpp
index 2096c8150b..d3e3a24781 100644
--- a/rbutil/rbutilqt/talkfile.cpp
+++ b/rbutil/rbutilqt/talkfile.cpp
@@ -38,26 +38,24 @@ bool TalkFileCreator::initEncoder()
38 } 38 }
39} 39}
40 40
41bool TalkFileCreator::initTTS()
42{
43 QFileInfo tts(m_TTSexec);
44
45 if(tts.exists())
46 {
47 return true;
48 }
49 else
50 {
51 return false;
52 }
53}
54 41
55bool TalkFileCreator::createTalkFiles(ProgressloggerInterface* logger) 42bool TalkFileCreator::createTalkFiles(ProgressloggerInterface* logger)
56{ 43{
57 m_abort = false; 44 m_abort = false;
58 m_logger = logger; 45 m_logger = logger;
59 m_logger->addItem("Starting Talkfile generation",LOGINFO); 46 m_logger->addItem("Starting Talkfile generation",LOGINFO);
60 if(!initTTS()) 47
48 if(m_curTTS == "sapi")
49 m_tts = new TTSSapi();
50 else
51 m_tts = new TTSExes();
52
53 m_tts->setTTSexe(m_TTSexec);
54 m_tts->setTTsOpts(m_TTSOpts);
55 m_tts->setTTsLanguage(m_TTSLanguage);
56 m_tts->setTTsTemplate(m_curTTSTemplate);
57
58 if(!m_tts->start())
61 { 59 {
62 m_logger->addItem("Init of TTS engine failed",LOGERROR); 60 m_logger->addItem("Init of TTS engine failed",LOGERROR);
63 return false; 61 return false;
@@ -65,6 +63,7 @@ bool TalkFileCreator::createTalkFiles(ProgressloggerInterface* logger)
65 if(!initEncoder()) 63 if(!initEncoder())
66 { 64 {
67 m_logger->addItem("Init of encoder failed",LOGERROR); 65 m_logger->addItem("Init of encoder failed",LOGERROR);
66 m_tts->stop();
68 return false; 67 return false;
69 } 68 }
70 QApplication::processEvents(); 69 QApplication::processEvents();
@@ -80,6 +79,7 @@ bool TalkFileCreator::createTalkFiles(ProgressloggerInterface* logger)
80 if(m_abort) 79 if(m_abort)
81 { 80 {
82 m_logger->addItem("Talkfile creation aborted",LOGERROR); 81 m_logger->addItem("Talkfile creation aborted",LOGERROR);
82 m_tts->stop();
83 return false; 83 return false;
84 } 84 }
85 85
@@ -117,10 +117,11 @@ bool TalkFileCreator::createTalkFiles(ProgressloggerInterface* logger)
117 if(!wavfilenameInf.exists() || m_overwriteWav) 117 if(!wavfilenameInf.exists() || m_overwriteWav)
118 { 118 {
119 m_logger->addItem("Voicing of " + toSpeak,LOGINFO); 119 m_logger->addItem("Voicing of " + toSpeak,LOGINFO);
120 if(!voice(toSpeak,wavfilename)) 120 if(!m_tts->voice(toSpeak,wavfilename))
121 { 121 {
122 m_logger->addItem("Voicing of " + toSpeak + " failed",LOGERROR); 122 m_logger->addItem("Voicing of " + toSpeak + " failed",LOGERROR);
123 m_logger->abort(); 123 m_logger->abort();
124 m_tts->stop();
124 return false; 125 return false;
125 } 126 }
126 } 127 }
@@ -129,6 +130,7 @@ bool TalkFileCreator::createTalkFiles(ProgressloggerInterface* logger)
129 { 130 {
130 m_logger->addItem("Encoding of " + wavfilename + " failed",LOGERROR); 131 m_logger->addItem("Encoding of " + wavfilename + " failed",LOGERROR);
131 m_logger->abort(); 132 m_logger->abort();
133 m_tts->stop();
132 return false; 134 return false;
133 } 135 }
134 } 136 }
@@ -148,6 +150,7 @@ bool TalkFileCreator::createTalkFiles(ProgressloggerInterface* logger)
148 } 150 }
149 151
150 installlog.endGroup(); 152 installlog.endGroup();
153 m_tts->stop();
151 m_logger->addItem("Finished creating Talkfiles",LOGOK); 154 m_logger->addItem("Finished creating Talkfiles",LOGOK);
152 m_logger->setProgressMax(1); 155 m_logger->setProgressMax(1);
153 m_logger->setProgressValue(1); 156 m_logger->setProgressValue(1);
@@ -162,33 +165,82 @@ void TalkFileCreator::abort()
162 m_abort = true; 165 m_abort = true;
163} 166}
164 167
165bool TalkFileCreator::voice(QString text,QString wavfile) 168bool TalkFileCreator::encode(QString input,QString output)
166{ 169{
170 qDebug() << "encoding..";
171 QString execstring = m_curEncTemplate;
167 172
168 QString execstring = m_curTTSTemplate; 173 execstring.replace("%exe",m_EncExec);
174 execstring.replace("%options",m_EncOpts);
175 execstring.replace("%input",input);
176 execstring.replace("%output",output);
177 qDebug() << execstring;
178 QProcess::execute(execstring);
179 return true;
180
181}
169 182
183bool TTSSapi::start()
184{
185 QFileInfo tts(m_TTSexec);
186 if(!tts.exists())
187 return false;
188
189 // create the voice process
190 QString execstring = m_TTSTemplate;
170 execstring.replace("%exe",m_TTSexec); 191 execstring.replace("%exe",m_TTSexec);
171 execstring.replace("%options",m_TTSOpts); 192 execstring.replace("%options",m_TTSOpts);
172 execstring.replace("%wavfile",wavfile); 193 qDebug() << "init" << execstring;
173 execstring.replace("%text",text); 194 voicescript = new QProcess(NULL);
195 voicescript->start(execstring);
196 if(!voicescript->waitForStarted())
197 return false;
198 return true;
199}
174 200
175 QProcess::execute(execstring); 201bool TTSSapi::voice(QString text,QString wavfile)
202{
203 QString query = "SPEAK\t"+wavfile+"\t"+text+"\r\n";
204 qDebug() << "voicing" << query;
205 voicescript->write(query.toLocal8Bit());
206 voicescript->write("SYNC\tbla\r\n");
207 voicescript->waitForReadyRead();
176 return true; 208 return true;
209}
177 210
211bool TTSSapi::stop()
212{
213 QString query = "QUIT\r\n";
214 voicescript->write(query.toLocal8Bit());
215 voicescript->waitForFinished();
216 delete voicescript;
217 return true;
178} 218}
179 219
180bool TalkFileCreator::encode(QString input,QString output) 220bool TTSExes::start()
181{ 221{
182 QString execstring = m_curEncTemplate; 222 QFileInfo tts(m_TTSexec);
223 qDebug() << "ttsexe init";
224 if(tts.exists())
225 {
226 return true;
227 }
228 else
229 {
230 return false;
231 }
232}
183 233
184 execstring.replace("%exe",m_EncExec); 234bool TTSExes::voice(QString text,QString wavfile)
185 execstring.replace("%options",m_EncOpts); 235{
186 execstring.replace("%input",input); 236 QString execstring = m_TTSTemplate;
187 execstring.replace("%output",output);
188 237
238 execstring.replace("%exe",m_TTSexec);
239 execstring.replace("%options",m_TTSOpts);
240 execstring.replace("%wavfile",wavfile);
241 execstring.replace("%text",text);
242 qDebug() << "voicing" << execstring;
189 QProcess::execute(execstring); 243 QProcess::execute(execstring);
190 return true; 244 return true;
191 245
192} 246} \ No newline at end of file
193
194