summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Wenger <domonoky@googlemail.com>2008-01-13 13:51:33 +0000
committerDominik Wenger <domonoky@googlemail.com>2008-01-13 13:51:33 +0000
commit62f7f9e5504149d644a1d8db8b22a41621604c66 (patch)
treeab9c3e357dd416d2c95d77842b214609e90e5f5a
parentbf6d5cce683b94933ea013f7b0bfc5ec60a7fe16 (diff)
downloadrockbox-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
-rw-r--r--rbutil/rbutilqt/createvoicewindow.cpp1
-rw-r--r--rbutil/rbutilqt/rbutil.ini3
-rw-r--r--rbutil/rbutilqt/rbutilqt.qrc7
-rw-r--r--rbutil/rbutilqt/voicefile.cpp102
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
434resolution=132x80x16 434resolution=132x80x16
435manualname= 435manualname=
436brand=Sandisk 436brand=Sandisk
437usbid=0x07817450
438usbid=0x07817451
437voicename=sansac200 439voicename=sansac200
438targetid=30 440targetid=30
439 441
442
440[languages] 443[languages]
441lang1=africaans 444lang1=africaans
442lang2=bulgarian 445lang2=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