diff options
Diffstat (limited to 'rbutil/rbutilqt/base/tts.cpp')
-rw-r--r-- | rbutil/rbutilqt/base/tts.cpp | 81 |
1 files changed, 41 insertions, 40 deletions
diff --git a/rbutil/rbutilqt/base/tts.cpp b/rbutil/rbutilqt/base/tts.cpp index d55ba9e739..70332f5f38 100644 --- a/rbutil/rbutilqt/base/tts.cpp +++ b/rbutil/rbutilqt/base/tts.cpp | |||
@@ -19,6 +19,7 @@ | |||
19 | 19 | ||
20 | #include "tts.h" | 20 | #include "tts.h" |
21 | #include "utils.h" | 21 | #include "utils.h" |
22 | #include "rbsettings.h" | ||
22 | /********************************************************************* | 23 | /********************************************************************* |
23 | * TTS Base | 24 | * TTS Base |
24 | **********************************************************************/ | 25 | **********************************************************************/ |
@@ -105,24 +106,24 @@ TTSExes::TTSExes(QString name,QObject* parent) : TTSBase(parent) | |||
105 | 106 | ||
106 | void TTSExes::generateSettings() | 107 | void TTSExes::generateSettings() |
107 | { | 108 | { |
108 | QString exepath =settings->subValue(m_name,RbSettings::TtsPath).toString(); | 109 | QString exepath =RbSettings::subValue(m_name,RbSettings::TtsPath).toString(); |
109 | if(exepath == "") exepath = findExecutable(m_name); | 110 | if(exepath == "") exepath = findExecutable(m_name); |
110 | 111 | ||
111 | insertSetting(eEXEPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Path to TTS engine:",exepath,EncTtsSetting::eBROWSEBTN)); | 112 | insertSetting(eEXEPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Path to TTS engine:",exepath,EncTtsSetting::eBROWSEBTN)); |
112 | insertSetting(eOPTIONS,new EncTtsSetting(this,EncTtsSetting::eSTRING,"TTS enginge options:",settings->subValue(m_name,RbSettings::TtsOptions))); | 113 | insertSetting(eOPTIONS,new EncTtsSetting(this,EncTtsSetting::eSTRING,"TTS enginge options:",RbSettings::subValue(m_name,RbSettings::TtsOptions))); |
113 | } | 114 | } |
114 | 115 | ||
115 | void TTSExes::saveSettings() | 116 | void TTSExes::saveSettings() |
116 | { | 117 | { |
117 | settings->setSubValue(m_name,RbSettings::TtsPath,getSetting(eEXEPATH)->current().toString()); | 118 | RbSettings::setSubValue(m_name,RbSettings::TtsPath,getSetting(eEXEPATH)->current().toString()); |
118 | settings->setSubValue(m_name,RbSettings::TtsOptions,getSetting(eOPTIONS)->current().toString()); | 119 | RbSettings::setSubValue(m_name,RbSettings::TtsOptions,getSetting(eOPTIONS)->current().toString()); |
119 | settings->sync(); | 120 | RbSettings::sync(); |
120 | } | 121 | } |
121 | 122 | ||
122 | bool TTSExes::start(QString *errStr) | 123 | bool TTSExes::start(QString *errStr) |
123 | { | 124 | { |
124 | m_TTSexec = settings->subValue(m_name,RbSettings::TtsPath).toString(); | 125 | m_TTSexec = RbSettings::subValue(m_name,RbSettings::TtsPath).toString(); |
125 | m_TTSOpts = settings->subValue(m_name,RbSettings::TtsOptions).toString(); | 126 | m_TTSOpts = RbSettings::subValue(m_name,RbSettings::TtsOptions).toString(); |
126 | 127 | ||
127 | m_TTSTemplate = m_TemplateMap.value(m_name); | 128 | m_TTSTemplate = m_TemplateMap.value(m_name); |
128 | 129 | ||
@@ -155,7 +156,7 @@ TTSStatus TTSExes::voice(QString text,QString wavfile, QString *errStr) | |||
155 | 156 | ||
156 | bool TTSExes::configOk() | 157 | bool TTSExes::configOk() |
157 | { | 158 | { |
158 | QString path = settings->subValue(m_name,RbSettings::TtsPath).toString(); | 159 | QString path = RbSettings::subValue(m_name,RbSettings::TtsPath).toString(); |
159 | 160 | ||
160 | if (QFileInfo(path).exists()) | 161 | if (QFileInfo(path).exists()) |
161 | return true; | 162 | return true; |
@@ -176,31 +177,31 @@ TTSSapi::TTSSapi(QObject* parent) : TTSBase(parent) | |||
176 | void TTSSapi::generateSettings() | 177 | void TTSSapi::generateSettings() |
177 | { | 178 | { |
178 | // language | 179 | // language |
179 | QStringList languages = settings->languages(); | 180 | QStringList languages = RbSettings::languages(); |
180 | languages.sort(); | 181 | languages.sort(); |
181 | EncTtsSetting* setting =new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,"Language:",settings->subValue("sapi",RbSettings::TtsLanguage),languages); | 182 | EncTtsSetting* setting =new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,"Language:",RbSettings::subValue("sapi",RbSettings::TtsLanguage),languages); |
182 | connect(setting,SIGNAL(dataChanged()),this,SLOT(updateVoiceList())); | 183 | connect(setting,SIGNAL(dataChanged()),this,SLOT(updateVoiceList())); |
183 | insertSetting(eLANGUAGE,setting); | 184 | insertSetting(eLANGUAGE,setting); |
184 | // voice | 185 | // voice |
185 | setting = new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,"Voice:",settings->subValue("sapi",RbSettings::TtsVoice),getVoiceList(settings->subValue("sapi",RbSettings::TtsLanguage).toString()),EncTtsSetting::eREFRESHBTN); | 186 | setting = new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,"Voice:",RbSettings::subValue("sapi",RbSettings::TtsVoice),getVoiceList(RbSettings::subValue("sapi",RbSettings::TtsLanguage).toString()),EncTtsSetting::eREFRESHBTN); |
186 | connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceList())); | 187 | connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceList())); |
187 | insertSetting(eVOICE,setting); | 188 | insertSetting(eVOICE,setting); |
188 | //speed | 189 | //speed |
189 | insertSetting(eSPEED,new EncTtsSetting(this,EncTtsSetting::eINT,"Speed:",settings->subValue("sapi",RbSettings::TtsSpeed),-10,10)); | 190 | insertSetting(eSPEED,new EncTtsSetting(this,EncTtsSetting::eINT,"Speed:",RbSettings::subValue("sapi",RbSettings::TtsSpeed),-10,10)); |
190 | // options | 191 | // options |
191 | insertSetting(eOPTIONS,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Options:",settings->subValue("sapi",RbSettings::TtsOptions))); | 192 | insertSetting(eOPTIONS,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Options:",RbSettings::subValue("sapi",RbSettings::TtsOptions))); |
192 | 193 | ||
193 | } | 194 | } |
194 | 195 | ||
195 | void TTSSapi::saveSettings() | 196 | void TTSSapi::saveSettings() |
196 | { | 197 | { |
197 | //save settings in user config | 198 | //save settings in user config |
198 | settings->setSubValue("sapi",RbSettings::TtsLanguage,getSetting(eLANGUAGE)->current().toString()); | 199 | RbSettings::setSubValue("sapi",RbSettings::TtsLanguage,getSetting(eLANGUAGE)->current().toString()); |
199 | settings->setSubValue("sapi",RbSettings::TtsVoice,getSetting(eVOICE)->current().toString()); | 200 | RbSettings::setSubValue("sapi",RbSettings::TtsVoice,getSetting(eVOICE)->current().toString()); |
200 | settings->setSubValue("sapi",RbSettings::TtsSpeed,getSetting(eSPEED)->current().toInt()); | 201 | RbSettings::setSubValue("sapi",RbSettings::TtsSpeed,getSetting(eSPEED)->current().toInt()); |
201 | settings->setSubValue("sapi",RbSettings::TtsOptions,getSetting(eOPTIONS)->current().toString()); | 202 | RbSettings::setSubValue("sapi",RbSettings::TtsOptions,getSetting(eOPTIONS)->current().toString()); |
202 | 203 | ||
203 | settings->sync(); | 204 | RbSettings::sync(); |
204 | } | 205 | } |
205 | 206 | ||
206 | void TTSSapi::updateVoiceList() | 207 | void TTSSapi::updateVoiceList() |
@@ -215,11 +216,11 @@ void TTSSapi::updateVoiceList() | |||
215 | bool TTSSapi::start(QString *errStr) | 216 | bool TTSSapi::start(QString *errStr) |
216 | { | 217 | { |
217 | 218 | ||
218 | m_TTSOpts = settings->subValue("sapi",RbSettings::TtsOptions).toString(); | 219 | m_TTSOpts = RbSettings::subValue("sapi",RbSettings::TtsOptions).toString(); |
219 | m_TTSLanguage =settings->subValue("sapi",RbSettings::TtsLanguage).toString(); | 220 | m_TTSLanguage =RbSettings::subValue("sapi",RbSettings::TtsLanguage).toString(); |
220 | m_TTSVoice=settings->subValue("sapi",RbSettings::TtsVoice).toString(); | 221 | m_TTSVoice=RbSettings::subValue("sapi",RbSettings::TtsVoice).toString(); |
221 | m_TTSSpeed=settings->subValue("sapi",RbSettings::TtsSpeed).toString(); | 222 | m_TTSSpeed=RbSettings::subValue("sapi",RbSettings::TtsSpeed).toString(); |
222 | m_sapi4 = settings->subValue("sapi",RbSettings::TtsUseSapi4).toBool(); | 223 | m_sapi4 = RbSettings::subValue("sapi",RbSettings::TtsUseSapi4).toBool(); |
223 | 224 | ||
224 | QFile::remove(QDir::tempPath() +"/sapi_voice.vbs"); | 225 | QFile::remove(QDir::tempPath() +"/sapi_voice.vbs"); |
225 | QFile::copy(":/builtin/sapi_voice.vbs",QDir::tempPath() + "/sapi_voice.vbs"); | 226 | QFile::copy(":/builtin/sapi_voice.vbs",QDir::tempPath() + "/sapi_voice.vbs"); |
@@ -283,7 +284,7 @@ QStringList TTSSapi::getVoiceList(QString language) | |||
283 | execstring.replace("%exe",m_TTSexec); | 284 | execstring.replace("%exe",m_TTSexec); |
284 | execstring.replace("%lang",language); | 285 | execstring.replace("%lang",language); |
285 | 286 | ||
286 | if(settings->value(RbSettings::TtsUseSapi4).toBool()) | 287 | if(RbSettings::value(RbSettings::TtsUseSapi4).toBool()) |
287 | execstring.append(" /sapi4 "); | 288 | execstring.append(" /sapi4 "); |
288 | 289 | ||
289 | qDebug() << "init" << execstring; | 290 | qDebug() << "init" << execstring; |
@@ -348,7 +349,7 @@ bool TTSSapi::stop() | |||
348 | 349 | ||
349 | bool TTSSapi::configOk() | 350 | bool TTSSapi::configOk() |
350 | { | 351 | { |
351 | if(settings->subValue("sapi",RbSettings::TtsVoice).toString().isEmpty()) | 352 | if(RbSettings::subValue("sapi",RbSettings::TtsVoice).toString().isEmpty()) |
352 | return false; | 353 | return false; |
353 | return true; | 354 | return true; |
354 | } | 355 | } |
@@ -363,17 +364,17 @@ TTSFestival::~TTSFestival() | |||
363 | void TTSFestival::generateSettings() | 364 | void TTSFestival::generateSettings() |
364 | { | 365 | { |
365 | // server path | 366 | // server path |
366 | QString exepath = settings->subValue("festival-server",RbSettings::TtsPath).toString(); | 367 | QString exepath = RbSettings::subValue("festival-server",RbSettings::TtsPath).toString(); |
367 | if(exepath == "" ) exepath = findExecutable("festival"); | 368 | if(exepath == "" ) exepath = findExecutable("festival"); |
368 | insertSetting(eSERVERPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Path to Festival server:",exepath,EncTtsSetting::eBROWSEBTN)); | 369 | insertSetting(eSERVERPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Path to Festival server:",exepath,EncTtsSetting::eBROWSEBTN)); |
369 | 370 | ||
370 | // client path | 371 | // client path |
371 | QString clientpath = settings->subValue("festival-client",RbSettings::TtsPath).toString(); | 372 | QString clientpath = RbSettings::subValue("festival-client",RbSettings::TtsPath).toString(); |
372 | if(clientpath == "" ) clientpath = findExecutable("festival_client"); | 373 | if(clientpath == "" ) clientpath = findExecutable("festival_client"); |
373 | insertSetting(eCLIENTPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Path to Festival client:",clientpath,EncTtsSetting::eBROWSEBTN)); | 374 | insertSetting(eCLIENTPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Path to Festival client:",clientpath,EncTtsSetting::eBROWSEBTN)); |
374 | 375 | ||
375 | // voice | 376 | // voice |
376 | EncTtsSetting* setting = new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,"Voice:",settings->subValue("festival",RbSettings::TtsVoice),getVoiceList(exepath),EncTtsSetting::eREFRESHBTN); | 377 | EncTtsSetting* setting = new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,"Voice:",RbSettings::subValue("festival",RbSettings::TtsVoice),getVoiceList(exepath),EncTtsSetting::eREFRESHBTN); |
377 | connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceList())); | 378 | connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceList())); |
378 | connect(setting,SIGNAL(dataChanged()),this,SLOT(clearVoiceDescription())); | 379 | connect(setting,SIGNAL(dataChanged()),this,SLOT(clearVoiceDescription())); |
379 | insertSetting(eVOICE,setting); | 380 | insertSetting(eVOICE,setting); |
@@ -387,11 +388,11 @@ void TTSFestival::generateSettings() | |||
387 | void TTSFestival::saveSettings() | 388 | void TTSFestival::saveSettings() |
388 | { | 389 | { |
389 | //save settings in user config | 390 | //save settings in user config |
390 | settings->setSubValue("festival-server",RbSettings::TtsPath,getSetting(eSERVERPATH)->current().toString()); | 391 | RbSettings::setSubValue("festival-server",RbSettings::TtsPath,getSetting(eSERVERPATH)->current().toString()); |
391 | settings->setSubValue("festival-client",RbSettings::TtsPath,getSetting(eCLIENTPATH)->current().toString()); | 392 | RbSettings::setSubValue("festival-client",RbSettings::TtsPath,getSetting(eCLIENTPATH)->current().toString()); |
392 | settings->setSubValue("festival",RbSettings::TtsVoice,getSetting(eVOICE)->current().toString()); | 393 | RbSettings::setSubValue("festival",RbSettings::TtsVoice,getSetting(eVOICE)->current().toString()); |
393 | 394 | ||
394 | settings->sync(); | 395 | RbSettings::sync(); |
395 | } | 396 | } |
396 | 397 | ||
397 | void TTSFestival::updateVoiceDescription() | 398 | void TTSFestival::updateVoiceDescription() |
@@ -420,7 +421,7 @@ void TTSFestival::startServer(QString path) | |||
420 | return; | 421 | return; |
421 | 422 | ||
422 | if(path == "") | 423 | if(path == "") |
423 | path = settings->subValue("festival-server",RbSettings::TtsPath).toString(); | 424 | path = RbSettings::subValue("festival-server",RbSettings::TtsPath).toString(); |
424 | 425 | ||
425 | serverProcess.start(QString("%1 --server").arg(path)); | 426 | serverProcess.start(QString("%1 --server").arg(path)); |
426 | serverProcess.waitForStarted(); | 427 | serverProcess.waitForStarted(); |
@@ -444,9 +445,9 @@ bool TTSFestival::start(QString* errStr) | |||
444 | { | 445 | { |
445 | (void) errStr; | 446 | (void) errStr; |
446 | ensureServerRunning(); | 447 | ensureServerRunning(); |
447 | if (!settings->subValue("festival",RbSettings::TtsVoice).toString().isEmpty()) | 448 | if (!RbSettings::subValue("festival",RbSettings::TtsVoice).toString().isEmpty()) |
448 | queryServer(QString("(voice.select '%1)") | 449 | queryServer(QString("(voice.select '%1)") |
449 | .arg(settings->subValue("festival", RbSettings::TtsVoice).toString())); | 450 | .arg(RbSettings::subValue("festival", RbSettings::TtsVoice).toString())); |
450 | 451 | ||
451 | return true; | 452 | return true; |
452 | } | 453 | } |
@@ -463,7 +464,7 @@ TTSStatus TTSFestival::voice(QString text, QString wavfile, QString* errStr) | |||
463 | { | 464 | { |
464 | qDebug() << text << "->" << wavfile; | 465 | qDebug() << text << "->" << wavfile; |
465 | 466 | ||
466 | QString path = settings->subValue("festival-client",RbSettings::TtsPath).toString(); | 467 | QString path = RbSettings::subValue("festival-client",RbSettings::TtsPath).toString(); |
467 | QString cmd = QString("%1 --server localhost --otype riff --ttw --withlisp --output \"%2\" - ").arg(path).arg(wavfile); | 468 | QString cmd = QString("%1 --server localhost --otype riff --ttw --withlisp --output \"%2\" - ").arg(path).arg(wavfile); |
468 | qDebug() << cmd; | 469 | qDebug() << cmd; |
469 | 470 | ||
@@ -493,13 +494,13 @@ TTSStatus TTSFestival::voice(QString text, QString wavfile, QString* errStr) | |||
493 | 494 | ||
494 | bool TTSFestival::configOk() | 495 | bool TTSFestival::configOk() |
495 | { | 496 | { |
496 | QString serverPath = settings->subValue("festival-server",RbSettings::TtsPath).toString(); | 497 | QString serverPath = RbSettings::subValue("festival-server",RbSettings::TtsPath).toString(); |
497 | QString clientPath = settings->subValue("festival-client",RbSettings::TtsVoice).toString(); | 498 | QString clientPath = RbSettings::subValue("festival-client",RbSettings::TtsVoice).toString(); |
498 | 499 | ||
499 | bool ret = QFileInfo(serverPath).isExecutable() && | 500 | bool ret = QFileInfo(serverPath).isExecutable() && |
500 | QFileInfo(clientPath).isExecutable(); | 501 | QFileInfo(clientPath).isExecutable(); |
501 | if(settings->subValue("festival",RbSettings::TtsVoice).toString().size() > 0 && voices.size() > 0) | 502 | if(RbSettings::subValue("festival",RbSettings::TtsVoice).toString().size() > 0 && voices.size() > 0) |
502 | ret = ret && (voices.indexOf(settings->subValue("festival",RbSettings::TtsVoice).toString()) != -1); | 503 | ret = ret && (voices.indexOf(RbSettings::subValue("festival",RbSettings::TtsVoice).toString()) != -1); |
503 | return ret; | 504 | return ret; |
504 | } | 505 | } |
505 | 506 | ||