summaryrefslogtreecommitdiff
path: root/rbutil/rbutilqt/voicefile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'rbutil/rbutilqt/voicefile.cpp')
-rw-r--r--rbutil/rbutilqt/voicefile.cpp110
1 files changed, 55 insertions, 55 deletions
diff --git a/rbutil/rbutilqt/voicefile.cpp b/rbutil/rbutilqt/voicefile.cpp
index 6a04107cea..873329a47b 100644
--- a/rbutil/rbutilqt/voicefile.cpp
+++ b/rbutil/rbutilqt/voicefile.cpp
@@ -40,15 +40,15 @@ bool VoiceFileCreator::createVoiceFile(ProgressloggerInterface* logger)
40 m_abort = false; 40 m_abort = false;
41 m_logger = logger; 41 m_logger = logger;
42 m_logger->addItem(tr("Starting Voicefile generation"),LOGINFO); 42 m_logger->addItem(tr("Starting Voicefile generation"),LOGINFO);
43 43
44 // test if tempdir exists 44 // test if tempdir exists
45 if(!QDir(QDir::tempPath()+"/rbvoice/").exists()) 45 if(!QDir(QDir::tempPath()+"/rbvoice/").exists())
46 { 46 {
47 QDir(QDir::tempPath()).mkdir("rbvoice"); 47 QDir(QDir::tempPath()).mkdir("rbvoice");
48 } 48 }
49 49
50 m_path = QDir::tempPath() + "/rbvoice/"; 50 m_path = QDir::tempPath() + "/rbvoice/";
51 51
52 // read rockbox-info.txt 52 // read rockbox-info.txt
53 RockboxInfo info(m_mountpoint); 53 RockboxInfo info(m_mountpoint);
54 if(!info.open()) 54 if(!info.open())
@@ -58,18 +58,18 @@ bool VoiceFileCreator::createVoiceFile(ProgressloggerInterface* logger)
58 emit done(false); 58 emit done(false);
59 return false; 59 return false;
60 } 60 }
61 61
62 QString target = info.target(); 62 QString target = info.target();
63 QString features = info.features(); 63 QString features = info.features();
64 QString version = info.version(); 64 QString version = info.version();
65 version = version.left(version.indexOf("-")).remove(0,1); 65 version = version.left(version.indexOf("-")).remove(0,1);
66 66
67 //prepare download url 67 //prepare download url
68 QUrl genlangUrl = settings->genlangUrl() +"?lang=" +m_lang+"&t="+target+"&rev="+version+"&f="+features; 68 QUrl genlangUrl = settings->genlangUrl() +"?lang=" +m_lang+"&t="+target+"&rev="+version+"&f="+features;
69 69
70 qDebug() << "downloading " << genlangUrl; 70 qDebug() << "downloading " << genlangUrl;
71 71
72 //download the correct genlang output 72 //download the correct genlang output
73 QTemporaryFile *downloadFile = new QTemporaryFile(this); 73 QTemporaryFile *downloadFile = new QTemporaryFile(this);
74 downloadFile->open(); 74 downloadFile->open();
75 filename = downloadFile->fileName(); 75 filename = downloadFile->fileName();
@@ -77,11 +77,11 @@ bool VoiceFileCreator::createVoiceFile(ProgressloggerInterface* logger)
77 // get the real file. 77 // get the real file.
78 getter = new HttpGet(this); 78 getter = new HttpGet(this);
79 getter->setFile(downloadFile); 79 getter->setFile(downloadFile);
80 80
81 connect(getter, SIGNAL(done(bool)), this, SLOT(downloadDone(bool))); 81 connect(getter, SIGNAL(done(bool)), this, SLOT(downloadDone(bool)));
82 connect(getter, SIGNAL(dataReadProgress(int, int)), this, SLOT(updateDataReadProgress(int, int))); 82 connect(getter, SIGNAL(dataReadProgress(int, int)), this, SLOT(updateDataReadProgress(int, int)));
83 connect(m_logger, SIGNAL(aborted()), getter, SLOT(abort())); 83 connect(m_logger, SIGNAL(aborted()), getter, SLOT(abort()));
84 84
85 getter->getFile(genlangUrl); 85 getter->getFile(genlangUrl);
86 return true; 86 return true;
87 } 87 }
@@ -113,9 +113,9 @@ void VoiceFileCreator::downloadDone(bool error)
113 } 113 }
114 else m_logger->addItem(tr("Download finished."),LOGOK); 114 else m_logger->addItem(tr("Download finished."),LOGOK);
115 QCoreApplication::processEvents(); 115 QCoreApplication::processEvents();
116 116
117 117
118 m_logger->setProgressMax(0); 118 m_logger->setProgressMax(0);
119 //open downloaded file 119 //open downloaded file
120 QFile genlang(filename); 120 QFile genlang(filename);
121 if(!genlang.open(QIODevice::ReadOnly)) 121 if(!genlang.open(QIODevice::ReadOnly))
@@ -124,12 +124,12 @@ void VoiceFileCreator::downloadDone(bool error)
124 m_logger->abort(); 124 m_logger->abort();
125 emit done(false); 125 emit done(false);
126 return; 126 return;
127 } 127 }
128 128
129 //tts 129 //tts
130 m_tts = TTSBase::getTTS(settings->curTTS()); 130 m_tts = TTSBase::getTTS(settings->curTTS());
131 m_tts->setCfg(settings); 131 m_tts->setCfg(settings);
132 132
133 QString errStr; 133 QString errStr;
134 if(!m_tts->start(&errStr)) 134 if(!m_tts->start(&errStr))
135 { 135 {
@@ -141,9 +141,9 @@ void VoiceFileCreator::downloadDone(bool error)
141 } 141 }
142 142
143 // Encoder 143 // Encoder
144 m_enc = EncBase::getEncoder(settings->curEncoder()); 144 m_enc = EncBase::getEncoder(settings->curEncoder());
145 m_enc->setCfg(settings); 145 m_enc->setCfg(settings);
146 146
147 if(!m_enc->start()) 147 if(!m_enc->start())
148 { 148 {
149 m_logger->addItem(tr("Init of Encoder engine failed"),LOGERROR); 149 m_logger->addItem(tr("Init of Encoder engine failed"),LOGERROR);
@@ -155,15 +155,15 @@ void VoiceFileCreator::downloadDone(bool error)
155 155
156 QCoreApplication::processEvents(); 156 QCoreApplication::processEvents();
157 connect(m_logger,SIGNAL(aborted()),this,SLOT(abort())); 157 connect(m_logger,SIGNAL(aborted()),this,SLOT(abort()));
158 158
159 //read in downloaded file 159 //read in downloaded file
160 QList<QPair<QString,QString> > voicepairs; 160 QList<QPair<QString,QString> > voicepairs;
161 QTextStream in(&genlang); 161 QTextStream in(&genlang);
162 in.setCodec("UTF-8"); 162 in.setCodec("UTF-8");
163 QString id, voice; 163 QString id, voice;
164 bool idfound = false; 164 bool idfound = false;
165 bool voicefound=false; 165 bool voicefound=false;
166 while (!in.atEnd()) 166 while (!in.atEnd())
167 { 167 {
168 QString line = in.readLine(); 168 QString line = in.readLine();
169 if(line.contains("id:")) //ID found 169 if(line.contains("id:")) //ID found
@@ -176,58 +176,58 @@ void VoiceFileCreator::downloadDone(bool error)
176 voice = line.remove("voice:").remove('"').trimmed(); 176 voice = line.remove("voice:").remove('"').trimmed();
177 voicefound=true; 177 voicefound=true;
178 } 178 }
179 179
180 if(idfound && voicefound) 180 if(idfound && voicefound)
181 { 181 {
182 voicepairs.append(QPair<QString,QString>(id,voice)); 182 voicepairs.append(QPair<QString,QString>(id,voice));
183 idfound=false; 183 idfound=false;
184 voicefound=false; 184 voicefound=false;
185 } 185 }
186 } 186 }
187 genlang.close(); 187 genlang.close();
188 188
189 // check for empty list 189 // check for empty list
190 if(voicepairs.size() == 0) 190 if(voicepairs.size() == 0)
191 { 191 {
192 m_logger->addItem(tr("The downloaded file was empty!"),LOGERROR); 192 m_logger->addItem(tr("The downloaded file was empty!"),LOGERROR);
193 m_logger->abort(); 193 m_logger->abort();
194 m_tts->stop(); 194 m_tts->stop();
195 emit done(false); 195 emit done(false);
196 return; 196 return;
197 } 197 }
198 198
199 m_logger->setProgressMax(voicepairs.size()); 199 m_logger->setProgressMax(voicepairs.size());
200 m_logger->setProgressValue(0); 200 m_logger->setProgressValue(0);
201 201
202 // create voice clips 202 // create voice clips
203 QStringList mp3files; 203 QStringList mp3files;
204 for(int i=0; i< voicepairs.size(); i++) 204 for(int i=0; i< voicepairs.size(); i++)
205 { 205 {
206 if(m_abort) 206 if(m_abort)
207 { 207 {
208 m_logger->addItem("aborted.",LOGERROR); 208 m_logger->addItem("aborted.",LOGERROR);
209 m_logger->abort(); 209 m_logger->abort();
210 m_tts->stop(); 210 m_tts->stop();
211 emit done(false); 211 emit done(false);
212 return; 212 return;
213 } 213 }
214 214
215 m_logger->setProgressValue(i); 215 m_logger->setProgressValue(i);
216 216
217 QString wavname = m_path + "/" + voicepairs.at(i).first + ".wav"; 217 QString wavname = m_path + "/" + voicepairs.at(i).first + ".wav";
218 QString toSpeak = voicepairs.at(i).second; 218 QString toSpeak = voicepairs.at(i).second;
219 QString encodedname = m_path + "/" + voicepairs.at(i).first +".mp3"; 219 QString encodedname = m_path + "/" + voicepairs.at(i).first +".mp3";
220 220
221 // todo PAUSE 221 // todo PAUSE
222 if(voicepairs.at(i).first == "VOICE_PAUSE") 222 if(voicepairs.at(i).first == "VOICE_PAUSE")
223 { 223 {
224 QFile::copy(":/builtin/builtin/VOICE_PAUSE.wav",m_path + "/VOICE_PAUSE.wav"); 224 QFile::copy(":/builtin/builtin/VOICE_PAUSE.wav",m_path + "/VOICE_PAUSE.wav");
225 225
226 } 226 }
227 else 227 else
228 { 228 {
229 if(toSpeak == "") continue; 229 if(toSpeak == "") continue;
230 230
231 m_logger->addItem(tr("creating ")+toSpeak,LOGINFO); 231 m_logger->addItem(tr("creating ")+toSpeak,LOGINFO);
232 QCoreApplication::processEvents(); 232 QCoreApplication::processEvents();
233 233
@@ -235,26 +235,26 @@ void VoiceFileCreator::downloadDone(bool error)
235 QString errStr; 235 QString errStr;
236 m_tts->voice(toSpeak,wavname, &errStr); // generate wav 236 m_tts->voice(toSpeak,wavname, &errStr); // generate wav
237 } 237 }
238 238
239 // todo strip 239 // todo strip
240 char buffer[255]; 240 char buffer[255];
241 241
242 wavtrim((char*)qPrintable(wavname),m_wavtrimThreshold,buffer,255); 242 wavtrim((char*)qPrintable(wavname),m_wavtrimThreshold,buffer,255);
243 243
244 // encode wav 244 // encode wav
245 m_enc->encode(wavname,encodedname); 245 m_enc->encode(wavname,encodedname);
246 // remove the wav file 246 // remove the wav file
247 QFile::remove(wavname); 247 QFile::remove(wavname);
248 // remember the mp3 file for later removing 248 // remember the mp3 file for later removing
249 mp3files << encodedname; 249 mp3files << encodedname;
250 } 250 }
251 251
252 252
253 //make voicefile 253 //make voicefile
254 FILE* ids2 = fopen(filename.toUtf8(), "r"); 254 FILE* ids2 = fopen(filename.toUtf8(), "r");
255 if (ids2 == NULL) 255 if (ids2 == NULL)
256 { 256 {
257 m_logger->addItem(tr("Error opening downloaded file"),LOGERROR); 257 m_logger->addItem(tr("Error opening downloaded file"),LOGERROR);
258 m_logger->abort(); 258 m_logger->abort();
259 emit done(false); 259 emit done(false);
260 return; 260 return;
@@ -263,32 +263,32 @@ void VoiceFileCreator::downloadDone(bool error)
263 FILE* output = fopen(QString(m_mountpoint + "/.rockbox/langs/" + m_lang + ".voice").toUtf8(), "wb"); 263 FILE* output = fopen(QString(m_mountpoint + "/.rockbox/langs/" + m_lang + ".voice").toUtf8(), "wb");
264 if (output == NULL) 264 if (output == NULL)
265 { 265 {
266 m_logger->addItem(tr("Error opening output file"),LOGERROR); 266 m_logger->addItem(tr("Error opening output file"),LOGERROR);
267 emit done(false); 267 emit done(false);
268 return; 268 return;
269 } 269 }
270 270
271 voicefont(ids2,m_targetid,(char*)(const char*)m_path.toUtf8(), output); 271 voicefont(ids2,m_targetid,(char*)(const char*)m_path.toUtf8(), output);
272 272
273 //remove .mp3 files 273 //remove .mp3 files
274 for(int i=0;i< mp3files.size(); i++) 274 for(int i=0;i< mp3files.size(); i++)
275 { 275 {
276 QFile::remove(mp3files.at(i)); 276 QFile::remove(mp3files.at(i));
277 } 277 }
278 278
279 // Add Voice file to the install log 279 // Add Voice file to the install log
280 QSettings installlog(m_mountpoint + "/.rockbox/rbutil.log", QSettings::IniFormat, 0); 280 QSettings installlog(m_mountpoint + "/.rockbox/rbutil.log", QSettings::IniFormat, 0);
281 installlog.beginGroup("selfcreated Voice"); 281 installlog.beginGroup("selfcreated Voice");
282 installlog.setValue("/.rockbox/langs/" + m_lang + ".voice",QDate::currentDate().toString("yyyyMMdd")); 282 installlog.setValue("/.rockbox/langs/" + m_lang + ".voice",QDate::currentDate().toString("yyyyMMdd"));
283 installlog.endGroup(); 283 installlog.endGroup();
284 installlog.sync(); 284 installlog.sync();
285 285
286 m_logger->setProgressMax(100); 286 m_logger->setProgressMax(100);
287 m_logger->setProgressValue(100); 287 m_logger->setProgressValue(100);
288 m_logger->addItem(tr("successfully created."),LOGOK); 288 m_logger->addItem(tr("successfully created."),LOGOK);
289 m_logger->abort(); 289 m_logger->abort();
290 290
291 emit done(true); 291 emit done(true);
292} 292}
293 293
294void VoiceFileCreator::updateDataReadProgress(int read, int total) 294void VoiceFileCreator::updateDataReadProgress(int read, int total)