diff options
author | Dominik Wenger <domonoky@googlemail.com> | 2008-01-13 13:51:33 +0000 |
---|---|---|
committer | Dominik Wenger <domonoky@googlemail.com> | 2008-01-13 13:51:33 +0000 |
commit | 62f7f9e5504149d644a1d8db8b22a41621604c66 (patch) | |
tree | ab9c3e357dd416d2c95d77842b214609e90e5f5a /rbutil/rbutilqt | |
parent | bf6d5cce683b94933ea013f7b0bfc5ec60a7fe16 (diff) | |
download | rockbox-62f7f9e5504149d644a1d8db8b22a41621604c66.tar.gz rockbox-62f7f9e5504149d644a1d8db8b22a41621604c66.zip |
rbutil: improve voice creation: better parser for genlang output. Make progressbar working while voicegeneration. Sort the voice language list. Make the rbutil Translations built in. (run lrelease before make)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16075 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'rbutil/rbutilqt')
-rw-r--r-- | rbutil/rbutilqt/createvoicewindow.cpp | 1 | ||||
-rw-r--r-- | rbutil/rbutilqt/rbutil.ini | 3 | ||||
-rw-r--r-- | rbutil/rbutilqt/rbutilqt.qrc | 7 | ||||
-rw-r--r-- | rbutil/rbutilqt/voicefile.cpp | 102 |
4 files changed, 74 insertions, 39 deletions
diff --git a/rbutil/rbutilqt/createvoicewindow.cpp b/rbutil/rbutilqt/createvoicewindow.cpp index b8a14498de..3ae489c7c7 100644 --- a/rbutil/rbutilqt/createvoicewindow.cpp +++ b/rbutil/rbutilqt/createvoicewindow.cpp | |||
@@ -82,6 +82,7 @@ void CreateVoiceWindow::setDeviceSettings(QSettings *dev) | |||
82 | } | 82 | } |
83 | devices->endGroup(); | 83 | devices->endGroup(); |
84 | 84 | ||
85 | languages.sort(); | ||
85 | ui.comboLanguage->addItems(languages); | 86 | ui.comboLanguage->addItems(languages); |
86 | // set saved lang | 87 | // set saved lang |
87 | ui.comboLanguage->setCurrentIndex(ui.comboLanguage->findText(userSettings->value("voicelanguage").toString())); | 88 | ui.comboLanguage->setCurrentIndex(ui.comboLanguage->findText(userSettings->value("voicelanguage").toString())); |
diff --git a/rbutil/rbutilqt/rbutil.ini b/rbutil/rbutilqt/rbutil.ini index 2f2e904ab4..562106ee15 100644 --- a/rbutil/rbutilqt/rbutil.ini +++ b/rbutil/rbutilqt/rbutil.ini | |||
@@ -434,9 +434,12 @@ bootloadername=firmware.mi4 | |||
434 | resolution=132x80x16 | 434 | resolution=132x80x16 |
435 | manualname= | 435 | manualname= |
436 | brand=Sandisk | 436 | brand=Sandisk |
437 | usbid=0x07817450 | ||
438 | usbid=0x07817451 | ||
437 | voicename=sansac200 | 439 | voicename=sansac200 |
438 | targetid=30 | 440 | targetid=30 |
439 | 441 | ||
442 | |||
440 | [languages] | 443 | [languages] |
441 | lang1=africaans | 444 | lang1=africaans |
442 | lang2=bulgarian | 445 | lang2=bulgarian |
diff --git a/rbutil/rbutilqt/rbutilqt.qrc b/rbutil/rbutilqt/rbutilqt.qrc index 71e4c93d19..3f544291ff 100644 --- a/rbutil/rbutilqt/rbutilqt.qrc +++ b/rbutil/rbutilqt/rbutilqt.qrc | |||
@@ -36,4 +36,11 @@ | |||
36 | <qresource prefix="/ini" > | 36 | <qresource prefix="/ini" > |
37 | <file>rbutil.ini</file> | 37 | <file>rbutil.ini</file> |
38 | </qresource> | 38 | </qresource> |
39 | <qresource prefix="/lang" > | ||
40 | <file>rbutil_de.qm</file> | ||
41 | <file>rbutil_tr.qm</file> | ||
42 | <file>rbutil_fr.qm</file> | ||
43 | <file>rbutil_zh_CN.qm</file> | ||
44 | <file>rbutil_zh_TW.qm</file> | ||
45 | </qresource> | ||
39 | </RCC> | 46 | </RCC> |
diff --git a/rbutil/rbutilqt/voicefile.cpp b/rbutil/rbutilqt/voicefile.cpp index 6c80400a68..8fbac75c75 100644 --- a/rbutil/rbutilqt/voicefile.cpp +++ b/rbutil/rbutilqt/voicefile.cpp | |||
@@ -38,7 +38,7 @@ bool VoiceFileCreator::createVoiceFile(ProgressloggerInterface* logger) | |||
38 | { | 38 | { |
39 | m_abort = false; | 39 | m_abort = false; |
40 | m_logger = logger; | 40 | m_logger = logger; |
41 | m_logger->addItem("Starting Voicefile generation",LOGINFO); | 41 | m_logger->addItem(tr("Starting Voicefile generation"),LOGINFO); |
42 | 42 | ||
43 | // test if tempdir exists | 43 | // test if tempdir exists |
44 | if(!QDir(QDir::tempPath()+"/rbvoice/").exists()) | 44 | if(!QDir(QDir::tempPath()+"/rbvoice/").exists()) |
@@ -52,8 +52,7 @@ bool VoiceFileCreator::createVoiceFile(ProgressloggerInterface* logger) | |||
52 | QFile info(m_mountpoint+"/.rockbox/rockbox-info.txt"); | 52 | QFile info(m_mountpoint+"/.rockbox/rockbox-info.txt"); |
53 | if(!info.open(QIODevice::ReadOnly)) | 53 | if(!info.open(QIODevice::ReadOnly)) |
54 | { | 54 | { |
55 | m_logger->addItem("failed to open rockbox-info.txt",LOGERROR); | 55 | m_logger->addItem(tr("failed to open rockbox-info.txt"),LOGERROR); |
56 | m_logger->abort(); | ||
57 | return false; | 56 | return false; |
58 | } | 57 | } |
59 | 58 | ||
@@ -141,7 +140,7 @@ void VoiceFileCreator::downloadDone(bool error) | |||
141 | QFile genlang(filename); | 140 | QFile genlang(filename); |
142 | if(!genlang.open(QIODevice::ReadOnly)) | 141 | if(!genlang.open(QIODevice::ReadOnly)) |
143 | { | 142 | { |
144 | m_logger->addItem("failed to open downloaded file",LOGERROR); | 143 | m_logger->addItem(tr("failed to open downloaded file"),LOGERROR); |
145 | m_logger->abort(); | 144 | m_logger->abort(); |
146 | return; | 145 | return; |
147 | } | 146 | } |
@@ -152,7 +151,7 @@ void VoiceFileCreator::downloadDone(bool error) | |||
152 | 151 | ||
153 | if(!m_tts->start()) | 152 | if(!m_tts->start()) |
154 | { | 153 | { |
155 | m_logger->addItem("Init of TTS engine failed",LOGERROR); | 154 | m_logger->addItem(tr("Init of TTS engine failed"),LOGERROR); |
156 | m_logger->abort(); | 155 | m_logger->abort(); |
157 | return; | 156 | return; |
158 | } | 157 | } |
@@ -163,49 +162,84 @@ void VoiceFileCreator::downloadDone(bool error) | |||
163 | 162 | ||
164 | if(!m_enc->start()) | 163 | if(!m_enc->start()) |
165 | { | 164 | { |
166 | m_logger->addItem("Init of Encoder engine failed",LOGERROR); | 165 | m_logger->addItem(tr("Init of Encoder engine failed"),LOGERROR); |
167 | m_tts->stop(); | 166 | m_tts->stop(); |
168 | m_logger->abort(); | 167 | m_logger->abort(); |
169 | return; | 168 | return; |
170 | } | 169 | } |
171 | 170 | ||
172 | QApplication::processEvents(); | 171 | QApplication::processEvents(); |
173 | |||
174 | connect(m_logger,SIGNAL(aborted()),this,SLOT(abort())); | 172 | connect(m_logger,SIGNAL(aborted()),this,SLOT(abort())); |
175 | QStringList mp3files; | 173 | |
176 | 174 | //read in downloaded file | |
175 | QList<QPair<QString,QString> > voicepairs; | ||
177 | QTextStream in(&genlang); | 176 | QTextStream in(&genlang); |
178 | in.setCodec("UTF-8"); | 177 | in.setCodec("UTF-8"); |
179 | 178 | QString id, voice; | |
180 | bool emptyfile = true; | 179 | bool idfound = false; |
180 | bool voicefound=false; | ||
181 | while (!in.atEnd()) | 181 | while (!in.atEnd()) |
182 | { | 182 | { |
183 | QString line = in.readLine(); | ||
184 | if(line.contains("id:")) //ID found | ||
185 | { | ||
186 | id = line.remove("id:").remove('"').trimmed(); | ||
187 | idfound = true; | ||
188 | } | ||
189 | else if(line.contains("voice:")) // voice found | ||
190 | { | ||
191 | voice = line.remove("voice:").remove('"').trimmed(); | ||
192 | voicefound=true; | ||
193 | } | ||
194 | |||
195 | if(idfound && voicefound) | ||
196 | { | ||
197 | voicepairs.append(QPair<QString,QString>(id,voice)); | ||
198 | idfound=false; | ||
199 | voicefound=false; | ||
200 | } | ||
201 | } | ||
202 | genlang.close(); | ||
203 | |||
204 | // check for empty list | ||
205 | if(voicepairs.size() == 0) | ||
206 | { | ||
207 | m_logger->addItem(tr("The downloaded file was empty!"),LOGERROR); | ||
208 | m_logger->abort(); | ||
209 | m_tts->stop(); | ||
210 | return; | ||
211 | } | ||
212 | |||
213 | m_logger->setProgressMax(voicepairs.size()); | ||
214 | m_logger->setProgressValue(0); | ||
215 | |||
216 | // create voice clips | ||
217 | QStringList mp3files; | ||
218 | for(int i=0; i< voicepairs.size(); i++) | ||
219 | { | ||
183 | if(m_abort) | 220 | if(m_abort) |
184 | { | 221 | { |
185 | m_logger->addItem("aborted.",LOGERROR); | 222 | m_logger->addItem("aborted.",LOGERROR); |
186 | break; | 223 | m_logger->abort(); |
224 | m_tts->stop(); | ||
225 | return; | ||
187 | } | 226 | } |
188 | |||
189 | QString comment = in.readLine(); | ||
190 | QString id = in.readLine(); | ||
191 | QString voice = in.readLine(); | ||
192 | 227 | ||
193 | id = id.remove("id:").remove('"').trimmed(); | 228 | m_logger->setProgressValue(i); |
194 | voice = voice.remove("voice:").remove('"').trimmed(); | 229 | |
195 | 230 | QString wavname = m_path + "/" + voicepairs.at(i).first + ".wav"; | |
196 | QString wavname = m_path + "/" + id + ".wav"; | 231 | QString toSpeak = voicepairs.at(i).second; |
197 | QString toSpeak = voice; | 232 | QString encodedname = m_path + "/" + voicepairs.at(i).first +".mp3"; |
198 | QString encodedname = m_path + "/" + id +".mp3"; | ||
199 | 233 | ||
200 | // todo PAUSE | 234 | // todo PAUSE |
201 | if(id == "VOICE_PAUSE") | 235 | if(voicepairs.at(i).first == "VOICE_PAUSE") |
202 | { | 236 | { |
203 | QFile::copy(":/builtin/builtin/VOICE_PAUSE.wav",m_path + "/VOICE_PAUSE.wav"); | 237 | QFile::copy(":/builtin/builtin/VOICE_PAUSE.wav",m_path + "/VOICE_PAUSE.wav"); |
204 | 238 | ||
205 | } | 239 | } |
206 | else | 240 | else |
207 | { | 241 | { |
208 | if(voice == "") continue; | 242 | if(toSpeak == "") continue; |
209 | 243 | ||
210 | m_logger->addItem(tr("creating ")+toSpeak,LOGINFO); | 244 | m_logger->addItem(tr("creating ")+toSpeak,LOGINFO); |
211 | QApplication::processEvents(); | 245 | QApplication::processEvents(); |
@@ -222,25 +256,15 @@ void VoiceFileCreator::downloadDone(bool error) | |||
222 | // remove the wav file | 256 | // remove the wav file |
223 | QFile::remove(wavname); | 257 | QFile::remove(wavname); |
224 | // remember the mp3 file for later removing | 258 | // remember the mp3 file for later removing |
225 | mp3files << encodedname; | 259 | mp3files << encodedname; |
226 | // remember that we have done something | ||
227 | emptyfile = false; | ||
228 | |||
229 | } | ||
230 | genlang.close(); | ||
231 | |||
232 | if(emptyfile) | ||
233 | { | ||
234 | m_logger->addItem(tr("The downloaded file was empty!"),LOGERROR); | ||
235 | m_logger->abort(); | ||
236 | return; | ||
237 | } | 260 | } |
238 | 261 | ||
262 | |||
239 | //make voicefile | 263 | //make voicefile |
240 | FILE* ids2 = fopen(filename.toUtf8(), "r"); | 264 | FILE* ids2 = fopen(filename.toUtf8(), "r"); |
241 | if (ids2 == NULL) | 265 | if (ids2 == NULL) |
242 | { | 266 | { |
243 | m_logger->addItem("Error opening downloaded file",LOGERROR); | 267 | m_logger->addItem(tr("Error opening downloaded file"),LOGERROR); |
244 | m_logger->abort(); | 268 | m_logger->abort(); |
245 | return; | 269 | return; |
246 | } | 270 | } |
@@ -248,7 +272,7 @@ void VoiceFileCreator::downloadDone(bool error) | |||
248 | FILE* output = fopen(QString(m_mountpoint + "/.rockbox/langs/" + m_lang + ".voice").toUtf8(), "wb"); | 272 | FILE* output = fopen(QString(m_mountpoint + "/.rockbox/langs/" + m_lang + ".voice").toUtf8(), "wb"); |
249 | if (output == NULL) | 273 | if (output == NULL) |
250 | { | 274 | { |
251 | m_logger->addItem("Error opening output file",LOGERROR); | 275 | m_logger->addItem(tr("Error opening output file"),LOGERROR); |
252 | return; | 276 | return; |
253 | } | 277 | } |
254 | 278 | ||
@@ -262,7 +286,7 @@ void VoiceFileCreator::downloadDone(bool error) | |||
262 | 286 | ||
263 | m_logger->setProgressMax(100); | 287 | m_logger->setProgressMax(100); |
264 | m_logger->setProgressValue(100); | 288 | m_logger->setProgressValue(100); |
265 | m_logger->addItem("successfully created.",LOGOK); | 289 | m_logger->addItem(tr("successfully created."),LOGOK); |
266 | m_logger->abort(); | 290 | m_logger->abort(); |
267 | } | 291 | } |
268 | 292 | ||