diff options
author | Dominik Wenger <domonoky@googlemail.com> | 2007-09-23 13:35:45 +0000 |
---|---|---|
committer | Dominik Wenger <domonoky@googlemail.com> | 2007-09-23 13:35:45 +0000 |
commit | acc70ec58d88771673c092711b3b2210a03c14bc (patch) | |
tree | 77b6bb7dee0c6b026501fbb7a6f20ea90c270f1b /rbutil/rbutilqt/talkfile.cpp | |
parent | 74154436a5fff8a8dd27115395c83c6d41ebf4e9 (diff) | |
download | rockbox-acc70ec58d88771673c092711b3b2210a03c14bc.tar.gz rockbox-acc70ec58d88771673c092711b3b2210a03c14bc.zip |
rbutil: added support for talkfile creation with the rockbox sapi_voice.vbs script. Also let the configure dialog remember options and paths for different tts and encoders.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14828 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'rbutil/rbutilqt/talkfile.cpp')
-rw-r--r-- | rbutil/rbutilqt/talkfile.cpp | 110 |
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 | ||
41 | bool 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 | ||
55 | bool TalkFileCreator::createTalkFiles(ProgressloggerInterface* logger) | 42 | bool 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 | ||
165 | bool TalkFileCreator::voice(QString text,QString wavfile) | 168 | bool 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 | ||
183 | bool 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); | 201 | bool 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 | ||
211 | bool 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 | ||
180 | bool TalkFileCreator::encode(QString input,QString output) | 220 | bool 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); | 234 | bool 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 | |||