SapiSpeech.dll - A Wrapper for
Microsoft Speech API
Download it
-> SapiSpeech
Overview :
SapiSpeech.dll
is a dynamic linking library written by Ammar Qammaz to simplify the
process of importing Speech without using managed-code :) in non
Visual-Studio compiled applications.
The
library contains very few calls , and in the future I plan to also
provide an interface for speech recognition ( right now , only computer
speech is included )
In order to use it , you will need a PC with Windows
9x/XP/Vista and The Speech API redistributables..
You
can download version 5.1 The
Speech API redistributables here , you propably want
SpeechSDK51.exe (
Windows Vista users have 5.3 preinstalled so you don`t need it)
SapiSpeech.dll was compiled using Visual Studio 2003
Exports :
//BASIC FUNCTIONALITY
bool _stdcall InitSpeech() // Required one time
at the start of the program
bool _stdcall UnInitSpeech() // Required
one time at the end of the program
//SPEAKING
// consists of two parts , (1) passing a string to the library and (2)
order the Sapi to speak
// PASSING STRINGS (For
languages that do not have a char array data type)
void
_stdcall Speech_PassNewString(unsigned int charlen) // Pass
new string with a total of "charlen"
characters
unsigned int _stdcall
Speech_GetStringLength() // Get Length of
string currently loaded
char _stdcall Speech_GetStringChar(unsigned int
thech)
// Return Character with character number "thech" (First
character is character 0 , last character is character Speech_GetStringLength()
-1 )
void _stdcall
Speech_SetStringChar(unsigned int thech,char theval) //
Pass Character with character number "thech" and value "theval" (First
character is character 0 , last character is character Speech_GetStringLength()
-1 )
//SPEAKING
void
_stdcall SaySomething()
void _stdcall
SayString(const char * thestr)
Code Sample #1 (Dev-C++) :
//THIS CODE WILL START A CONSOLE WINDOW ,
LOAD THE DLL FUNCTIONS AND START TALKING :)
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
typedef bool (*InitSpeech)();
typedef bool (*UnInitSpeech)();
typedef void (*SaySomething)();
typedef void (*Speech_PassNewString)(const unsigned int);
typedef void (*Speech_SetStringChar)(const unsigned int,const char);
typedef char (*Speech_GetStringChar)(const unsigned int);
typedef char (*SayString)( const char *);
HINSTANCE hInstLibrary;
InitSpeech _InitSpeech;
UnInitSpeech _UnInitSpeech;
SaySomething _SaySomething;
Speech_PassNewString _Speech_PassNewString;
Speech_SetStringChar _Speech_SetStringChar;
Speech_GetStringChar _Speech_GetStringChar;
SayString _SayString;
char* itoa(int val, int base){
static char buf[32] = {0};
int i = 30;
for(; val && i ; --i, val /= base)
buf[i] = "0123456789abcdef"[val % base];
return &buf[i+1];
}
int main(int argc, char *argv[])
{
printf("%s","Loading Library..\n");
hInstLibrary = LoadLibrary("SapiSpeech.dll");
if (hInstLibrary)
{
printf("%s","Connecting Procedures..\n");
_InitSpeech = (InitSpeech)GetProcAddress(hInstLibrary, "InitSpeech");
_UnInitSpeech = (UnInitSpeech)GetProcAddress(hInstLibrary, "UnInitSpeech");
_SaySomething = (SaySomething)GetProcAddress(hInstLibrary, "SaySomething");
_Speech_PassNewString =
(Speech_PassNewString)GetProcAddress(hInstLibrary,
"Speech_PassNewString");
_Speech_SetStringChar =
(Speech_SetStringChar)GetProcAddress(hInstLibrary,
"Speech_SetStringChar");
_Speech_GetStringChar =
(Speech_GetStringChar)GetProcAddress(hInstLibrary,
"Speech_GetStringChar");
_SayString = (SayString)GetProcAddress(hInstLibrary, "SayString");
if (_InitSpeech) {} else printf("%s","Something went wrong with InitSpeech\n");
if (_UnInitSpeech) {} else printf("%s","Something went wrong with UnInitSpeech\n");
if (_SaySomething) {} else printf("%s","Something went wrong with SaySomething\n");
if (_Speech_PassNewString) {} else printf("%s","Something went wrong
with Speech_PassNewString\n");
if (_Speech_SetStringChar) {} else printf("%s","Something went wrong
with Speech_SetStringChar\n");
if (_SayString) {} else printf("%s","Something went wrong with SayString\n");
printf("%s","Initializing..\n");
_InitSpeech();
_SaySomething(); // Will say : "Hello World This is
SapiSpeech.dll version x.xx" (This is because we haven`t passed a
string yet)
_SayString("I believe this sample code is very
self-explanitory!"); // :)
_SayString("Plus , it is working fine");
_SayString("I will now count to 10");
_SayString("And then exit gracefully!");
char thenum[3];
for (int i=1; i<=10; i++)
{
_SayString(itoa(i,10));
Sleep(100);
}
_SayString("Thank you for your time!");
_SayString("My job is done!");
_SayString("Bye bye");
_UnInitSpeech();
FreeLibrary(hInstLibrary);
printf("%s","Run ending..\n");
} else
printf("%s","Could not load DLL Functions , check if SapiSpeech.dll is
in the same folder as the executable\n");
return EXIT_SUCCESS;
}