diff options
Diffstat (limited to 'rbutil/rbutilqt/voicefile.cpp')
-rw-r--r-- | rbutil/rbutilqt/voicefile.cpp | 110 |
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 | ||
294 | void VoiceFileCreator::updateDataReadProgress(int read, int total) | 294 | void VoiceFileCreator::updateDataReadProgress(int read, int total) |