diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 00bb99ac80741fc50ef8a289719373032f2391eb (patch) | |
tree | 3a5a9bf72f942784b38bf77dd66c534662fab5f2 /kttsd/kttsd/ssmlconvert.h | |
download | tdeaccessibility-00bb99ac80741fc50ef8a289719373032f2391eb.tar.gz tdeaccessibility-00bb99ac80741fc50ef8a289719373032f2391eb.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeaccessibility@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kttsd/kttsd/ssmlconvert.h')
-rw-r--r-- | kttsd/kttsd/ssmlconvert.h | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/kttsd/kttsd/ssmlconvert.h b/kttsd/kttsd/ssmlconvert.h new file mode 100644 index 0000000..1ee332c --- /dev/null +++ b/kttsd/kttsd/ssmlconvert.h @@ -0,0 +1,129 @@ +/***************************************************** vim:set ts=4 sw=4 sts=4: + SSMLConvert class + + This class is in charge of converting SSML text into a format that can + be handled by individual synths. + ------------------- + Copyright: + (C) 2004 by Paul Giannaros <ceruleanblaze@gmail.com> + (C) 2004 by Gary Cramblitt <garycramblitt@comcast.net> + ------------------- + Original author: Paul Giannaros <ceruleanblaze@gmail.com> +******************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; version 2 of the License. * + * * + ***************************************************************************/ + +#ifndef _SSMLCONVERT_H_ +#define _SSMLCONVERT_H_ + +/** + * SsmlConvert class: + * Receives a QStringList of talkers and, based on that information, + * evaluates received SSML to discover which of the given talkers best + * suits it. It can then convert the given SSML into a format understandable + * by the talker. + */ + +// Qt includes +#include <qobject.h> +#include <qstringlist.h> + +class KProcess; +class QString; + +class SSMLConvert : public QObject { + Q_OBJECT +public: + /** Constructors */ + SSMLConvert(); + SSMLConvert(const QStringList &talkers); + /** Destructor */ + virtual ~SSMLConvert(); + + enum TransformState { + tsIdle = 0, // Not doing anything. Ready to transform. + tsTransforming = 1, // Transforming. + tsFinished = 2 // Transforming finished. + }; + + /** + * Set the talker codes to be used. + * @param talkers talker codes to be used. + */ + void setTalkers(const QStringList &talkers); + + /** + * Extract the synth name from a talker code (i.e festival, flite, freetts). + * @param talkercode the talker code to extract the talker from. + * @returns the talker. + */ + QString extractTalker(const QString &talkercode); + + /** + * Returns the most appropriate talker for the text to synth's talker code. + * @param text the text that will be parsed. + * @returns the appropriate talker for the job as a talker code QString. + * + * The appropriate talker is the one that has the most features that are required in some + * SSML markup. In the future i'm hoping to make the importance of individual features + * configurable, but better to walk before you can run. + * Currently, the searching method in place is like a filter: Those that meet the criteria we're + * searchin for stay while others are sifted out. This should leave us with the right talker to use. + * It's not a very good method, but should be appropriate in most cases and should do just fine for now. + * + * See the implementation file for more detail. + */ + QString appropriateTalker(const QString &text) const; + + /** + * Applies the spreadsheet for a talker to the SSML and returns the talker-native output. + * @param text the markup to apply the spreadsheet to. + * @param xsltFilename the name of the stylesheet file that will be applied (i.e freetts, flite). + * @returns the output that the synth can understand. + * + * This converts a piece of SSML into a format the given talker can understand. It applies + * an XSLT spreadsheet to the SSML and returns the output. + */ + bool transform(const QString &text, const QString &xsltFilename); + + /** + * Returns current processing state. + */ + int getState(); + + /** + * Returns the output from call to transform. + */ + QString getOutput(); + +signals: + /** + * Emitted whenever tranforming is completed. + */ + void transformFinished(); + +private slots: + void slotProcessExited(KProcess* proc); + +private: + /// The XSLT processor. + KProcess *m_xsltProc; + /// Current talkers. + QStringList m_talkers; + // Current state. + int m_state; + // Name of XSLT file. + QString m_xsltFilename; + // Name of temporary input file. + QString m_inFilename; + // Name of temporary output file. + QString m_outFilename; +}; + +#endif // _SSMLCONVERT_H_ |