diff --git a/rbutil/rbutilqt/base/ttsbase.h b/rbutil/rbutilqt/base/ttsbase.h index c6bbdcfb0b..fdd2c98344 100644 --- a/rbutil/rbutilqt/base/ttsbase.h +++ b/rbutil/rbutilqt/base/ttsbase.h @@ -47,6 +47,7 @@ class TTSBase : public EncTtsSettingInterface //! child class should stop virtual bool stop() =0; + virtual QString voiceVendor(void) = 0; // configuration //! Child class should return true, when configuration is good virtual bool configOk()=0; @@ -60,7 +61,7 @@ class TTSBase : public EncTtsSettingInterface // static functions static TTSBase* getTTS(QObject* parent,QString ttsname); static QStringList getTTSList(); - static QString getTTSName(QString tts); + static QString getTTSName(QString tts); private: //inits the tts List diff --git a/rbutil/rbutilqt/base/ttscarbon.h b/rbutil/rbutilqt/base/ttscarbon.h index be7590240a..d06884e72a 100644 --- a/rbutil/rbutilqt/base/ttscarbon.h +++ b/rbutil/rbutilqt/base/ttscarbon.h @@ -45,6 +45,7 @@ class TTSCarbon : public TTSBase bool start(QString *errStr); //! child class should stop bool stop() ; + QString voiceVendor(void) { return QString(); } // configuration //! Child class should return true, when configuration is good diff --git a/rbutil/rbutilqt/base/ttsexes.h b/rbutil/rbutilqt/base/ttsexes.h index 04efb4ce50..7ab3757fd4 100644 --- a/rbutil/rbutilqt/base/ttsexes.h +++ b/rbutil/rbutilqt/base/ttsexes.h @@ -38,6 +38,7 @@ class TTSExes : public TTSBase TTSStatus voice(QString text, QString wavfile, QString *errStr); bool start(QString *errStr); bool stop() {return true;} + QString voiceVendor(void) { return QString(); } Capabilities capabilities(); // for settings diff --git a/rbutil/rbutilqt/base/ttsfestival.h b/rbutil/rbutilqt/base/ttsfestival.h index 6c64c61532..5e9f5573f5 100644 --- a/rbutil/rbutilqt/base/ttsfestival.h +++ b/rbutil/rbutilqt/base/ttsfestival.h @@ -42,6 +42,7 @@ class TTSFestival : public TTSBase bool start(QString *errStr); bool stop(); TTSStatus voice(QString text,QString wavfile, QString *errStr); + QString voiceVendor(void) { return QString(); } Capabilities capabilities(); // for settings diff --git a/rbutil/rbutilqt/base/ttssapi.cpp b/rbutil/rbutilqt/base/ttssapi.cpp index cd9ced8083..cb7d8a5057 100644 --- a/rbutil/rbutilqt/base/ttssapi.cpp +++ b/rbutil/rbutilqt/base/ttssapi.cpp @@ -26,8 +26,9 @@ TTSSapi::TTSSapi(QObject* parent) : TTSBase(parent) { m_TTSTemplate = "cscript //nologo \"%exe\" /language:%lang /voice:\"%voice\"" " /speed:%speed \"%options\""; - defaultLanguage ="english"; - m_sapi4 =false; + defaultLanguage = "english"; + m_sapi4 = false; + m_started = false; } TTSBase::Capabilities TTSSapi::capabilities() @@ -138,9 +139,29 @@ bool TTSSapi::start(QString *errStr) voicestream = new QTextStream(voicescript); voicestream->setCodec("UTF16-LE"); + m_started = true; return true; } +QString TTSSapi::voiceVendor(void) +{ + bool keeprunning = m_started; + QString vendor; + if(!m_started) { + QString error; + start(&error); + } + *voicestream << "QUERY\tVENDOR\r\n"; + voicestream->flush(); + while((vendor = voicestream->readLine()).isEmpty()) + QCoreApplication::processEvents(); + + qDebug() << "[TTSSAPI] TTS vendor:" << vendor; + if(!keeprunning) { + stop(); + } + return vendor; +} QStringList TTSSapi::getVoiceList(QString language) { @@ -226,6 +247,7 @@ bool TTSSapi::stop() | QFile::ReadGroup | QFile::WriteGroup | QFile::ExeGroup | QFile::ReadOther | QFile::WriteOther | QFile::ExeOther ); QFile::remove(QDir::tempPath() +"/sapi_voice.vbs"); + m_started = false; return true; } diff --git a/rbutil/rbutilqt/base/ttssapi.h b/rbutil/rbutilqt/base/ttssapi.h index 6070728a79..1cdf030884 100644 --- a/rbutil/rbutilqt/base/ttssapi.h +++ b/rbutil/rbutilqt/base/ttssapi.h @@ -42,6 +42,7 @@ class TTSSapi : public TTSBase TTSStatus voice(QString text,QString wavfile, QString *errStr); bool start(QString *errStr); bool stop(); + QString voiceVendor(void); Capabilities capabilities(); // for settings @@ -49,8 +50,8 @@ class TTSSapi : public TTSBase void generateSettings(); void saveSettings(); - private slots: - void updateVoiceList(); + private slots: + void updateVoiceList(); private: QStringList getVoiceList(QString language); @@ -66,6 +67,7 @@ class TTSSapi : public TTSBase QString m_TTSVoice; QString m_TTSSpeed; bool m_sapi4; + bool m_started; };