From 815504b44919ac73923359e12aa29fb409cefda2 Mon Sep 17 00:00:00 2001 From: Dominik Wenger Date: Fri, 14 Dec 2007 19:26:54 +0000 Subject: rbutil: added builtin rbspeex encoder. Reworked encoder configuration. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15925 a1c6a512-1295-4272-9138-f99709370657 --- rbutil/rbutilqt/configure.cpp | 141 ++++++++++--------------------- rbutil/rbutilqt/configure.h | 4 +- rbutil/rbutilqt/configurefrm.ui | 46 +++++----- rbutil/rbutilqt/installtalkwindow.cpp | 23 ++--- rbutil/rbutilqt/rbspeexcfgfrm.ui | 154 ++++++++++++++++++++++++++++++++++ rbutil/rbutilqt/rbutil.ini | 30 ------- rbutil/rbutilqt/rbutilqt.cpp | 2 + rbutil/rbutilqt/rbutilqt.pro | 14 +++- rbutil/rbutilqt/talkfile.cpp | 66 ++++++--------- rbutil/rbutilqt/talkfile.h | 28 +++---- 10 files changed, 281 insertions(+), 227 deletions(-) create mode 100644 rbutil/rbutilqt/rbspeexcfgfrm.ui diff --git a/rbutil/rbutilqt/configure.cpp b/rbutil/rbutilqt/configure.cpp index d2ce59eff8..810435ab68 100644 --- a/rbutil/rbutilqt/configure.cpp +++ b/rbutil/rbutilqt/configure.cpp @@ -23,6 +23,7 @@ #include "autodetection.h" #include "ui_configurefrm.h" #include "browsedirtree.h" +#include "encoders.h" #include #if defined(Q_OS_WIN32) @@ -75,9 +76,10 @@ Config::Config(QWidget *parent) : QDialog(parent) connect(ui.buttonCacheBrowse, SIGNAL(clicked()), this, SLOT(browseCache())); connect(ui.buttonCacheClear, SIGNAL(clicked()), this, SLOT(cacheClear())); connect(ui.browseTts, SIGNAL(clicked()), this, SLOT(browseTts())); - connect(ui.browseEncoder, SIGNAL(clicked()), this, SLOT(browseEnc())); - connect(ui.comboEncoder, SIGNAL(currentIndexChanged(int)), this, SLOT(updateEncOpts(int))); + connect(ui.configEncoder, SIGNAL(clicked()), this, SLOT(configEnc())); connect(ui.comboTts, SIGNAL(currentIndexChanged(int)), this, SLOT(updateTtsOpts(int))); + connect(ui.comboEncoder, SIGNAL(currentIndexChanged(int)), this, SLOT(updateEncState(int))); + } @@ -144,20 +146,9 @@ void Config::accept() devices->endGroup(); userSettings->endGroup(); - //encoder settings - preset = ui.comboEncoder->itemData(ui.comboEncoder->currentIndex(), Qt::UserRole).toString(); - userSettings->setValue("encpreset", preset); - userSettings->beginGroup(preset); - - if(QFileInfo(ui.encoderExecutable->text()).isExecutable()) - userSettings->setValue("binary", ui.encoderExecutable->text()); - userSettings->setValue("options", ui.encoderOptions->text()); - devices->beginGroup(preset); - userSettings->setValue("template", devices->value("template").toString()); - userSettings->setValue("type", devices->value("tts").toString()); - devices->endGroup(); - userSettings->endGroup(); - + //encoder settings + userSettings->setValue("encoder",ui.comboEncoder->currentText()); + // sync settings userSettings->sync(); this->close(); @@ -314,17 +305,19 @@ void Config::setDevices(QSettings *dev) ui.treeDevices->setCurrentItem(w3); // hilight old selection // tts / encoder tab - QStringList keys; - - devices->beginGroup("encoders"); - keys = devices->allKeys(); - for(int i=0; i < keys.size();i++) - ui.comboEncoder->addItem(devices->value(keys.at(i), "null").toString(), - keys.at(i)); - devices->endGroup(); - + + //encoders + ui.comboEncoder->addItems(getEncoderList()); + + //update index of combobox + int index = ui.comboEncoder->findText(userSettings->value("encoder").toString(),Qt::MatchExactly); + if(index < 0) index = 0; + ui.comboEncoder->setCurrentIndex(index); + updateEncState(index); + + //tts devices->beginGroup("tts"); - keys = devices->allKeys(); + QStringList keys = devices->allKeys(); for(int i=0; i < keys.size();i++) { devices->endGroup(); @@ -343,67 +336,13 @@ void Config::setDevices(QSettings *dev) } devices->endGroup(); - int index; + index = ui.comboTts->findData(userSettings->value("ttspreset").toString(), Qt::UserRole, Qt::MatchExactly); if(index < 0) index = 0; ui.comboTts->setCurrentIndex(index); updateTtsOpts(index); - index = ui.comboEncoder->findData(userSettings->value("encpreset").toString(), - Qt::UserRole, Qt::MatchExactly); - if(index < 0) index = 0; - ui.comboEncoder->setCurrentIndex(index); - updateEncOpts(index); - -} - - -void Config::updateEncOpts(int index) -{ - qDebug() << "updateEncOpts()"; - QString e; - bool edit; - QString c = ui.comboEncoder->itemData(index, Qt::UserRole).toString(); - devices->beginGroup(c); - ui.encoderOptions->setText(devices->value("options").toString()); - edit = devices->value("edit").toBool(); - ui.encoderOptions->setEnabled(edit); - e = devices->value("encoder").toString(); - devices->endGroup(); - - // try to autodetect encoder -#if defined(Q_OS_LINUX) || defined(Q_OS_MACX) - QStringList path = QString(getenv("PATH")).split(":", QString::SkipEmptyParts); -#elif defined(Q_OS_WIN) - QStringList path = QString(getenv("PATH")).split(";", QString::SkipEmptyParts); -#endif - qDebug() << path; - ui.encoderExecutable->setEnabled(true); - for(int i = 0; i < path.size(); i++) { - QString executable = QDir::fromNativeSeparators(path.at(i)) + "/" + e; -#if defined(Q_OS_WIN) - executable += ".exe"; - QStringList ex = executable.split("\"", QString::SkipEmptyParts); - executable = ex.join(""); -#endif - if(QFileInfo(executable).isExecutable()) { - qDebug() << "found:" << executable; - ui.encoderExecutable->setText(QDir::toNativeSeparators(executable)); - // disallow changing the detected path if non-customizable profile - if(!edit) - ui.encoderExecutable->setEnabled(false); - break; - } - } - - //user settings - userSettings->beginGroup(c); - QString temp = userSettings->value("binary","null").toString(); - if(temp != "null") ui.encoderExecutable->setText(temp); - temp = userSettings->value("options","null").toString(); - if(temp != "null") ui.encoderOptions->setText(temp); - userSettings->endGroup(); } @@ -459,6 +398,23 @@ void Config::updateTtsOpts(int index) userSettings->endGroup(); } +void Config::updateEncState(int index) +{ + QString encoder = ui.comboEncoder->itemText(index); + EncBase* enc = getEncoder(encoder); + enc->setUserCfg(userSettings); + + if(enc->configOk()) + { + ui.configstatus->setText("Configuration OK"); + ui.configstatusimg->setPixmap(QPixmap(QString::fromUtf8(":/icons/icons/go-next.png"))); + } + else + { + ui.configstatus->setText("Configuration INVALID"); + ui.configstatusimg->setPixmap(QPixmap(QString::fromUtf8(":/icons/icons/dialog-error.png"))); + } +} void Config::setNoProxy(bool checked) { @@ -741,22 +697,11 @@ void Config::browseTts() } -void Config::browseEnc() +void Config::configEnc() { - BrowseDirtree browser(this); - browser.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); - - if(QFileInfo(ui.encoderExecutable->text()).isDir()) - { - browser.setDir(ui.encoderExecutable->text()); - } - if(browser.exec() == QDialog::Accepted) - { - qDebug() << browser.getSelected(); - QString exe = browser.getSelected(); - if(!QFileInfo(exe).isExecutable()) - return; - ui.encoderExecutable->setText(exe); - } - + EncBase* enc =getEncoder(ui.comboEncoder->currentText()); + + enc->setUserCfg(userSettings); + enc->showCfg(); + updateEncState(ui.comboEncoder->currentIndex()); } diff --git a/rbutil/rbutilqt/configure.h b/rbutil/rbutilqt/configure.h index a0e5977706..07c6e19eb5 100644 --- a/rbutil/rbutilqt/configure.h +++ b/rbutil/rbutilqt/configure.h @@ -65,9 +65,9 @@ class Config : public QDialog void setCache(QString); void cacheClear(void); void browseTts(void); - void browseEnc(void); + void configEnc(void); void updateTtsOpts(int); - void updateEncOpts(int); + void updateEncState(int); }; #endif diff --git a/rbutil/rbutilqt/configurefrm.ui b/rbutil/rbutilqt/configurefrm.ui index c68ea42dfc..78bb929af0 100644 --- a/rbutil/rbutilqt/configurefrm.ui +++ b/rbutil/rbutilqt/configurefrm.ui @@ -359,7 +359,7 @@ :/icons/icons/audio-input-microphone.png - + TTS Engine @@ -427,7 +427,7 @@ - + Encoder Engine @@ -436,64 +436,62 @@ - Select &encoder profile + Select &encoder comboEncoder - + - Encoder executable - - - encoderExecutable + Configure encoder - + + + Configuration invalid ! + + - + - B&rowse + - - :/icons/icons/edit-find.png + + :/icons/icons/dialog-error.png - - + + - Encoder options + &Configure - - encoderOptions + + :/icons/icons/edit-find.png - - - - + Qt::Vertical - 20 - 40 + 226 + 51 diff --git a/rbutil/rbutilqt/installtalkwindow.cpp b/rbutil/rbutilqt/installtalkwindow.cpp index bd05911035..9b8b5d943a 100644 --- a/rbutil/rbutilqt/installtalkwindow.cpp +++ b/rbutil/rbutilqt/installtalkwindow.cpp @@ -114,6 +114,7 @@ void InstallTalkWindow::accept() userSettings->sync(); + talkcreator->setUserSettings(userSettings); talkcreator->setDir(QDir(folderToTalk)); talkcreator->setMountPoint(userSettings->value("mountpoint").toString()); talkcreator->setTTSexe(pathTTS); @@ -121,11 +122,6 @@ void InstallTalkWindow::accept() talkcreator->setTTsLanguage(ttsLanguage); talkcreator->setTTsType(ttsType); talkcreator->setTTsTemplate(ttsTemplate); - - talkcreator->setEncexe(pathEncoder); - talkcreator->setEncOpts(encOpts); - talkcreator->setEncTemplate(encTemplate); - talkcreator->setEncType(encType); talkcreator->setOverwriteTalk(ui.OverwriteTalk->isChecked()); talkcreator->setOverwriteWav(ui.OverwriteWav->isChecked()); @@ -152,17 +148,16 @@ void InstallTalkWindow::setDeviceSettings(QSettings *dev) .arg(devices->value(profile, tr("Invalid TTS profile!")).toString())); qDebug() << profile; devices->endGroup(); - profile = userSettings->value("encpreset", "none").toString(); - devices->beginGroup("encoders"); - ui.labelEncProfile->setText(tr("Encoder Profile: %1") - .arg(devices->value(profile, tr("Invalid encoder profile!")).toString())); - qDebug() << profile; - devices->endGroup(); + + QString encoder = userSettings->value("encoder", "none").toString(); + EncBase* enc = getEncoder(encoder); + enc->setUserCfg(userSettings); + if(enc->configOk()) + ui.labelEncProfile->setText(tr("Selected Encoder: %1").arg(encoder)); + else + ui.labelEncProfile->setText(tr("Selected Encoder: %1").arg("Invalid encoder configuration!")); } - - - void InstallTalkWindow::setUserSettings(QSettings *user) { userSettings = user; diff --git a/rbutil/rbutilqt/rbspeexcfgfrm.ui b/rbutil/rbutilqt/rbspeexcfgfrm.ui new file mode 100644 index 0000000000..ac57819fb0 --- /dev/null +++ b/rbutil/rbutilqt/rbspeexcfgfrm.ui @@ -0,0 +1,154 @@ + + RbSpeexCfgFrm + + + + 0 + 0 + 408 + 173 + + + + Configuration + + + + + + Configure RbSpeex Encoder + + + + + + + 1.000000000000000 + + + + + + + Volume + + + + + + + Narrowband + + + + + + + 1.000000000000000 + + + 8.000000000000000 + + + + + + + Quality + + + + + + + 3 + + + + + + + Complexity + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + &Ok + + + :/icons/icons/go-next.png + + + + + + + &Cancel + + + :/icons/icons/process-stop.png + + + + + + + Reset + + + + + + + + + + + buttonOk + clicked() + RbSpeexCfgFrm + accept() + + + 253 + 147 + + + 203 + 86 + + + + + buttonCancel + clicked() + RbSpeexCfgFrm + reject() + + + 352 + 147 + + + 203 + 86 + + + + + diff --git a/rbutil/rbutilqt/rbutil.ini b/rbutil/rbutilqt/rbutil.ini index e096faa862..9bd7902fc3 100644 --- a/rbutil/rbutilqt/rbutil.ini +++ b/rbutil/rbutilqt/rbutil.ini @@ -378,36 +378,6 @@ resolution=132x80x16 manualname= brand=Sandisk -[encoders] -encpreset01 = "Lame (default)" -encpreset02 = "Lame (user-adjusted)" -encpreset03 = "RbSpeex (default)" -encpreset04 = "RbSpeex (user-adjusted)" - -[encpreset01] -encoder = lame -options = "" -template = "\"%exe\" %options \"%input\" \"%output\"" -edit = false - -[encpreset02] -encoder = lame -options = "" -template = "\"%exe\" %options \"%input\" \"%output\"" -edit = true - -[encpreset03] -encoder = rbspeex -options = "" -template = "\"%exe\" %options \"%input\" \"%output\"" -edit = false - -[encpreset04] -encoder = rbspeex -options = "" -template = "\"%exe\" %options \"%input\" \"%output\"" -edit = true - [tts] ttspreset01 = "espeak (default)" ttspreset02 = "espeak (user-adjusted)" diff --git a/rbutil/rbutilqt/rbutilqt.cpp b/rbutil/rbutilqt/rbutilqt.cpp index 10f28f8fc8..30f5477885 100644 --- a/rbutil/rbutilqt/rbutilqt.cpp +++ b/rbutil/rbutilqt/rbutilqt.cpp @@ -31,6 +31,7 @@ #include "installthemes.h" #include "uninstallwindow.h" #include "browseof.h" +#include "encoders.h" #if defined(Q_OS_LINUX) #include @@ -119,6 +120,7 @@ RbUtilQt::RbUtilQt(QWidget *parent) : QMainWindow(parent) initIpodpatcher(); initSansapatcher(); downloadInfo(); + initEncoderList(); } diff --git a/rbutil/rbutilqt/rbutilqt.pro b/rbutil/rbutilqt/rbutilqt.pro index 79af79d359..85f76f350b 100644 --- a/rbutil/rbutilqt/rbutilqt.pro +++ b/rbutil/rbutilqt/rbutilqt.pro @@ -35,7 +35,8 @@ SOURCES += rbutilqt.cpp \ uninstallwindow.cpp \ utils.cpp \ browseof.cpp \ - preview.cpp + preview.cpp \ + encoders.cpp HEADERS += rbutilqt.h \ install.h \ @@ -71,11 +72,14 @@ HEADERS += rbutilqt.h \ uninstallwindow.h \ utils.h \ browseof.h \ - preview.h + preview.h \ + encoders.h # Needed by QT on Win -INCLUDEPATH = . irivertools zip zlib ../ipodpatcher ../sansapatcher +INCLUDEPATH = . irivertools zip zlib ../ipodpatcher ../sansapatcher ../../tools/rbspeex +LIBS += -L../../tools/rbspeex -lrbspeex + TEMPLATE = app dbg { CONFIG += debug thread qt warn_on @@ -100,7 +104,9 @@ FORMS += rbutilqtfrm.ui \ installthemesfrm.ui \ uninstallfrm.ui \ browseoffrm.ui \ - previewfrm.ui + previewfrm.ui \ + rbspeexcfgfrm.ui \ + encexescfgfrm.ui RESOURCES += rbutilqt.qrc diff --git a/rbutil/rbutilqt/talkfile.cpp b/rbutil/rbutilqt/talkfile.cpp index e13647deb2..141af0b5ec 100644 --- a/rbutil/rbutilqt/talkfile.cpp +++ b/rbutil/rbutilqt/talkfile.cpp @@ -24,21 +24,6 @@ TalkFileCreator::TalkFileCreator(QObject* parent): QObject(parent) } - -bool TalkFileCreator::initEncoder() -{ - QFileInfo enc(m_EncExec); - if(enc.exists()) - { - return true; - } - else - { - return false; - } -} - - bool TalkFileCreator::createTalkFiles(ProgressloggerInterface* logger) { m_abort = false; @@ -60,12 +45,18 @@ bool TalkFileCreator::createTalkFiles(ProgressloggerInterface* logger) m_logger->addItem("Init of TTS engine failed",LOGERROR); return false; } - if(!initEncoder()) + + // Encoder + m_enc = getEncoder(userSettings->value("encoder").toString()); + m_enc->setUserCfg(userSettings); + + if(!m_enc->start()) { - m_logger->addItem("Init of encoder failed",LOGERROR); + m_logger->addItem("Init of Encoder engine failed",LOGERROR); m_tts->stop(); return false; } + QApplication::processEvents(); connect(logger,SIGNAL(aborted()),this,SLOT(abort())); @@ -88,13 +79,16 @@ bool TalkFileCreator::createTalkFiles(ProgressloggerInterface* logger) QString toSpeak; QString filename; QString wavfilename; - - //! skip dotdot and .talk files - if(fileInf.fileName() == ".." || fileInf.suffix() == "talk") + + QString path = fileInf.filePath(); + qDebug() << path; + + if( path.endsWith("..") || path.endsWith(".talk") ) { it.next(); continue; } + //! if it is a dir if(fileInf.isDir()) { @@ -103,9 +97,14 @@ bool TalkFileCreator::createTalkFiles(ProgressloggerInterface* logger) { it.next(); continue; - } - toSpeak = fileInf.absoluteDir().dirName(); - filename = fileInf.absolutePath() + "/_dirname.talk"; + } + int index1 = path.lastIndexOf("/"); + int index2 = path.lastIndexOf("/",index1-1); + + toSpeak = path.mid(index2+1,(index1-index2)-1); + + filename = path.left(index1) + "/_dirname.talk"; + qDebug() << "toSpeak: " << toSpeak << "filename: " << filename; } else // if it is a file { @@ -137,15 +136,17 @@ bool TalkFileCreator::createTalkFiles(ProgressloggerInterface* logger) m_logger->addItem("Voicing of " + toSpeak + " failed",LOGERROR); m_logger->abort(); m_tts->stop(); + m_enc->stop(); return false; } } m_logger->addItem("Encoding of " + toSpeak,LOGINFO); - if(!encode(wavfilename,filename)) + if(!m_enc->encode(wavfilename,filename)) { m_logger->addItem("Encoding of " + wavfilename + " failed",LOGERROR); m_logger->abort(); m_tts->stop(); + m_enc->stop(); return false; } } @@ -182,21 +183,6 @@ void TalkFileCreator::abort() m_abort = true; } -bool TalkFileCreator::encode(QString input,QString output) -{ - qDebug() << "encoding.."; - QString execstring = m_curEncTemplate; - - execstring.replace("%exe",m_EncExec); - execstring.replace("%options",m_EncOpts); - execstring.replace("%input",input); - execstring.replace("%output",output); - qDebug() << execstring; - QProcess::execute(execstring); - return true; - -} - bool TTSSapi::start() { QFileInfo tts(m_TTSexec); @@ -257,7 +243,7 @@ bool TTSExes::voice(QString text,QString wavfile) execstring.replace("%options",m_TTSOpts); execstring.replace("%wavfile",wavfile); execstring.replace("%text",text); - qDebug() << "voicing" << execstring; + //qDebug() << "voicing" << execstring; QProcess::execute(execstring); return true; diff --git a/rbutil/rbutilqt/talkfile.h b/rbutil/rbutilqt/talkfile.h index 54819c80f8..2e2c3d7a01 100644 --- a/rbutil/rbutilqt/talkfile.h +++ b/rbutil/rbutilqt/talkfile.h @@ -21,8 +21,12 @@ #ifndef TALKFILE_H #define TALKFILE_H +#include #include "progressloggerinterface.h" +#include "encoders.h" + + class TTSBase : public QObject { Q_OBJECT @@ -55,18 +59,16 @@ public: bool createTalkFiles(ProgressloggerInterface* logger); + void setUserSettings(QSettings* setting) { userSettings = setting;} + void setTTSexe(QString exe){m_TTSexec=exe;} - void setEncexe(QString exe){m_EncExec=exe;} - + void setTTsType(QString tts) { m_curTTS = tts; } void setTTsOpts(QString opts) {m_TTSOpts=opts;} void setTTsLanguage(QString language) {m_TTSLanguage = language;} void setTTsTemplate(QString t) { m_curTTSTemplate = t; } - void setEncType(QString enc) { m_curEnc = enc; } - void setEncOpts(QString opts) {m_EncOpts=opts;} - void setEncTemplate(QString t) { m_curEncTemplate = t; } - + void setDir(QDir dir){m_dir = dir; } void setMountPoint(QString mountpoint) {m_mountpoint =mountpoint; } @@ -83,10 +85,9 @@ private slots: private: TTSBase* m_tts; - bool initEncoder(); - - bool encode(QString input,QString output); - + EncBase* m_enc; + QSettings *userSettings; + QDir m_dir; QString m_mountpoint; QString m_curTTS; @@ -95,11 +96,6 @@ private: QString m_TTSLanguage; QString m_curTTSTemplate; - QString m_curEnc; - QString m_EncExec; - QString m_EncOpts; - QString m_curEncTemplate; - bool m_overwriteTalk; bool m_overwriteWav; bool m_removeWav; @@ -137,5 +133,7 @@ private: }; + + #endif -- cgit v1.2.3