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
This commit is contained in:
Dominik Riebeling 2012-09-09 11:31:05 +02:00
parent 469a614349
commit a1b780e670
4 changed files with 61 additions and 5 deletions

View file

@ -21,6 +21,7 @@
#include "ttsfestival.h" #include "ttsfestival.h"
#include "ttssapi.h" #include "ttssapi.h"
#include "ttssapi4.h" #include "ttssapi4.h"
#include "ttsmssp.h"
#include "ttsexes.h" #include "ttsexes.h"
#if defined(Q_OS_MACX) #if defined(Q_OS_MACX)
#include "ttscarbon.h" #include "ttscarbon.h"
@ -47,6 +48,7 @@ void TTSBase::initTTSList()
ttsList["sapi4"] = tr("SAPI4 TTS Engine"); ttsList["sapi4"] = tr("SAPI4 TTS Engine");
#endif #endif
ttsList["sapi"] = tr("SAPI5 TTS Engine"); ttsList["sapi"] = tr("SAPI5 TTS Engine");
ttsList["mssp"] = tr("MS Speech Platform");
#endif #endif
#if defined(Q_OS_LINUX) #if defined(Q_OS_LINUX)
ttsList["festival"] = tr("Festival TTS Engine"); ttsList["festival"] = tr("Festival TTS Engine");
@ -66,6 +68,8 @@ TTSBase* TTSBase::getTTS(QObject* parent,QString ttsName)
tts = new TTSSapi(parent); tts = new TTSSapi(parent);
else if (ttsName == "sapi4") else if (ttsName == "sapi4")
tts = new TTSSapi4(parent); tts = new TTSSapi4(parent);
else if (ttsName == "mssp")
tts = new TTSMssp(parent);
else else
#elif defined(Q_OS_LINUX) #elif defined(Q_OS_LINUX)
if (ttsName == "festival") if (ttsName == "festival")

View file

@ -0,0 +1,44 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
*
* Copyright (C) 2012 by Dominik Riebeling
*
* 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 TTSMSSP_H
#define TTSMSSP_H
#include "ttsbase.h"
#include "ttssapi.h"
class TTSMssp: public TTSSapi
{
//! Enum to identify the settings
Q_OBJECT
public:
TTSMssp(QObject* parent=NULL)
{
m_TTSTemplate = "cscript //nologo \"%exe\" "
"/language:%lang /voice:\"%voice\" "
"/speed:%speed \"%options\" /mssp";
m_TTSVoiceTemplate = "cscript //nologo \"%exe\" "
"/language:%lang /listvoices /mssp";
m_TTSType = "mssp";
}
};
#endif

View file

@ -114,6 +114,7 @@ HEADERS += \
base/ttsfestival.h \ base/ttsfestival.h \
base/ttssapi.h \ base/ttssapi.h \
base/ttssapi4.h \ base/ttssapi4.h \
base/ttsmssp.h \
../../tools/wavtrim.h \ ../../tools/wavtrim.h \
../../tools/voicefont.h \ ../../tools/voicefont.h \
base/voicefile.h \ base/voicefile.h \

View file

@ -39,6 +39,7 @@ Const STDERR = 2
Dim oShell, oArgs, oEnv Dim oShell, oArgs, oEnv
Dim oFSO, oStdIn, oStdOut Dim oFSO, oStdIn, oStdOut
Dim bVerbose, bSAPI4, bList Dim bVerbose, bSAPI4, bList
Dim bMSSP
Dim sLanguage, sVoice, sSpeed, sName, sVendor Dim sLanguage, sVoice, sSpeed, sName, sVendor
Dim oSpVoice, oSpFS ' SAPI5 voice and filestream Dim oSpVoice, oSpFS ' SAPI5 voice and filestream
@ -60,6 +61,7 @@ bVerbose = (oEnv("V") <> "")
Set oArgs = WScript.Arguments.Named Set oArgs = WScript.Arguments.Named
bSAPI4 = oArgs.Exists("sapi4") bSAPI4 = oArgs.Exists("sapi4")
bMSSP = oArgs.Exists("mssp")
bList = oArgs.Exists("listvoices") bList = oArgs.Exists("listvoices")
sLanguage = oArgs.Item("language") sLanguage = oArgs.Item("language")
sVoice = oArgs.Item("voice") sVoice = oArgs.Item("voice")
@ -121,20 +123,25 @@ If bSAPI4 Then
' Speed selection ' Speed selection
If sSpeed <> "" Then oTTS.Speed = sSpeed If sSpeed <> "" Then oTTS.Speed = sSpeed
' Get vendor information ' Get vendor information
sVendor = oTTS.MfgName(nMode) sVendor = oTTS.MfgName(nMode)
Else ' SAPI5 Else ' SAPI5
' Create SAPI5 object ' Create SAPI5 object
Set oSpVoice = CreateObject("SAPI.SpVoice") If bMSSP Then
Set oSpVoice = CreateObject("speech.SpVoice")
Else
Set oSpVoice = CreateObject("SAPI.SpVoice")
End If
If Err.Number <> 0 Then If Err.Number <> 0 Then
WScript.StdErr.WriteLine "Error - could not get SpVoice object." _ WScript.StdErr.WriteLine "Error " & Err.Number _
& " - could not get SpVoice object." _
& " SAPI 5 not installed?" & " SAPI 5 not installed?"
WScript.Quit 1 WScript.Quit 1
End If End If
If bList Then If bList Then
' Just list available voices for the selected language ' Just list available voices for the selected language
For Each nLangID in LangIDs(sLanguage) For Each nLangID in LangIDs(sLanguage)
sSelectString = "Language=" & Hex(nLangID) sSelectString = "Language=" & Hex(nLangID)