From 62f7f9e5504149d644a1d8db8b22a41621604c66 Mon Sep 17 00:00:00 2001 From: Dominik Wenger Date: Sun, 13 Jan 2008 13:51:33 +0000 Subject: 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 --- rbutil/rbutilqt/createvoicewindow.cpp | 1 + rbutil/rbutilqt/rbutil.ini | 3 + rbutil/rbutilqt/rbutilqt.qrc | 7 +++ 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) } devices->endGroup(); + languages.sort(); ui.comboLanguage->addItems(languages); // set saved lang 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 resolution=132x80x16 manualname= brand=Sandisk +usbid=0x07817450 +usbid=0x07817451 voicename=sansac200 targetid=30 + [languages] lang1=africaans 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 @@ rbutil.ini + + rbutil_de.qm + rbutil_tr.qm + rbutil_fr.qm + rbutil_zh_CN.qm + rbutil_zh_TW.qm + 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) { m_abort = false; m_logger = logger; - m_logger->addItem("Starting Voicefile generation",LOGINFO); + m_logger->addItem(tr("Starting Voicefile generation"),LOGINFO); // test if tempdir exists if(!QDir(QDir::tempPath()+"/rbvoice/").exists()) @@ -52,8 +52,7 @@ bool VoiceFileCreator::createVoiceFile(ProgressloggerInterface* logger) QFile info(m_mountpoint+"/.rockbox/rockbox-info.txt"); if(!info.open(QIODevice::ReadOnly)) { - m_logger->addItem("failed to open rockbox-info.txt",LOGERROR); - m_logger->abort(); + m_logger->addItem(tr("failed to open rockbox-info.txt"),LOGERROR); return false; } @@ -141,7 +140,7 @@ void VoiceFileCreator::downloadDone(bool error) QFile genlang(filename); if(!genlang.open(QIODevice::ReadOnly)) { - m_logger->addItem("failed to open downloaded file",LOGERROR); + m_logger->addItem(tr("failed to open downloaded file"),LOGERROR); m_logger->abort(); return; } @@ -152,7 +151,7 @@ void VoiceFileCreator::downloadDone(bool error) if(!m_tts->start()) { - m_logger->addItem("Init of TTS engine failed",LOGERROR); + m_logger->addItem(tr("Init of TTS engine failed"),LOGERROR); m_logger->abort(); return; } @@ -163,49 +162,84 @@ void VoiceFileCreator::downloadDone(bool error) if(!m_enc->start()) { - m_logger->addItem("Init of Encoder engine failed",LOGERROR); + m_logger->addItem(tr("Init of Encoder engine failed"),LOGERROR); m_tts->stop(); m_logger->abort(); return; } QApplication::processEvents(); - connect(m_logger,SIGNAL(aborted()),this,SLOT(abort())); - QStringList mp3files; - + + //read in downloaded file + QList > voicepairs; QTextStream in(&genlang); in.setCodec("UTF-8"); - - bool emptyfile = true; + QString id, voice; + bool idfound = false; + bool voicefound=false; while (!in.atEnd()) { + QString line = in.readLine(); + if(line.contains("id:")) //ID found + { + id = line.remove("id:").remove('"').trimmed(); + idfound = true; + } + else if(line.contains("voice:")) // voice found + { + voice = line.remove("voice:").remove('"').trimmed(); + voicefound=true; + } + + if(idfound && voicefound) + { + voicepairs.append(QPair(id,voice)); + idfound=false; + voicefound=false; + } + } + genlang.close(); + + // check for empty list + if(voicepairs.size() == 0) + { + m_logger->addItem(tr("The downloaded file was empty!"),LOGERROR); + m_logger->abort(); + m_tts->stop(); + return; + } + + m_logger->setProgressMax(voicepairs.size()); + m_logger->setProgressValue(0); + + // create voice clips + QStringList mp3files; + for(int i=0; i< voicepairs.size(); i++) + { if(m_abort) { m_logger->addItem("aborted.",LOGERROR); - break; + m_logger->abort(); + m_tts->stop(); + return; } - - QString comment = in.readLine(); - QString id = in.readLine(); - QString voice = in.readLine(); - id = id.remove("id:").remove('"').trimmed(); - voice = voice.remove("voice:").remove('"').trimmed(); - - QString wavname = m_path + "/" + id + ".wav"; - QString toSpeak = voice; - QString encodedname = m_path + "/" + id +".mp3"; + m_logger->setProgressValue(i); + + QString wavname = m_path + "/" + voicepairs.at(i).first + ".wav"; + QString toSpeak = voicepairs.at(i).second; + QString encodedname = m_path + "/" + voicepairs.at(i).first +".mp3"; // todo PAUSE - if(id == "VOICE_PAUSE") + if(voicepairs.at(i).first == "VOICE_PAUSE") { QFile::copy(":/builtin/builtin/VOICE_PAUSE.wav",m_path + "/VOICE_PAUSE.wav"); } else { - if(voice == "") continue; + if(toSpeak == "") continue; m_logger->addItem(tr("creating ")+toSpeak,LOGINFO); QApplication::processEvents(); @@ -222,25 +256,15 @@ void VoiceFileCreator::downloadDone(bool error) // remove the wav file QFile::remove(wavname); // remember the mp3 file for later removing - mp3files << encodedname; - // remember that we have done something - emptyfile = false; - - } - genlang.close(); - - if(emptyfile) - { - m_logger->addItem(tr("The downloaded file was empty!"),LOGERROR); - m_logger->abort(); - return; + mp3files << encodedname; } + //make voicefile FILE* ids2 = fopen(filename.toUtf8(), "r"); if (ids2 == NULL) { - m_logger->addItem("Error opening downloaded file",LOGERROR); + m_logger->addItem(tr("Error opening downloaded file"),LOGERROR); m_logger->abort(); return; } @@ -248,7 +272,7 @@ void VoiceFileCreator::downloadDone(bool error) FILE* output = fopen(QString(m_mountpoint + "/.rockbox/langs/" + m_lang + ".voice").toUtf8(), "wb"); if (output == NULL) { - m_logger->addItem("Error opening output file",LOGERROR); + m_logger->addItem(tr("Error opening output file"),LOGERROR); return; } @@ -262,7 +286,7 @@ void VoiceFileCreator::downloadDone(bool error) m_logger->setProgressMax(100); m_logger->setProgressValue(100); - m_logger->addItem("successfully created.",LOGOK); + m_logger->addItem(tr("successfully created."),LOGOK); m_logger->abort(); } -- cgit v1.2.3