summaryrefslogtreecommitdiff
path: root/rbutil/rbutilqt/base/ttssapi.cpp
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2012-09-09 11:20:33 +0200
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2012-09-09 12:07:51 +0200
commit6be7dabdd952ef114941affca0e16ce8470595d3 (patch)
treec3a64a0b7092df7ee5d4ec1abef6ee604ad580fc /rbutil/rbutilqt/base/ttssapi.cpp
parent4a9ba12ca79a2b5cf13499821b84ba5b64defbe7 (diff)
downloadrockbox-6be7dabdd952ef114941affca0e16ce8470595d3.tar.gz
rockbox-6be7dabdd952ef114941affca0e16ce8470595d3.zip
Make SAPI implementation more parametrizable.
Move command line template for listing voices and generation into protected member variables and initialize them in the constructor. This allows derived classes to overwrite these, allowing to change the command line call. Make the name used for storing the classes values to the configuration parametrize at all. Remove SAPI4 support, this will be handled in a derived class later. Change-Id: Ib5a261c56cdf93a44fffdfa6edea409d89fd84ba
Diffstat (limited to 'rbutil/rbutilqt/base/ttssapi.cpp')
-rw-r--r--rbutil/rbutilqt/base/ttssapi.cpp62
1 files changed, 30 insertions, 32 deletions
diff --git a/rbutil/rbutilqt/base/ttssapi.cpp b/rbutil/rbutilqt/base/ttssapi.cpp
index 666b101266..603e7c5559 100644
--- a/rbutil/rbutilqt/base/ttssapi.cpp
+++ b/rbutil/rbutilqt/base/ttssapi.cpp
@@ -23,10 +23,11 @@
23 23
24TTSSapi::TTSSapi(QObject* parent) : TTSBase(parent) 24TTSSapi::TTSSapi(QObject* parent) : TTSBase(parent)
25{ 25{
26 m_TTSTemplate = "cscript //nologo \"%exe\" /language:%lang /voice:\"%voice\"" 26 m_TTSTemplate = "cscript //nologo \"%exe\" /language:%lang "
27 " /speed:%speed \"%options\""; 27 "/voice:\"%voice\" /speed:%speed \"%options\"";
28 m_TTSVoiceTemplate = "cscript //nologo \"%exe\" /language:%lang /listvoices";
29 m_TTSType = "sapi";
28 defaultLanguage = "english"; 30 defaultLanguage = "english";
29 m_sapi4 = false;
30 m_started = false; 31 m_started = false;
31} 32}
32 33
@@ -43,40 +44,44 @@ void TTSSapi::generateSettings()
43 for(int i = 0; i < languages.values().size(); ++i) { 44 for(int i = 0; i < languages.values().size(); ++i) {
44 langs.append(languages.values().at(i).at(0)); 45 langs.append(languages.values().at(i).at(0));
45 } 46 }
46 EncTtsSetting* setting =new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST, 47 EncTtsSetting* setting = new EncTtsSetting(this,
47 tr("Language:"),RbSettings::subValue("sapi",RbSettings::TtsLanguage), 48 EncTtsSetting::eSTRINGLIST, tr("Language:"),
48 langs); 49 RbSettings::subValue(m_TTSType, RbSettings::TtsLanguage),
50 langs);
49 connect(setting,SIGNAL(dataChanged()),this,SLOT(updateVoiceList())); 51 connect(setting,SIGNAL(dataChanged()),this,SLOT(updateVoiceList()));
50 insertSetting(eLANGUAGE,setting); 52 insertSetting(eLANGUAGE,setting);
51 // voice 53 // voice
52 setting = new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST, 54 setting = new EncTtsSetting(this,
53 tr("Voice:"),RbSettings::subValue("sapi",RbSettings::TtsVoice), 55 EncTtsSetting::eSTRINGLIST, tr("Voice:"),
54 getVoiceList(RbSettings::subValue("sapi",RbSettings::TtsLanguage).toString()), 56 RbSettings::subValue(m_TTSType, RbSettings::TtsVoice),
55 EncTtsSetting::eREFRESHBTN); 57 getVoiceList(RbSettings::subValue(m_TTSType,
58 RbSettings::TtsLanguage).toString()),
59 EncTtsSetting::eREFRESHBTN);
56 connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceList())); 60 connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceList()));
57 insertSetting(eVOICE,setting); 61 insertSetting(eVOICE,setting);
58 //speed 62 //speed
59 int speed = RbSettings::subValue("sapi", RbSettings::TtsSpeed).toInt(); 63 int speed = RbSettings::subValue(m_TTSType, RbSettings::TtsSpeed).toInt();
60 if(speed > 10 || speed < -10) 64 if(speed > 10 || speed < -10)
61 speed = 0; 65 speed = 0;
62 insertSetting(eSPEED, new EncTtsSetting(this, EncTtsSetting::eINT, 66 insertSetting(eSPEED, new EncTtsSetting(this,
63 tr("Speed:"), speed, -10, 10)); 67 EncTtsSetting::eINT, tr("Speed:"), speed, -10, 10));
64 // options 68 // options
65 insertSetting(eOPTIONS,new EncTtsSetting(this,EncTtsSetting::eSTRING, 69 insertSetting(eOPTIONS, new EncTtsSetting(this,
66 tr("Options:"),RbSettings::subValue("sapi",RbSettings::TtsOptions))); 70 EncTtsSetting::eSTRING, tr("Options:"),
71 RbSettings::subValue(m_TTSType, RbSettings::TtsOptions)));
67 72
68} 73}
69 74
70void TTSSapi::saveSettings() 75void TTSSapi::saveSettings()
71{ 76{
72 //save settings in user config 77 //save settings in user config
73 RbSettings::setSubValue("sapi",RbSettings::TtsLanguage, 78 RbSettings::setSubValue(m_TTSType, RbSettings::TtsLanguage,
74 getSetting(eLANGUAGE)->current().toString()); 79 getSetting(eLANGUAGE)->current().toString());
75 RbSettings::setSubValue("sapi",RbSettings::TtsVoice, 80 RbSettings::setSubValue(m_TTSType, RbSettings::TtsVoice,
76 getSetting(eVOICE)->current().toString()); 81 getSetting(eVOICE)->current().toString());
77 RbSettings::setSubValue("sapi",RbSettings::TtsSpeed, 82 RbSettings::setSubValue(m_TTSType, RbSettings::TtsSpeed,
78 getSetting(eSPEED)->current().toInt()); 83 getSetting(eSPEED)->current().toInt());
79 RbSettings::setSubValue("sapi",RbSettings::TtsOptions, 84 RbSettings::setSubValue(m_TTSType, RbSettings::TtsOptions,
80 getSetting(eOPTIONS)->current().toString()); 85 getSetting(eOPTIONS)->current().toString());
81 86
82 RbSettings::sync(); 87 RbSettings::sync();
@@ -94,11 +99,10 @@ void TTSSapi::updateVoiceList()
94bool TTSSapi::start(QString *errStr) 99bool TTSSapi::start(QString *errStr)
95{ 100{
96 101
97 m_TTSOpts = RbSettings::subValue("sapi",RbSettings::TtsOptions).toString(); 102 m_TTSOpts = RbSettings::subValue(m_TTSType, RbSettings::TtsOptions).toString();
98 m_TTSLanguage =RbSettings::subValue("sapi",RbSettings::TtsLanguage).toString(); 103 m_TTSLanguage =RbSettings::subValue(m_TTSType, RbSettings::TtsLanguage).toString();
99 m_TTSVoice=RbSettings::subValue("sapi",RbSettings::TtsVoice).toString(); 104 m_TTSVoice=RbSettings::subValue(m_TTSType, RbSettings::TtsVoice).toString();
100 m_TTSSpeed=RbSettings::subValue("sapi",RbSettings::TtsSpeed).toString(); 105 m_TTSSpeed=RbSettings::subValue(m_TTSType, RbSettings::TtsSpeed).toString();
101 m_sapi4 = RbSettings::subValue("sapi",RbSettings::TtsUseSapi4).toBool();
102 106
103 QFile::remove(QDir::tempPath() +"/sapi_voice.vbs"); 107 QFile::remove(QDir::tempPath() +"/sapi_voice.vbs");
104 QFile::copy(":/builtin/sapi_voice.vbs",QDir::tempPath() + "/sapi_voice.vbs"); 108 QFile::copy(":/builtin/sapi_voice.vbs",QDir::tempPath() + "/sapi_voice.vbs");
@@ -118,9 +122,6 @@ bool TTSSapi::start(QString *errStr)
118 execstring.replace("%voice",m_TTSVoice); 122 execstring.replace("%voice",m_TTSVoice);
119 execstring.replace("%speed",m_TTSSpeed); 123 execstring.replace("%speed",m_TTSSpeed);
120 124
121 if(m_sapi4)
122 execstring.append(" /sapi4 ");
123
124 qDebug() << "[TTSSapi] Start:" << execstring; 125 qDebug() << "[TTSSapi] Start:" << execstring;
125 voicescript = new QProcess(NULL); 126 voicescript = new QProcess(NULL);
126 //connect(voicescript,SIGNAL(readyReadStandardError()),this,SLOT(error())); 127 //connect(voicescript,SIGNAL(readyReadStandardError()),this,SLOT(error()));
@@ -179,13 +180,10 @@ QStringList TTSSapi::getVoiceList(QString language)
179 return result; 180 return result;
180 181
181 // create the voice process 182 // create the voice process
182 QString execstring = "cscript //nologo \"%exe\" /language:%lang /listvoices"; 183 QString execstring = m_TTSVoiceTemplate;
183 execstring.replace("%exe",m_TTSexec); 184 execstring.replace("%exe",m_TTSexec);
184 execstring.replace("%lang",language); 185 execstring.replace("%lang",language);
185 186
186 if(RbSettings::value(RbSettings::TtsUseSapi4).toBool())
187 execstring.append(" /sapi4 ");
188
189 qDebug() << "[TTSSapi] Start:" << execstring; 187 qDebug() << "[TTSSapi] Start:" << execstring;
190 voicescript = new QProcess(NULL); 188 voicescript = new QProcess(NULL);
191 voicescript->start(execstring); 189 voicescript->start(execstring);
@@ -263,7 +261,7 @@ bool TTSSapi::stop()
263 261
264bool TTSSapi::configOk() 262bool TTSSapi::configOk()
265{ 263{
266 if(RbSettings::subValue("sapi",RbSettings::TtsVoice).toString().isEmpty()) 264 if(RbSettings::subValue(m_TTSType, RbSettings::TtsVoice).toString().isEmpty())
267 return false; 265 return false;
268 return true; 266 return true;
269} 267}