/*************************************************************************** * __________ __ ___. * Open \______ \ ____ ____ | | _\_ |__ _______ ___ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ * * Copyright (C) 2007 by Dominik Wenger * * 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; either version 2 * of the License, or (at your option) any later version. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ****************************************************************************/ #ifndef TALKGENERATOR_H #define TALKGENERATOR_H #include #include "progressloggerinterface.h" #include "encoderbase.h" #include "ttsbase.h" //! \brief Talk generator, generates .wav and .talk files out of a list. class TalkGenerator :public QObject { Q_OBJECT public: enum Status { eOK, eWARNING, eERROR }; struct TalkEntry { QString toSpeak; QString wavfilename; QString talkfilename; QString target; bool voiced; bool encoded; /* We need the following members because * 1) the QtConcurrent entry points are all static methods (and we * need to communicate with the TalkGenerator) * 2) we are not guaranteed to go through the list in any * particular order, so we can't use the progress slot * for error checking */ struct { EncoderBase* encoder; TTSBase* tts; TalkGenerator* generator; int wavtrim; } refs; }; TalkGenerator(QObject* parent); Status process(QList* list,int wavtrimth = -1); QString correctString(QString s); public slots: void abort(); void encProgress(int value); void ttsProgress(int value); void setLang(QString name); signals: void done(bool); void logItem(QString, int); //! set logger item void logProgress(int, int); //! set progress bar. private: QFutureWatcher encFutureWatcher; QFutureWatcher ttsFutureWatcher; void encFailEntry(const TalkEntry& entry); void ttsFailEntry(const TalkEntry& entry, TTSStatus status, QString error); Status voiceList(QList* list,int wavetrimth); Status encodeList(QList* list); static void encEntryPoint(TalkEntry& entry); static void ttsEntryPoint(TalkEntry& entry); TTSBase* m_tts; EncoderBase* m_enc; bool m_ttsWarnings; bool m_userAborted; QString m_lang; struct CorrectionItems { QString search; QString replace; QString modifier; }; QList m_corrections; }; #endif