diff options
Diffstat (limited to 'rbutil/rbutilqt/talkfile.cpp')
-rw-r--r-- | rbutil/rbutilqt/talkfile.cpp | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/rbutil/rbutilqt/talkfile.cpp b/rbutil/rbutilqt/talkfile.cpp new file mode 100644 index 0000000000..da532e327c --- /dev/null +++ b/rbutil/rbutilqt/talkfile.cpp @@ -0,0 +1,212 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * + * Copyright (C) 2007 by Dominik Wenger + * $Id: talkfile.cpp 14027 2007-07-27 17:42:49Z domonoky $ + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include "talkfile.h" + +TalkFileCreator::TalkFileCreator(QObject* parent): QObject(parent) +{ + +} + +void TalkFileCreator::setTTsType(QString tts) +{ + m_curTTS = tts; + int index = m_supportedTTS.indexOf(m_curTTS); + m_curTTSTemplate = m_supportedTTSTemplates.at(index); +} + +void TalkFileCreator::setEncType(QString enc) +{ + m_curEnc = enc; + int index = m_supportedEnc.indexOf(m_curEnc); + m_curEncTemplate = m_supportedEncTemplates.at(index); +} + +bool TalkFileCreator::initEncoder() +{ + QFileInfo enc(m_EncExec); + if(enc.exists()) + { + return true; + } + else + { + return false; + } +} + +bool TalkFileCreator::initTTS() +{ + QFileInfo tts(m_TTSexec); + + if(tts.exists()) + { + return true; + } + else + { + return false; + } +} + +bool TalkFileCreator::createTalkFiles(ProgressloggerInterface* logger) +{ + m_abort = false; + m_logger = logger; + m_logger->addItem("Starting Talkfile generation",LOGINFO); + if(!initTTS()) + { + m_logger->addItem("Init of TTS engine failed",LOGERROR); + return false; + } + if(!initEncoder()) + { + m_logger->addItem("Init of encoder failed",LOGERROR); + return false; + } + QApplication::processEvents(); + + connect(logger,SIGNAL(aborted()),this,SLOT(abort())); + m_logger->setProgressMax(0); + QDirIterator it(m_dir,QDirIterator::Subdirectories); + // iterate over all entrys + while (it.hasNext()) + { + if(m_abort) + { + m_logger->addItem("Talkfile creation aborted",LOGERROR); + return false; + } + + QApplication::processEvents(); + QFileInfo fileInf = it.fileInfo(); + QString toSpeak; + QString filename; + QString wavfilename; + + if(fileInf.fileName() == "." || fileInf.fileName() == ".." || fileInf.suffix() == "talk") + { + it.next(); + continue; + } + if(fileInf.isDir()) // if it is a dir + { + toSpeak = fileInf.fileName(); + filename = fileInf.absolutePath() + "/_dirname.talk"; + } + else // if it is a file + { + if(m_stripExtensions) + toSpeak = fileInf.baseName(); + else + toSpeak = fileInf.fileName(); + filename = fileInf.absoluteFilePath() + ".talk"; + } + wavfilename = filename + ".wav"; + + QFileInfo filenameInf(filename); + QFileInfo wavfilenameInf(wavfilename); + + if(!filenameInf.exists() || m_overwriteTalk) + { + if(!wavfilenameInf.exists() || m_overwriteWav) + { + m_logger->addItem("Voicing of " + toSpeak,LOGINFO); + if(!voice(toSpeak,wavfilename)) + { + m_logger->addItem("Voicing of " + toSpeak + " failed",LOGERROR); + m_logger->abort(); + return false; + } + } + m_logger->addItem("Encoding of " + toSpeak,LOGINFO); + if(!encode(wavfilename,filename)) + { + m_logger->addItem("Encoding of " + wavfilename + " failed",LOGERROR); + m_logger->abort(); + return false; + } + } + + if(m_removeWav) + { + QFile wavfile(wavfilename); + wavfile.remove(); + } + + it.next(); + } + + m_logger->addItem("Finished creating Talkfiles",LOGOK); + m_logger->setProgressMax(1); + m_logger->setProgressValue(1); + m_logger->abort(); + + return true; + +} + +void TalkFileCreator::abort() +{ + m_abort = true; +} + +bool TalkFileCreator::voice(QString text,QString wavfile) +{ + + QString execstring = m_curTTSTemplate; + + execstring.replace("%exe",m_TTSexec); + execstring.replace("%options",m_TTSOpts); + execstring.replace("%wavfile",wavfile); + execstring.replace("%text",text); + + QProcess::execute(execstring); + return true; + +} + +bool TalkFileCreator::encode(QString input,QString output) +{ + QString execstring = m_curEncTemplate; + + execstring.replace("%exe",m_EncExec); + execstring.replace("%options",m_EncOpts); + execstring.replace("%input",input); + execstring.replace("%output",output); + + QProcess::execute(execstring); + return true; + +} + +QString TalkFileCreator::getTTsOpts(QString ttsname) +{ + int index = m_supportedTTS.indexOf(ttsname); + + return m_supportedTTSOpts.at(index); +} + +QString TalkFileCreator::getEncOpts(QString encname) +{ + int index = m_supportedEnc.indexOf(encname); + + return m_supportedEncOpts.at(index); +} + |