From 5f641ed3c2194b44b053bf963069a76d6f6c4b2c Mon Sep 17 00:00:00 2001 From: Dominik Wenger Date: Mon, 11 Feb 2008 17:39:07 +0000 Subject: rbutil: fix a Bug in the sapi settings. Allow sapi4 (not sure if it really works). git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16284 a1c6a512-1295-4272-9138-f99709370657 --- rbutil/rbutilqt/rbsettings.cpp | 16 ++++++++++++++++ rbutil/rbutilqt/rbsettings.h | 2 ++ rbutil/rbutilqt/sapicfgfrm.ui | 11 +++++++++-- rbutil/rbutilqt/tts.cpp | 23 ++++++++++++++++++----- rbutil/rbutilqt/tts.h | 2 +- rbutil/rbutilqt/ttsgui.cpp | 23 +++++++++++++++++++++-- rbutil/rbutilqt/ttsgui.h | 1 + 7 files changed, 68 insertions(+), 10 deletions(-) diff --git a/rbutil/rbutilqt/rbsettings.cpp b/rbutil/rbutilqt/rbsettings.cpp index 6e3e63110e..2aa43f7f84 100644 --- a/rbutil/rbutilqt/rbsettings.cpp +++ b/rbutil/rbutilqt/rbsettings.cpp @@ -307,6 +307,14 @@ QString RbSettings::ttsLang(QString tts) return op; } +bool RbSettings::ttsUseSapi4() +{ + userSettings->beginGroup("sapi"); + bool op = userSettings->value("useSapi4",false).toBool(); + userSettings->endGroup(); + return op; +} + QString RbSettings::encoderPath(QString enc) { userSettings->beginGroup(enc); @@ -523,6 +531,14 @@ void RbSettings::setTTSLang(QString tts, QString lang) userSettings->endGroup(); } +void RbSettings::setTTSUseSapi4(bool value) +{ + userSettings->beginGroup("sapi"); + userSettings->setValue("useSapi4",value); + userSettings->endGroup(); +} + + void RbSettings::setEncoderPath(QString enc, QString path) { userSettings->beginGroup(enc); diff --git a/rbutil/rbutilqt/rbsettings.h b/rbutil/rbutilqt/rbsettings.h index ad94c63801..0613bea022 100644 --- a/rbutil/rbutilqt/rbsettings.h +++ b/rbutil/rbutilqt/rbsettings.h @@ -69,6 +69,7 @@ class RbSettings : public QObject QString ttsVoice(QString tts); int ttsSpeed(QString tts); QString ttsLang(QString tts); + bool ttsUseSapi4(); QString encoderPath(QString enc); QString encoderOptions(QString enc); double encoderQuality(QString enc); @@ -116,6 +117,7 @@ class RbSettings : public QObject void setTTSSpeed(QString tts, int speed); void setTTSVoice(QString tts, QString voice); void setTTSLang(QString tts, QString lang); + void setTTSUseSapi4(bool value); void setEncoderPath(QString enc, QString path); void setEncoderOptions(QString enc, QString options); void setEncoderQuality(QString enc, double q); diff --git a/rbutil/rbutilqt/sapicfgfrm.ui b/rbutil/rbutilqt/sapicfgfrm.ui index 03fccd1291..955fcdd73f 100644 --- a/rbutil/rbutilqt/sapicfgfrm.ui +++ b/rbutil/rbutilqt/sapicfgfrm.ui @@ -66,7 +66,7 @@ - + Qt::Vertical @@ -79,7 +79,7 @@ - + @@ -123,6 +123,13 @@ + + + + Use Sapi 4 + + + diff --git a/rbutil/rbutilqt/tts.cpp b/rbutil/rbutilqt/tts.cpp index 9bdbf6fe3e..1f40df003b 100644 --- a/rbutil/rbutilqt/tts.cpp +++ b/rbutil/rbutilqt/tts.cpp @@ -30,7 +30,7 @@ void initTTSList() ttsList["flite"] = "Flite TTS Engine"; ttsList["swift"] = "Swift TTS Engine"; #if defined(Q_OS_WIN) - ttsList["sapi"] = "Sapi 5 TTS Engine"; + ttsList["sapi"] = "Sapi TTS Engine"; #endif } @@ -156,7 +156,7 @@ TTSSapi::TTSSapi() : TTSBase() { m_TTSTemplate = "cscript //nologo \"%exe\" /language:%lang /voice:\"%voice\" /speed:%speed \"%options\""; defaultLanguage ="english"; - + m_sapi4 =false; } @@ -166,8 +166,9 @@ bool TTSSapi::start(QString *errStr) m_TTSOpts = settings->ttsOptions("sapi"); m_TTSLanguage =settings->ttsLang("sapi"); m_TTSVoice=settings->ttsVoice("sapi"); - m_TTSSpeed=settings->ttsSpeed("sapi"); - + m_TTSSpeed=QString("%1").arg(settings->ttsSpeed("sapi")); + m_sapi4 = settings->ttsUseSapi4(); + QFile::remove(QDir::tempPath() +"/sapi_voice.vbs"); QFile::copy(":/builtin/sapi_voice.vbs",QDir::tempPath() + "/sapi_voice.vbs"); m_TTSexec = QDir::tempPath() +"/sapi_voice.vbs"; @@ -186,6 +187,9 @@ bool TTSSapi::start(QString *errStr) execstring.replace("%voice",m_TTSVoice); execstring.replace("%speed",m_TTSSpeed); + if(m_sapi4) + execstring.append(" /sapi4 "); + qDebug() << "init" << execstring; voicescript = new QProcess(NULL); //connect(voicescript,SIGNAL(readyReadStandardError()),this,SLOT(error())); @@ -219,9 +223,13 @@ QStringList TTSSapi::getVoiceList(QString language) return result; // create the voice process - QString execstring = "cscript //nologo \"%exe\" /language:%lang /listvoices";; + QString execstring = "cscript //nologo \"%exe\" /language:%lang /listvoices"; execstring.replace("%exe",m_TTSexec); execstring.replace("%lang",language); + + if(settings->ttsUseSapi4()) + execstring.append(" /sapi4 "); + qDebug() << "init" << execstring; voicescript = new QProcess(NULL); voicescript->start(execstring); @@ -234,6 +242,11 @@ QStringList TTSSapi::getVoiceList(QString language) result = dataRaw.split(",",QString::SkipEmptyParts); result.sort(); result.removeFirst(); + for(int i = 0; i< result.size();i++) + { + result[i] = result.at(i).simplified(); + } + delete voicescript; QFile::setPermissions(QDir::tempPath() +"/sapi_voice.vbs",QFile::ReadOwner |QFile::WriteOwner|QFile::ExeOwner diff --git a/rbutil/rbutilqt/tts.h b/rbutil/rbutilqt/tts.h index 1addbe2ebb..a5427fe05f 100644 --- a/rbutil/rbutilqt/tts.h +++ b/rbutil/rbutilqt/tts.h @@ -88,7 +88,7 @@ private: QString m_TTSLanguage; QString m_TTSVoice; QString m_TTSSpeed; - + bool m_sapi4; }; class TTSExes : public TTSBase diff --git a/rbutil/rbutilqt/ttsgui.cpp b/rbutil/rbutilqt/ttsgui.cpp index 76488c5411..3ed2e87f0e 100644 --- a/rbutil/rbutilqt/ttsgui.cpp +++ b/rbutil/rbutilqt/ttsgui.cpp @@ -30,7 +30,7 @@ TTSSapiGui::TTSSapiGui(TTSSapi* sapi,QDialog* parent) : QDialog(parent) this->hide(); connect(ui.reset,SIGNAL(clicked()),this,SLOT(reset())); connect(ui.languagecombo,SIGNAL(currentIndexChanged(QString)),this,SLOT(updateVoices(QString))); - + connect(ui.usesapi4,SIGNAL(stateChanged(int)),this,SLOT(useSapi4Changed(int))); } void TTSSapiGui::showCfg() @@ -40,8 +40,11 @@ void TTSSapiGui::showCfg() QString selLang = settings->ttsLang("sapi"); QString selVoice = settings->ttsVoice("sapi"); ui.speed->setValue(settings->ttsSpeed("sapi")); + if(settings->ttsUseSapi4()) + ui.usesapi4->setCheckState(Qt::Checked); + else + ui.usesapi4->setCheckState(Qt::Unchecked); - // fill in language combobox QStringList languages = settings->allLanguages(); @@ -79,6 +82,10 @@ void TTSSapiGui::accept(void) settings->setTTSLang("sapi",ui.languagecombo->currentText()); settings->setTTSVoice("sapi",ui.voicecombo->currentText()); settings->setTTSSpeed("sapi",ui.speed->value()); + if(ui.usesapi4->checkState() == Qt::Checked) + settings->setTTSUseSapi4(true); + else + settings->setTTSUseSapi4(false); // sync settings settings->sync(); @@ -98,6 +105,18 @@ void TTSSapiGui::updateVoices(QString language) } +void TTSSapiGui::useSapi4Changed(int) +{ + if(ui.usesapi4->checkState() == Qt::Checked) + settings->setTTSUseSapi4(true); + else + settings->setTTSUseSapi4(false); + // sync settings + settings->sync(); + updateVoices(ui.languagecombo->currentText()); + +} + TTSExesGui::TTSExesGui(QDialog* parent) : QDialog(parent) { ui.setupUi(this); diff --git a/rbutil/rbutilqt/ttsgui.h b/rbutil/rbutilqt/ttsgui.h index 427dcd288c..8f53bf34a4 100644 --- a/rbutil/rbutilqt/ttsgui.h +++ b/rbutil/rbutilqt/ttsgui.h @@ -42,6 +42,7 @@ public slots: virtual void reject(void); virtual void reset(void); void updateVoices(QString language); + void useSapi4Changed(int); private: Ui::SapiCfgFrm ui; RbSettings* settings; -- cgit v1.2.3