mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-12-09 05:05:20 -05:00
Code police.
- remove tabs. - remove trailing spaces. - break overly long lines. - fix indentation errors. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25008 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
be90f74e89
commit
897e041900
6 changed files with 115 additions and 80 deletions
|
|
@ -44,8 +44,10 @@ void TTSExes::generateSettings()
|
||||||
|
|
||||||
void TTSExes::saveSettings()
|
void TTSExes::saveSettings()
|
||||||
{
|
{
|
||||||
RbSettings::setSubValue(m_name,RbSettings::TtsPath,getSetting(eEXEPATH)->current().toString());
|
RbSettings::setSubValue(m_name,RbSettings::TtsPath,
|
||||||
RbSettings::setSubValue(m_name,RbSettings::TtsOptions,getSetting(eOPTIONS)->current().toString());
|
getSetting(eEXEPATH)->current().toString());
|
||||||
|
RbSettings::setSubValue(m_name,RbSettings::TtsOptions,
|
||||||
|
getSetting(eOPTIONS)->current().toString());
|
||||||
RbSettings::sync();
|
RbSettings::sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,15 +31,15 @@ class TTSExes : public TTSBase
|
||||||
eEXEPATH,
|
eEXEPATH,
|
||||||
eOPTIONS
|
eOPTIONS
|
||||||
};
|
};
|
||||||
|
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
TTSExes(QString name,QObject* parent=NULL);
|
TTSExes(QString name,QObject* parent=NULL);
|
||||||
TTSStatus voice(QString text,QString wavfile, QString *errStr);
|
TTSStatus voice(QString text, QString wavfile, QString *errStr);
|
||||||
bool start(QString *errStr);
|
bool start(QString *errStr);
|
||||||
bool stop() {return true;}
|
bool stop() {return true;}
|
||||||
|
|
||||||
// for settings
|
// for settings
|
||||||
void generateSettings();
|
void generateSettings();
|
||||||
void saveSettings();
|
void saveSettings();
|
||||||
bool configOk();
|
bool configOk();
|
||||||
|
|
|
||||||
|
|
@ -29,19 +29,26 @@ TTSFestival::~TTSFestival()
|
||||||
void TTSFestival::generateSettings()
|
void TTSFestival::generateSettings()
|
||||||
{
|
{
|
||||||
// server path
|
// server path
|
||||||
QString exepath = RbSettings::subValue("festival-server",RbSettings::TtsPath).toString();
|
QString exepath = RbSettings::subValue("festival-server",
|
||||||
|
RbSettings::TtsPath).toString();
|
||||||
if(exepath == "" ) exepath = findExecutable("festival");
|
if(exepath == "" ) exepath = findExecutable("festival");
|
||||||
insertSetting(eSERVERPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Path to Festival server:",exepath,EncTtsSetting::eBROWSEBTN));
|
insertSetting(eSERVERPATH,new EncTtsSetting(this,
|
||||||
|
EncTtsSetting::eSTRING, "Path to Festival server:",
|
||||||
|
exepath,EncTtsSetting::eBROWSEBTN));
|
||||||
|
|
||||||
// client path
|
// client path
|
||||||
QString clientpath = RbSettings::subValue("festival-client",RbSettings::TtsPath).toString();
|
QString clientpath = RbSettings::subValue("festival-client",
|
||||||
|
RbSettings::TtsPath).toString();
|
||||||
if(clientpath == "" ) clientpath = findExecutable("festival_client");
|
if(clientpath == "" ) clientpath = findExecutable("festival_client");
|
||||||
insertSetting(eCLIENTPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING,
|
insertSetting(eCLIENTPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING,
|
||||||
tr("Path to Festival client:"),clientpath,EncTtsSetting::eBROWSEBTN));
|
tr("Path to Festival client:"),
|
||||||
|
clientpath,EncTtsSetting::eBROWSEBTN));
|
||||||
|
|
||||||
// voice
|
// voice
|
||||||
EncTtsSetting* setting = new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,
|
EncTtsSetting* setting = new EncTtsSetting(this,
|
||||||
tr("Voice:"),RbSettings::subValue("festival",RbSettings::TtsVoice),getVoiceList(exepath),EncTtsSetting::eREFRESHBTN);
|
EncTtsSetting::eSTRINGLIST, tr("Voice:"),
|
||||||
|
RbSettings::subValue("festival", RbSettings::TtsVoice),
|
||||||
|
getVoiceList(exepath), EncTtsSetting::eREFRESHBTN);
|
||||||
connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceList()));
|
connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceList()));
|
||||||
connect(setting,SIGNAL(dataChanged()),this,SLOT(clearVoiceDescription()));
|
connect(setting,SIGNAL(dataChanged()),this,SLOT(clearVoiceDescription()));
|
||||||
insertSetting(eVOICE,setting);
|
insertSetting(eVOICE,setting);
|
||||||
|
|
@ -56,9 +63,12 @@ void TTSFestival::generateSettings()
|
||||||
void TTSFestival::saveSettings()
|
void TTSFestival::saveSettings()
|
||||||
{
|
{
|
||||||
//save settings in user config
|
//save settings in user config
|
||||||
RbSettings::setSubValue("festival-server",RbSettings::TtsPath,getSetting(eSERVERPATH)->current().toString());
|
RbSettings::setSubValue("festival-server",
|
||||||
RbSettings::setSubValue("festival-client",RbSettings::TtsPath,getSetting(eCLIENTPATH)->current().toString());
|
RbSettings::TtsPath,getSetting(eSERVERPATH)->current().toString());
|
||||||
RbSettings::setSubValue("festival",RbSettings::TtsVoice,getSetting(eVOICE)->current().toString());
|
RbSettings::setSubValue("festival-client",
|
||||||
|
RbSettings::TtsPath,getSetting(eCLIENTPATH)->current().toString());
|
||||||
|
RbSettings::setSubValue("festival",
|
||||||
|
RbSettings::TtsVoice,getSetting(eVOICE)->current().toString());
|
||||||
|
|
||||||
RbSettings::sync();
|
RbSettings::sync();
|
||||||
}
|
}
|
||||||
|
|
@ -66,7 +76,8 @@ void TTSFestival::saveSettings()
|
||||||
void TTSFestival::updateVoiceDescription()
|
void TTSFestival::updateVoiceDescription()
|
||||||
{
|
{
|
||||||
// get voice Info with current voice and path
|
// get voice Info with current voice and path
|
||||||
QString info = getVoiceInfo(getSetting(eVOICE)->current().toString(),getSetting(eSERVERPATH)->current().toString());
|
QString info = getVoiceInfo(getSetting(eVOICE)->current().toString(),
|
||||||
|
getSetting(eSERVERPATH)->current().toString());
|
||||||
getSetting(eVOICEDESC)->setCurrent(info);
|
getSetting(eVOICEDESC)->setCurrent(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -132,8 +143,10 @@ TTSStatus TTSFestival::voice(QString text, QString wavfile, QString* errStr)
|
||||||
{
|
{
|
||||||
qDebug() << text << "->" << wavfile;
|
qDebug() << text << "->" << wavfile;
|
||||||
|
|
||||||
QString path = RbSettings::subValue("festival-client",RbSettings::TtsPath).toString();
|
QString path = RbSettings::subValue("festival-client",
|
||||||
QString cmd = QString("%1 --server localhost --otype riff --ttw --withlisp --output \"%2\" - ").arg(path).arg(wavfile);
|
RbSettings::TtsPath).toString();
|
||||||
|
QString cmd = QString("%1 --server localhost --otype riff --ttw --withlisp"
|
||||||
|
" --output \"%2\" - ").arg(path).arg(wavfile);
|
||||||
qDebug() << cmd;
|
qDebug() << cmd;
|
||||||
|
|
||||||
QProcess clientProcess;
|
QProcess clientProcess;
|
||||||
|
|
@ -162,13 +175,17 @@ TTSStatus TTSFestival::voice(QString text, QString wavfile, QString* errStr)
|
||||||
|
|
||||||
bool TTSFestival::configOk()
|
bool TTSFestival::configOk()
|
||||||
{
|
{
|
||||||
QString serverPath = RbSettings::subValue("festival-server",RbSettings::TtsPath).toString();
|
QString serverPath = RbSettings::subValue("festival-server",
|
||||||
QString clientPath = RbSettings::subValue("festival-client",RbSettings::TtsPath).toString();
|
RbSettings::TtsPath).toString();
|
||||||
|
QString clientPath = RbSettings::subValue("festival-client",
|
||||||
|
RbSettings::TtsPath).toString();
|
||||||
|
|
||||||
bool ret = QFileInfo(serverPath).isExecutable() &&
|
bool ret = QFileInfo(serverPath).isExecutable() &&
|
||||||
QFileInfo(clientPath).isExecutable();
|
QFileInfo(clientPath).isExecutable();
|
||||||
if(RbSettings::subValue("festival",RbSettings::TtsVoice).toString().size() > 0 && voices.size() > 0)
|
if(RbSettings::subValue("festival",RbSettings::TtsVoice).toString().size() > 0
|
||||||
ret = ret && (voices.indexOf(RbSettings::subValue("festival",RbSettings::TtsVoice).toString()) != -1);
|
&& voices.size() > 0)
|
||||||
|
ret = ret && (voices.indexOf(RbSettings::subValue("festival",
|
||||||
|
RbSettings::TtsVoice).toString()) != -1);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -213,7 +230,8 @@ QString TTSFestival::getVoiceInfo(QString voice,QString path)
|
||||||
if(voiceDescriptions.contains(voice))
|
if(voiceDescriptions.contains(voice))
|
||||||
return voiceDescriptions[voice];
|
return voiceDescriptions[voice];
|
||||||
|
|
||||||
QString response = queryServer(QString("(voice.description '%1)").arg(voice), 3000,path);
|
QString response = queryServer(QString("(voice.description '%1)").arg(voice),
|
||||||
|
3000,path);
|
||||||
|
|
||||||
if (response == "")
|
if (response == "")
|
||||||
{
|
{
|
||||||
|
|
@ -221,7 +239,8 @@ QString TTSFestival::getVoiceInfo(QString voice,QString path)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
response = response.remove(QRegExp("(description \"*\")", Qt::CaseInsensitive, QRegExp::Wildcard));
|
response = response.remove(QRegExp("(description \"*\")",
|
||||||
|
Qt::CaseInsensitive, QRegExp::Wildcard));
|
||||||
qDebug() << "voiceInfo w/o descr: " << response;
|
qDebug() << "voiceInfo w/o descr: " << response;
|
||||||
response = response.remove(')');
|
response = response.remove(')');
|
||||||
QStringList responseLines = response.split('(', QString::SkipEmptyParts);
|
QStringList responseLines = response.split('(', QString::SkipEmptyParts);
|
||||||
|
|
@ -238,8 +257,10 @@ QString TTSFestival::getVoiceInfo(QString voice,QString path)
|
||||||
int firstSpace = line.indexOf(' ');
|
int firstSpace = line.indexOf(' ');
|
||||||
if (firstSpace > 0)
|
if (firstSpace > 0)
|
||||||
{
|
{
|
||||||
line = line.insert(firstSpace, ':'); // add a colon between the key and the value
|
// add a colon between the key and the value
|
||||||
line[firstSpace+2] = line[firstSpace+2].toUpper(); // capitalize the value
|
line = line.insert(firstSpace, ':');
|
||||||
|
// capitalize the value
|
||||||
|
line[firstSpace+2] = line[firstSpace+2].toUpper();
|
||||||
}
|
}
|
||||||
|
|
||||||
description += line + "\n";
|
description += line + "\n";
|
||||||
|
|
@ -298,7 +319,8 @@ QString TTSFestival::queryServer(QString query, int timeout,QString path)
|
||||||
emit busyEnd();
|
emit busyEnd();
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
/* make sure we wait a little as we don't want to flood the server with requests */
|
/* make sure we wait a little as we don't want to flood the server
|
||||||
|
* with requests */
|
||||||
QDateTime tmpEndTime = QDateTime::currentDateTime().addMSecs(500);
|
QDateTime tmpEndTime = QDateTime::currentDateTime().addMSecs(500);
|
||||||
while(QDateTime::currentDateTime() < tmpEndTime)
|
while(QDateTime::currentDateTime() < tmpEndTime)
|
||||||
QCoreApplication::processEvents(QEventLoop::AllEvents);
|
QCoreApplication::processEvents(QEventLoop::AllEvents);
|
||||||
|
|
|
||||||
|
|
@ -33,34 +33,34 @@ class TTSFestival : public TTSBase
|
||||||
eVOICE,
|
eVOICE,
|
||||||
eVOICEDESC
|
eVOICEDESC
|
||||||
};
|
};
|
||||||
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
TTSFestival(QObject* parent=NULL) :TTSBase(parent) {}
|
|
||||||
~TTSFestival();
|
|
||||||
bool start(QString *errStr);
|
|
||||||
bool stop();
|
|
||||||
TTSStatus voice(QString text,QString wavfile, QString *errStr);
|
|
||||||
|
|
||||||
// for settings
|
Q_OBJECT
|
||||||
bool configOk();
|
public:
|
||||||
void generateSettings();
|
TTSFestival(QObject* parent=NULL) : TTSBase(parent) {}
|
||||||
void saveSettings();
|
~TTSFestival();
|
||||||
|
bool start(QString *errStr);
|
||||||
private slots:
|
bool stop();
|
||||||
void updateVoiceList();
|
TTSStatus voice(QString text,QString wavfile, QString *errStr);
|
||||||
void updateVoiceDescription();
|
|
||||||
void clearVoiceDescription();
|
// for settings
|
||||||
private:
|
bool configOk();
|
||||||
QStringList getVoiceList(QString path ="");
|
void generateSettings();
|
||||||
QString getVoiceInfo(QString voice,QString path ="");
|
void saveSettings();
|
||||||
|
|
||||||
inline void startServer(QString path="");
|
private slots:
|
||||||
inline void ensureServerRunning(QString path="");
|
void updateVoiceList();
|
||||||
QString queryServer(QString query, int timeout = -1,QString path="");
|
void updateVoiceDescription();
|
||||||
QProcess serverProcess;
|
void clearVoiceDescription();
|
||||||
QStringList voices;
|
private:
|
||||||
QMap<QString, QString> voiceDescriptions;
|
QStringList getVoiceList(QString path ="");
|
||||||
|
QString getVoiceInfo(QString voice,QString path ="");
|
||||||
|
|
||||||
|
inline void startServer(QString path="");
|
||||||
|
inline void ensureServerRunning(QString path="");
|
||||||
|
QString queryServer(QString query, int timeout = -1,QString path="");
|
||||||
|
QProcess serverProcess;
|
||||||
|
QStringList voices;
|
||||||
|
QMap<QString, QString> voiceDescriptions;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,8 @@
|
||||||
|
|
||||||
TTSSapi::TTSSapi(QObject* parent) : TTSBase(parent)
|
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\"";
|
||||||
defaultLanguage ="english";
|
defaultLanguage ="english";
|
||||||
m_sapi4 =false;
|
m_sapi4 =false;
|
||||||
}
|
}
|
||||||
|
|
@ -35,12 +36,15 @@ void TTSSapi::generateSettings()
|
||||||
QStringList languages = SystemInfo::languages();
|
QStringList languages = SystemInfo::languages();
|
||||||
languages.sort();
|
languages.sort();
|
||||||
EncTtsSetting* setting =new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,
|
EncTtsSetting* setting =new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,
|
||||||
tr("Language:"),RbSettings::subValue("sapi",RbSettings::TtsLanguage),languages);
|
tr("Language:"),RbSettings::subValue("sapi",RbSettings::TtsLanguage),
|
||||||
|
languages);
|
||||||
connect(setting,SIGNAL(dataChanged()),this,SLOT(updateVoiceList()));
|
connect(setting,SIGNAL(dataChanged()),this,SLOT(updateVoiceList()));
|
||||||
insertSetting(eLANGUAGE,setting);
|
insertSetting(eLANGUAGE,setting);
|
||||||
// voice
|
// voice
|
||||||
setting = new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,
|
setting = new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,
|
||||||
tr("Voice:"),RbSettings::subValue("sapi",RbSettings::TtsVoice),getVoiceList(RbSettings::subValue("sapi",RbSettings::TtsLanguage).toString()),EncTtsSetting::eREFRESHBTN);
|
tr("Voice:"),RbSettings::subValue("sapi",RbSettings::TtsVoice),
|
||||||
|
getVoiceList(RbSettings::subValue("sapi",RbSettings::TtsLanguage).toString()),
|
||||||
|
EncTtsSetting::eREFRESHBTN);
|
||||||
connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceList()));
|
connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceList()));
|
||||||
insertSetting(eVOICE,setting);
|
insertSetting(eVOICE,setting);
|
||||||
//speed
|
//speed
|
||||||
|
|
@ -55,10 +59,14 @@ void TTSSapi::generateSettings()
|
||||||
void TTSSapi::saveSettings()
|
void TTSSapi::saveSettings()
|
||||||
{
|
{
|
||||||
//save settings in user config
|
//save settings in user config
|
||||||
RbSettings::setSubValue("sapi",RbSettings::TtsLanguage,getSetting(eLANGUAGE)->current().toString());
|
RbSettings::setSubValue("sapi",RbSettings::TtsLanguage,
|
||||||
RbSettings::setSubValue("sapi",RbSettings::TtsVoice,getSetting(eVOICE)->current().toString());
|
getSetting(eLANGUAGE)->current().toString());
|
||||||
RbSettings::setSubValue("sapi",RbSettings::TtsSpeed,getSetting(eSPEED)->current().toInt());
|
RbSettings::setSubValue("sapi",RbSettings::TtsVoice,
|
||||||
RbSettings::setSubValue("sapi",RbSettings::TtsOptions,getSetting(eOPTIONS)->current().toString());
|
getSetting(eVOICE)->current().toString());
|
||||||
|
RbSettings::setSubValue("sapi",RbSettings::TtsSpeed,
|
||||||
|
getSetting(eSPEED)->current().toInt());
|
||||||
|
RbSettings::setSubValue("sapi",RbSettings::TtsOptions,
|
||||||
|
getSetting(eOPTIONS)->current().toString());
|
||||||
|
|
||||||
RbSettings::sync();
|
RbSettings::sync();
|
||||||
}
|
}
|
||||||
|
|
@ -168,10 +176,11 @@ QStringList TTSSapi::getVoiceList(QString language)
|
||||||
}
|
}
|
||||||
|
|
||||||
delete voicescript;
|
delete voicescript;
|
||||||
QFile::setPermissions(QDir::tempPath() +"/sapi_voice.vbs",QFile::ReadOwner |QFile::WriteOwner|QFile::ExeOwner
|
QFile::setPermissions(QDir::tempPath() +"/sapi_voice.vbs",
|
||||||
|QFile::ReadUser| QFile::WriteUser| QFile::ExeUser
|
QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner
|
||||||
|QFile::ReadGroup |QFile::WriteGroup |QFile::ExeGroup
|
| QFile::ReadUser | QFile::WriteUser | QFile::ExeUser
|
||||||
|QFile::ReadOther |QFile::WriteOther |QFile::ExeOther );
|
| QFile::ReadGroup | QFile::WriteGroup | QFile::ExeGroup
|
||||||
|
| QFile::ReadOther | QFile::WriteOther | QFile::ExeOther );
|
||||||
QFile::remove(QDir::tempPath() +"/sapi_voice.vbs");
|
QFile::remove(QDir::tempPath() +"/sapi_voice.vbs");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -198,10 +207,11 @@ bool TTSSapi::stop()
|
||||||
voicescript->waitForFinished();
|
voicescript->waitForFinished();
|
||||||
delete voicestream;
|
delete voicestream;
|
||||||
delete voicescript;
|
delete voicescript;
|
||||||
QFile::setPermissions(QDir::tempPath() +"/sapi_voice.vbs",QFile::ReadOwner |QFile::WriteOwner|QFile::ExeOwner
|
QFile::setPermissions(QDir::tempPath() +"/sapi_voice.vbs",
|
||||||
|QFile::ReadUser| QFile::WriteUser| QFile::ExeUser
|
QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner
|
||||||
|QFile::ReadGroup |QFile::WriteGroup |QFile::ExeGroup
|
| QFile::ReadUser | QFile::WriteUser | QFile::ExeUser
|
||||||
|QFile::ReadOther |QFile::WriteOther |QFile::ExeOther );
|
| QFile::ReadGroup | QFile::WriteGroup | QFile::ExeGroup
|
||||||
|
| QFile::ReadOther | QFile::WriteOther | QFile::ExeOther );
|
||||||
QFile::remove(QDir::tempPath() +"/sapi_voice.vbs");
|
QFile::remove(QDir::tempPath() +"/sapi_voice.vbs");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -212,3 +222,4 @@ bool TTSSapi::configOk()
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,30 +34,30 @@ class TTSSapi : public TTSBase
|
||||||
eSPEED,
|
eSPEED,
|
||||||
eOPTIONS
|
eOPTIONS
|
||||||
};
|
};
|
||||||
|
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
TTSSapi(QObject* parent=NULL);
|
TTSSapi(QObject* parent=NULL);
|
||||||
|
|
||||||
TTSStatus voice(QString text,QString wavfile, QString *errStr);
|
TTSStatus voice(QString text,QString wavfile, QString *errStr);
|
||||||
bool start(QString *errStr);
|
bool start(QString *errStr);
|
||||||
bool stop();
|
bool stop();
|
||||||
|
|
||||||
// for settings
|
// for settings
|
||||||
bool configOk();
|
bool configOk();
|
||||||
void generateSettings();
|
void generateSettings();
|
||||||
void saveSettings();
|
void saveSettings();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void updateVoiceList();
|
void updateVoiceList();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QStringList getVoiceList(QString language);
|
QStringList getVoiceList(QString language);
|
||||||
|
|
||||||
QProcess* voicescript;
|
QProcess* voicescript;
|
||||||
QTextStream* voicestream;
|
QTextStream* voicestream;
|
||||||
QString defaultLanguage;
|
QString defaultLanguage;
|
||||||
|
|
||||||
QString m_TTSexec;
|
QString m_TTSexec;
|
||||||
QString m_TTSOpts;
|
QString m_TTSOpts;
|
||||||
QString m_TTSTemplate;
|
QString m_TTSTemplate;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue