forked from len0rd/rockbox
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
This commit is contained in:
parent
4a9ba12ca7
commit
6be7dabdd9
2 changed files with 35 additions and 34 deletions
|
|
@ -23,10 +23,11 @@
|
|||
|
||||
TTSSapi::TTSSapi(QObject* parent) : TTSBase(parent)
|
||||
{
|
||||
m_TTSTemplate = "cscript //nologo \"%exe\" /language:%lang /voice:\"%voice\""
|
||||
" /speed:%speed \"%options\"";
|
||||
m_TTSTemplate = "cscript //nologo \"%exe\" /language:%lang "
|
||||
"/voice:\"%voice\" /speed:%speed \"%options\"";
|
||||
m_TTSVoiceTemplate = "cscript //nologo \"%exe\" /language:%lang /listvoices";
|
||||
m_TTSType = "sapi";
|
||||
defaultLanguage = "english";
|
||||
m_sapi4 = false;
|
||||
m_started = false;
|
||||
}
|
||||
|
||||
|
|
@ -43,40 +44,44 @@ void TTSSapi::generateSettings()
|
|||
for(int i = 0; i < languages.values().size(); ++i) {
|
||||
langs.append(languages.values().at(i).at(0));
|
||||
}
|
||||
EncTtsSetting* setting =new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,
|
||||
tr("Language:"),RbSettings::subValue("sapi",RbSettings::TtsLanguage),
|
||||
langs);
|
||||
EncTtsSetting* setting = new EncTtsSetting(this,
|
||||
EncTtsSetting::eSTRINGLIST, tr("Language:"),
|
||||
RbSettings::subValue(m_TTSType, RbSettings::TtsLanguage),
|
||||
langs);
|
||||
connect(setting,SIGNAL(dataChanged()),this,SLOT(updateVoiceList()));
|
||||
insertSetting(eLANGUAGE,setting);
|
||||
// voice
|
||||
setting = new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,
|
||||
tr("Voice:"),RbSettings::subValue("sapi",RbSettings::TtsVoice),
|
||||
getVoiceList(RbSettings::subValue("sapi",RbSettings::TtsLanguage).toString()),
|
||||
EncTtsSetting::eREFRESHBTN);
|
||||
setting = new EncTtsSetting(this,
|
||||
EncTtsSetting::eSTRINGLIST, tr("Voice:"),
|
||||
RbSettings::subValue(m_TTSType, RbSettings::TtsVoice),
|
||||
getVoiceList(RbSettings::subValue(m_TTSType,
|
||||
RbSettings::TtsLanguage).toString()),
|
||||
EncTtsSetting::eREFRESHBTN);
|
||||
connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceList()));
|
||||
insertSetting(eVOICE,setting);
|
||||
//speed
|
||||
int speed = RbSettings::subValue("sapi", RbSettings::TtsSpeed).toInt();
|
||||
int speed = RbSettings::subValue(m_TTSType, RbSettings::TtsSpeed).toInt();
|
||||
if(speed > 10 || speed < -10)
|
||||
speed = 0;
|
||||
insertSetting(eSPEED, new EncTtsSetting(this, EncTtsSetting::eINT,
|
||||
tr("Speed:"), speed, -10, 10));
|
||||
insertSetting(eSPEED, new EncTtsSetting(this,
|
||||
EncTtsSetting::eINT, tr("Speed:"), speed, -10, 10));
|
||||
// options
|
||||
insertSetting(eOPTIONS,new EncTtsSetting(this,EncTtsSetting::eSTRING,
|
||||
tr("Options:"),RbSettings::subValue("sapi",RbSettings::TtsOptions)));
|
||||
insertSetting(eOPTIONS, new EncTtsSetting(this,
|
||||
EncTtsSetting::eSTRING, tr("Options:"),
|
||||
RbSettings::subValue(m_TTSType, RbSettings::TtsOptions)));
|
||||
|
||||
}
|
||||
|
||||
void TTSSapi::saveSettings()
|
||||
{
|
||||
//save settings in user config
|
||||
RbSettings::setSubValue("sapi",RbSettings::TtsLanguage,
|
||||
RbSettings::setSubValue(m_TTSType, RbSettings::TtsLanguage,
|
||||
getSetting(eLANGUAGE)->current().toString());
|
||||
RbSettings::setSubValue("sapi",RbSettings::TtsVoice,
|
||||
RbSettings::setSubValue(m_TTSType, RbSettings::TtsVoice,
|
||||
getSetting(eVOICE)->current().toString());
|
||||
RbSettings::setSubValue("sapi",RbSettings::TtsSpeed,
|
||||
RbSettings::setSubValue(m_TTSType, RbSettings::TtsSpeed,
|
||||
getSetting(eSPEED)->current().toInt());
|
||||
RbSettings::setSubValue("sapi",RbSettings::TtsOptions,
|
||||
RbSettings::setSubValue(m_TTSType, RbSettings::TtsOptions,
|
||||
getSetting(eOPTIONS)->current().toString());
|
||||
|
||||
RbSettings::sync();
|
||||
|
|
@ -94,11 +99,10 @@ void TTSSapi::updateVoiceList()
|
|||
bool TTSSapi::start(QString *errStr)
|
||||
{
|
||||
|
||||
m_TTSOpts = RbSettings::subValue("sapi",RbSettings::TtsOptions).toString();
|
||||
m_TTSLanguage =RbSettings::subValue("sapi",RbSettings::TtsLanguage).toString();
|
||||
m_TTSVoice=RbSettings::subValue("sapi",RbSettings::TtsVoice).toString();
|
||||
m_TTSSpeed=RbSettings::subValue("sapi",RbSettings::TtsSpeed).toString();
|
||||
m_sapi4 = RbSettings::subValue("sapi",RbSettings::TtsUseSapi4).toBool();
|
||||
m_TTSOpts = RbSettings::subValue(m_TTSType, RbSettings::TtsOptions).toString();
|
||||
m_TTSLanguage =RbSettings::subValue(m_TTSType, RbSettings::TtsLanguage).toString();
|
||||
m_TTSVoice=RbSettings::subValue(m_TTSType, RbSettings::TtsVoice).toString();
|
||||
m_TTSSpeed=RbSettings::subValue(m_TTSType, RbSettings::TtsSpeed).toString();
|
||||
|
||||
QFile::remove(QDir::tempPath() +"/sapi_voice.vbs");
|
||||
QFile::copy(":/builtin/sapi_voice.vbs",QDir::tempPath() + "/sapi_voice.vbs");
|
||||
|
|
@ -118,9 +122,6 @@ bool TTSSapi::start(QString *errStr)
|
|||
execstring.replace("%voice",m_TTSVoice);
|
||||
execstring.replace("%speed",m_TTSSpeed);
|
||||
|
||||
if(m_sapi4)
|
||||
execstring.append(" /sapi4 ");
|
||||
|
||||
qDebug() << "[TTSSapi] Start:" << execstring;
|
||||
voicescript = new QProcess(NULL);
|
||||
//connect(voicescript,SIGNAL(readyReadStandardError()),this,SLOT(error()));
|
||||
|
|
@ -179,13 +180,10 @@ QStringList TTSSapi::getVoiceList(QString language)
|
|||
return result;
|
||||
|
||||
// create the voice process
|
||||
QString execstring = "cscript //nologo \"%exe\" /language:%lang /listvoices";
|
||||
QString execstring = m_TTSVoiceTemplate;
|
||||
execstring.replace("%exe",m_TTSexec);
|
||||
execstring.replace("%lang",language);
|
||||
|
||||
if(RbSettings::value(RbSettings::TtsUseSapi4).toBool())
|
||||
execstring.append(" /sapi4 ");
|
||||
|
||||
qDebug() << "[TTSSapi] Start:" << execstring;
|
||||
voicescript = new QProcess(NULL);
|
||||
voicescript->start(execstring);
|
||||
|
|
@ -263,7 +261,7 @@ bool TTSSapi::stop()
|
|||
|
||||
bool TTSSapi::configOk()
|
||||
{
|
||||
if(RbSettings::subValue("sapi",RbSettings::TtsVoice).toString().isEmpty())
|
||||
if(RbSettings::subValue(m_TTSType, RbSettings::TtsVoice).toString().isEmpty())
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,12 +61,15 @@ class TTSSapi : public TTSBase
|
|||
|
||||
QString m_TTSexec;
|
||||
QString m_TTSOpts;
|
||||
QString m_TTSTemplate;
|
||||
QString m_TTSLanguage;
|
||||
QString m_TTSVoice;
|
||||
QString m_TTSSpeed;
|
||||
bool m_sapi4;
|
||||
bool m_started;
|
||||
|
||||
protected:
|
||||
QString m_TTSTemplate;
|
||||
QString m_TTSVoiceTemplate;
|
||||
QString m_TTSType;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue