rockbox/rbutil/rbutilqt/base/ttsbase.cpp
Dominik Riebeling a1b780e670 Add support for Microsoft Speech Platform.
MSSP is accessible via vbs by simply changing the object to be used (both
SAPI5 and MSSP use the ISpVoice COM interface). Add command line parameter to
sapi_voice.vbs to switch the COM object used, and add the necessary
implementation of the SAPI class to Rockbox Utility.

Important: you will need to install the Speech Runtime separately and install
the version matching the bitsize of Rockbox Utility. I.e. you will need to
install the x86 version even on a x64 machine (unless you build a 64bit binary
of Rockbox Utility).

Change-Id: If760cd69c556c17a2ae539965d0941d16fdc10e1
2012-09-09 12:07:53 +02:00

105 lines
2.8 KiB
C++

/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
*
* Copyright (C) 2007 by Dominik Wenger
*
* 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 "ttsbase.h"
#include "ttsfestival.h"
#include "ttssapi.h"
#include "ttssapi4.h"
#include "ttsmssp.h"
#include "ttsexes.h"
#if defined(Q_OS_MACX)
#include "ttscarbon.h"
#endif
// list of tts names and identifiers
QMap<QString,QString> TTSBase::ttsList;
TTSBase::TTSBase(QObject* parent): EncTtsSettingInterface(parent)
{
}
// static functions
void TTSBase::initTTSList()
{
#if !defined(Q_OS_WIN)
ttsList["espeak"] = tr("Espeak TTS Engine");
#endif
ttsList["flite"] = tr("Flite TTS Engine");
ttsList["swift"] = tr("Swift TTS Engine");
#if defined(Q_OS_WIN)
#if 0 /* SAPI4 has been disabled since long. Keep support for now. */
ttsList["sapi4"] = tr("SAPI4 TTS Engine");
#endif
ttsList["sapi"] = tr("SAPI5 TTS Engine");
ttsList["mssp"] = tr("MS Speech Platform");
#endif
#if defined(Q_OS_LINUX)
ttsList["festival"] = tr("Festival TTS Engine");
#endif
#if defined(Q_OS_MACX)
ttsList["carbon"] = tr("OS X System Engine");
#endif
}
// function to get a specific encoder
TTSBase* TTSBase::getTTS(QObject* parent,QString ttsName)
{
TTSBase* tts = 0;
#if defined(Q_OS_WIN)
if(ttsName == "sapi")
tts = new TTSSapi(parent);
else if (ttsName == "sapi4")
tts = new TTSSapi4(parent);
else if (ttsName == "mssp")
tts = new TTSMssp(parent);
else
#elif defined(Q_OS_LINUX)
if (ttsName == "festival")
tts = new TTSFestival(parent);
else
#elif defined(Q_OS_MACX)
if(ttsName == "carbon")
tts = new TTSCarbon(parent);
else
#endif
// fix for OS other than WIN or LINUX
if (true)
tts = new TTSExes(ttsName, parent);
return tts;
}
// get the list of encoders, nice names
QStringList TTSBase::getTTSList()
{
// init list if its empty
if(ttsList.count() == 0)
initTTSList();
return ttsList.keys();
}
// get nice name of a specific tts
QString TTSBase::getTTSName(QString tts)
{
if(ttsList.isEmpty())
initTTSList();
return ttsList.value(tts);
}