case PITCH_DEFAULT:
cvox_SetParam(engine,CVOX_PITCH_RANGE_PARAM,CVOX_RESET_PARAM,0);
break;
case PITCH_LOW:
cvox_SetParam(engine,CVOX_PITCH_RANGE_PARAM,50,0);
break;
case PITCH_MEDIUM:
cvox_SetParam(engine,CVOX_PITCH_RANGE_PARAM,135,0);
break;
case PITCH_HIGHT:
cvox_SetParam(engine,CVOX_PITCH_RANGE_PARAM,200,0);
break;
default: return 0;
}
return 1;
}
int
TTSCVOX::SetVolume(int NewVolume) {
if (NewVolume >= -24 && NewVolume < 12) {
cvox_SetParam(engine,CVOX_VOLUME_PARAM,NewVolume,0);
return 1;
}
return 0;
}
int
TTSCVOX::SetVolume(TTSVolume NewVolume) {
switch(NewVolume) {
case VOLUME_DEFAULT:
cvox_SetParam(engine,CVOX_VOLUME_PARAM,CVOX_RESET_PARAM,0);
break;
case VOLUME_SILENT:
cvox_SetParam(engine,CVOX_VOLUME_PARAM,-24,0);
break;
case VOLUME_SOFT:
cvox_SetParam(engine,CVOX_VOLUME_PARAM,0,0);
break;
case VOLUME_MEDIUM:
cvox_SetParam(engine,CVOX_VOLUME_PARAM,6,0);
break;
case VOLUME_LOUD:
cvox_SetParam(engine,CVOX_VOLUME_PARAM,12,0);
break;
default: return 0;
}
return 1;
}
int
TTSCVOX::SetLanguage(TTSLanguage NewLanguage)
{
switch(NewLanguage) {
case LANGUAGE_FRENCH:
for (int i = 0; i < nbVoice ; i++)
{
CVOX_VOICE_INFO voiceInfo;
voiceInfo = tabStruct[i];
if (CVOX_FRENCH == voiceInfo.language) cvox_SetParam(engine,CVOX_VOICE_ID_PARAM,i,0);
}
break;
case LANGUAGE_GERMAN:
for (int i = 0; i < nbVoice ; i++)
{
CVOX_VOICE_INFO voiceInfo;
voiceInfo = tabStruct[i];
if (CVOX_GERMAN == voiceInfo.language) cvox_SetParam(engine,CVOX_VOICE_ID_PARAM,i,0);
}
break;
case LANGUAGE_SPANISH:
for (int i = 0; i < nbVoice ; i++)
{
CVOX_VOICE_INFO voiceInfo;
voiceInfo = tabStruct[i];
if (CVOX_SPANISH == voiceInfo.language) cvox_SetParam(engine,CVOX_VOICE_ID_PARAM,i,0);
}
break;
case LANGUAGE_RUSSIAN:
for (int i = 0; i < nbVoice ; i++)
{
CVOX_VOICE_INFO voiceInfo;
voiceInfo = tabStruct[i];
if (CVOX_RUSSIAN == voiceInfo.language) cvox_SetParam(engine,CVOX_VOICE_ID_PARAM,i,0);
}
break;
default: return 0;
}
return 1;
}
int
TTSCVOX::SetSex(TTSSex NewSex)
{
switch ( NewSex ) {
case SEX_MALE:
for (int i = 0; i < nbVoice ; i++)
{
CVOX_VOICE_INFO voiceInfo;
voiceInfo = tabStruct[i];
if (CVOX_MALE == voiceInfo.sex) cvox_SetParam(engine,CVOX_VOICE_ID_PARAM,i,0);
}
break;
case SEX_FEMALE:
for (int i = 0; i < nbVoice ; i++)
{
CVOX_VOICE_INFO voiceInfo;
voiceInfo = tabStruct[i];
if (CVOX_FEMALE == voiceInfo.sex) cvox_SetParam(engine,CVOX_VOICE_ID_PARAM,i,0);
}
break;
case SEX_NEUTRAL:
for (int i = 0; i < nbVoice ; i++)
{
CVOX_VOICE_INFO voiceInfo;
voiceInfo = tabStruct[i];
if (CVOX_UNKNOWN_SEX == voiceInfo.sex) cvox_SetParam(engine,CVOX_VOICE_ID_PARAM,i,0);
}
break;
default: return 0;
}
return 1;
}
int
TTSCVOX::SetVoice(const char* szNewVoice) {
//V?ifier que la voix existe
for (int i = 0; i < nbVoice ; i++)
{
CVOX_VOICE_INFO voiceInfo;
voiceInfo = tabStruct[i];
if (strcmp(szNewVoice,voiceInfo.name) == 0) {
cvox_SetParam(engine,CVOX_VOICE_NAME_PARAM,0,szNewVoice);
return 1;
}
}
return 0;
}
[^] # Re: bibliotheque manquante
Posté par moule2005 . En réponse au message erreur de compil. Évalué à 1.
vpath %.cpp ./src
vpath %.h ./include
CC=gcc-2
CXX=G++-2
CFLAGS+= -mno-cygwin -l ./include -l ../Syc-3.0A/include -Wall
CXXFLAGS+= -mno-cygwin -l ./include -l ../Syc-3.0A/include -Wall
ALL: libttscvox.dll
CTTSCvox.o : CTTSCvox.cpp CTTSAbstract.h CTTSCvox.h
libttscvox.dll : CTTSCvox.o
$(CXX) -shared $(CXXFLAGS) $< -o $@ -l../Syc-3.0A/lib/ -lcvox
------------------------------------------------------------------
voila ce que j'obtiens:
G++-2 -mno-cygwin -l ./include -l ../Syc-3.0A/include -Wall -c -o CTTSCvox.o ./src/CTTSCvox.cpp
make: G++-2 : Commande introuvable
make: *** [CTTSCvox.o] Erreur 127
------------------------------------------------------------
pour un cpp:
/*
* $Id$
*
* $Log$
*
*/
#include "CTTSCvox.h"
#include <iostream.h>
#include <stdlib.h>
extern "C" PCTTSAbstract NewCTTSAbstract(PCVoiceAppInfo info)
{
return new TTSCVOX(info) ;
}
extern "C" void DeleteCTTSAbstract(PCTTSAbstract ptr)
{
delete ptr;
}
extern "C" int ConfigureCTTSAbstract(PCVoiceAppInfo)
{
return 1;
}
extern "C" int InitCTTSAbstract(PCVoiceAppInfo)
{
return 1;
}
extern "C" int ShutdownCTTSAbstract(PCVoiceAppInfo)
{
return 1;
}
static void
callback_buffer(CVOX_ENGINE engine, cvox_int32 position, void *arg,
cvox_bool begin, cvox_int32 bufferNumber) {
TTSCVOX* ptr = (TTSCVOX* ) arg;
ptr->callback_buffer(engine,position, begin, bufferNumber) ;
}
static cvox_uint16
callback_out (CVOX_ENGINE engine,void *arg, void* address,
cvox_int32 length, void **nextbuffer, cvox_int32 *nextsize) {
TTSCVOX* ptr = (TTSCVOX* ) arg;
return ptr->callback_out(engine, address, length, nextbuffer, nextsize) ;
}
static void run_cvox_engine(void* eng)
{
CVOX_ENGINE *engine = (CVOX_ENGINE*) eng ;
cvox_Execute(*engine);
}
TTSCVOX::TTSCVOX(PCVoiceAppInfo PAppInfo) : CTTSAbstract( PAppInfo)
{
isSpeaking = false;
isRunning = false;
tabStruct = NULL;
}
TTSCVOX::~TTSCVOX()
{
if (isRunning)
{
cvox_Stop(engine);
ret = cvox_DeleteEngine(engine);
TestReturnCode("cvox_Delete()", ret);
//for (int i = 0 ; i < nbVoice ; i++) {
//tabStruct[i];
//}
delete tabStruct;
}
}
int
TTSCVOX::SetTTSClalback(TTSCallback func, void* ptUser)
{
m_func = func;
m_ptUser = ptUser;
return 1;
}
int
TTSCVOX::UnsetTTSCallback()
{
m_func = NULL;
m_ptUser = NULL;
return 1;
}
int
TTSCVOX::Init(const char* szInitString ) {
//There are nothing here to szInitString
memset(&data_in, 0, sizeof(CVOX_IO_DATA));
memset(&data_out, 0, sizeof(CVOX_IO_DATA));
data_out.writeRawCB = ::callback_out;
data_out.arg = this;
data_out.synchro.bufferCB = ::callback_buffer;
data_out.synchro.arg = this;
data_out.coding = CVOX_PCM_SWAP;
data_in.parsing = CVOX_SSML_20;
ret = cvox_NewEngine((char*)szInitString, "", &engine);
TestReturnCode("cvox_NewEngine()", ret);
ret = cvox_Connect(engine,CVOX_INPUT, CVOX_FUNCTIONAL_IO, &data_in) ;
TestReturnCode("cvox_Connect(IN)", ret);
ret = cvox_Connect(engine,CVOX_OUTPUT, CVOX_RAW_IO,&data_out) ;
TestReturnCode("cvox_Connect(OUT)", ret);
xthr_run(&inputTHR,::run_cvox_engine, &engine);
/** add its number to fifo */
cvox_WaitRunning(engine);
isRunning = true;
CVOX_ENGINE_INFO info;
ret = cvox_GetEngineInfo(engine,&info);
nbVoice = info.numberOfVoice;
tabStruct = new CVOX_VOICE_INFO[nbVoice] ;
CVOX_VOICE_INFO voiceInfo;
for (int rank = 0 ; rank < nbVoice ;rank++) {
cvox_GetVoiceInfo(engine,rank,&voiceInfo) ;
tabStruct[rank] = voiceInfo;
}
return 1;
}
int
TTSCVOX::Shutdown()
{
return 1;
}
cvox_uint16
TTSCVOX::callback_out (CVOX_ENGINE engine, void* address,
cvox_int32 length, void **nextbuffer, cvox_int32 *nextsize) {
m_func (m_ptUser, (char*) address, (size_t)length);
return (CVOX_CB_OK);
}
void
TTSCVOX::callback_buffer(CVOX_ENGINE engine, cvox_int32 position, cvox_bool begin, cvox_int32 bufferNumber) {
static unsigned char max = 170, min = 42;
if (begin) {
m_func (m_ptUser, (char*) &max, 1);
}
else
{
m_func (m_ptUser, (char*) &min, 1);
m_func (m_ptUser, (char*) &min, 0);
isSpeaking = false;
}
}
void
TTSCVOX::TestReturnCode(char *function, cvox_uint16 ret)
{
char *code = 0;
switch (ret) {
case CVOX_OK:
break;
case CVOX_BAD_ENGINE:
code = "bad engine";
break;
case CVOX_FORBIDDEN_CALL:
code = "forbidden call";
break;
case CVOX_BAD_PARAMETER:
code = "bad parameter";
break;
case CVOX_INTERNAL_ERROR:
code = "internal error";
break;
case CVOX_PARSING_ERROR:
code = "parsing error";
break;
}
if (code) {
fprintf(stderr, "Error. %s returned \"%s\"\n", function, code);
exit(1);
}
}
int
TTSCVOX::GetSpeed(int &Speed) {
CVOX_ENGINE_INFO* voiceInfo;
cvox_GetEngineInfo(engine,voiceInfo);
Speed = (int) (voiceInfo->rate_info).rate;
return 1;
}
int
TTSCVOX::GetSpeed(TTSSpeed &Speed) {
CVOX_ENGINE_INFO* voiceInfo;
cvox_GetEngineInfo(engine,voiceInfo);
int speed = (int) (voiceInfo->rate_info).rate;
if (speed <= 100) {
Speed = SPEED_LOW;
return 1;
}
if (speed <= 180) {
Speed = SPEED_MEDIUM;
return 1;
}
if (speed > 180) {
Speed = SPEED_HIGHT;
return 1;
}
return 0;
}
int
TTSCVOX::GetPitch(int &Pitch) {
CVOX_ENGINE_INFO* voiceInfo;
cvox_GetEngineInfo(engine,voiceInfo);
Pitch = (int) (voiceInfo->pitch_info).range;
return 1;
}
int
TTSCVOX::GetPitch(TTSPitch &Pitch) {
CVOX_ENGINE_INFO* voiceInfo;
cvox_GetEngineInfo(engine,voiceInfo);
int pitch = (int) (voiceInfo->pitch_info).range;
if (pitch <= 80) {
Pitch = PITCH_LOW;
return 1;
}
if (pitch <= 160) {
Pitch = PITCH_MEDIUM;
return 1;
}
if (pitch > 160) {
Pitch = PITCH_HIGHT;
return 1;
}
return 0;
}
int
TTSCVOX::GetVolume(int &Volume) {
CVOX_ENGINE_INFO* voiceInfo;
cvox_GetEngineInfo(engine,voiceInfo);
Volume = (int) voiceInfo->gain;
return 1;
}
int
TTSCVOX::GetVolume(TTSVolume &Volume) {
CVOX_ENGINE_INFO* voiceInfo;
cvox_GetEngineInfo(engine,voiceInfo);
int volume = (int) voiceInfo->gain;
if (volume == -24) {
Volume = VOLUME_SILENT;
return 1;
}
if (volume <= 3) {
Volume = VOLUME_SOFT;
return 1;
}
if (volume <= 9) {
Volume = VOLUME_MEDIUM;
return 1;
}
if (volume > 9) {
Volume = VOLUME_LOUD;
return 1;
}
return 0;
}
int
TTSCVOX::GetSex(TTSSex &Sex) {
CVOX_ENGINE_INFO* engineInfo;
cvox_GetEngineInfo(engine,engineInfo);
int rank = (int) engineInfo->currentVoice;
CVOX_VOICE_INFO* voiceInfo;
cvox_GetVoiceInfo(engine,rank,voiceInfo);
int sex = (int) voiceInfo->sex;
if (sex == 0) {
Sex = SEX_MALE;
return 1;
}
if (sex == 1) {
Sex = SEX_FEMALE;
return 1;
}
if (sex == 2) {
Sex = SEX_NEUTRAL;
return 1;
}
return 0;
}
int
TTSCVOX::GetVoice(char* Buffer, size_t MaxLen) {
CVOX_ENGINE_INFO* engineInfo;
cvox_GetEngineInfo(engine,engineInfo);
int rank = (int) engineInfo->currentVoice;
CVOX_VOICE_INFO* voiceInfo;
cvox_GetVoiceInfo(engine,rank,voiceInfo);
Buffer = voiceInfo->name;
return 1;
}
int
TTSCVOX::SetSpeed(int NewSpeed) {
if (NewSpeed >= 0 && NewSpeed < 3000) {
cvox_SetParam(engine,CVOX_RATE_PARAM,NewSpeed,0);
return 1;
}
return 0;
}
int
TTSCVOX::SetSpeed(TTSSpeed NewSpeed) {
switch (NewSpeed) {
case SPEED_DEFAULT:
cvox_SetParam(engine,CVOX_RATE_PARAM,CVOX_RESET_PARAM,0);
break;
case SPEED_LOW:
cvox_SetParam(engine,CVOX_RATE_PARAM,50,0);
break;
case SPEED_MEDIUM:
cvox_SetParam(engine,CVOX_RATE_PARAM,135,0);
break;
case SPEED_HIGHT:
cvox_SetParam(engine,CVOX_RATE_PARAM,200,0);
break;
default: return 0;
}
return 1;
}
int
TTSCVOX::SetPitch(int NewPitch) {
if ( NewPitch >= 0 && NewPitch < 300) {
cvox_SetParam(engine,CVOX_PITCH_MIN_PARAM,NewPitch,0);
return 1;
}
return 0;
}
int
TTSCVOX::SetPitch(TTSPitch NewPitch) {
switch ( NewPitch ) {
case PITCH_DEFAULT:
cvox_SetParam(engine,CVOX_PITCH_RANGE_PARAM,CVOX_RESET_PARAM,0);
break;
case PITCH_LOW:
cvox_SetParam(engine,CVOX_PITCH_RANGE_PARAM,50,0);
break;
case PITCH_MEDIUM:
cvox_SetParam(engine,CVOX_PITCH_RANGE_PARAM,135,0);
break;
case PITCH_HIGHT:
cvox_SetParam(engine,CVOX_PITCH_RANGE_PARAM,200,0);
break;
default: return 0;
}
return 1;
}
int
TTSCVOX::SetVolume(int NewVolume) {
if (NewVolume >= -24 && NewVolume < 12) {
cvox_SetParam(engine,CVOX_VOLUME_PARAM,NewVolume,0);
return 1;
}
return 0;
}
int
TTSCVOX::SetVolume(TTSVolume NewVolume) {
switch(NewVolume) {
case VOLUME_DEFAULT:
cvox_SetParam(engine,CVOX_VOLUME_PARAM,CVOX_RESET_PARAM,0);
break;
case VOLUME_SILENT:
cvox_SetParam(engine,CVOX_VOLUME_PARAM,-24,0);
break;
case VOLUME_SOFT:
cvox_SetParam(engine,CVOX_VOLUME_PARAM,0,0);
break;
case VOLUME_MEDIUM:
cvox_SetParam(engine,CVOX_VOLUME_PARAM,6,0);
break;
case VOLUME_LOUD:
cvox_SetParam(engine,CVOX_VOLUME_PARAM,12,0);
break;
default: return 0;
}
return 1;
}
int
TTSCVOX::SetLanguage(TTSLanguage NewLanguage)
{
switch(NewLanguage) {
case LANGUAGE_FRENCH:
for (int i = 0; i < nbVoice ; i++)
{
CVOX_VOICE_INFO voiceInfo;
voiceInfo = tabStruct[i];
if (CVOX_FRENCH == voiceInfo.language) cvox_SetParam(engine,CVOX_VOICE_ID_PARAM,i,0);
}
break;
case LANGUAGE_GERMAN:
for (int i = 0; i < nbVoice ; i++)
{
CVOX_VOICE_INFO voiceInfo;
voiceInfo = tabStruct[i];
if (CVOX_GERMAN == voiceInfo.language) cvox_SetParam(engine,CVOX_VOICE_ID_PARAM,i,0);
}
break;
case LANGUAGE_SPANISH:
for (int i = 0; i < nbVoice ; i++)
{
CVOX_VOICE_INFO voiceInfo;
voiceInfo = tabStruct[i];
if (CVOX_SPANISH == voiceInfo.language) cvox_SetParam(engine,CVOX_VOICE_ID_PARAM,i,0);
}
break;
case LANGUAGE_RUSSIAN:
for (int i = 0; i < nbVoice ; i++)
{
CVOX_VOICE_INFO voiceInfo;
voiceInfo = tabStruct[i];
if (CVOX_RUSSIAN == voiceInfo.language) cvox_SetParam(engine,CVOX_VOICE_ID_PARAM,i,0);
}
break;
default: return 0;
}
return 1;
}
int
TTSCVOX::SetSex(TTSSex NewSex)
{
switch ( NewSex ) {
case SEX_MALE:
for (int i = 0; i < nbVoice ; i++)
{
CVOX_VOICE_INFO voiceInfo;
voiceInfo = tabStruct[i];
if (CVOX_MALE == voiceInfo.sex) cvox_SetParam(engine,CVOX_VOICE_ID_PARAM,i,0);
}
break;
case SEX_FEMALE:
for (int i = 0; i < nbVoice ; i++)
{
CVOX_VOICE_INFO voiceInfo;
voiceInfo = tabStruct[i];
if (CVOX_FEMALE == voiceInfo.sex) cvox_SetParam(engine,CVOX_VOICE_ID_PARAM,i,0);
}
break;
case SEX_NEUTRAL:
for (int i = 0; i < nbVoice ; i++)
{
CVOX_VOICE_INFO voiceInfo;
voiceInfo = tabStruct[i];
if (CVOX_UNKNOWN_SEX == voiceInfo.sex) cvox_SetParam(engine,CVOX_VOICE_ID_PARAM,i,0);
}
break;
default: return 0;
}
return 1;
}
int
TTSCVOX::SetVoice(const char* szNewVoice) {
//V?ifier que la voix existe
for (int i = 0; i < nbVoice ; i++)
{
CVOX_VOICE_INFO voiceInfo;
voiceInfo = tabStruct[i];
if (strcmp(szNewVoice,voiceInfo.name) == 0) {
cvox_SetParam(engine,CVOX_VOICE_NAME_PARAM,0,szNewVoice);
return 1;
}
}
return 0;
}
bool
TTSCVOX::IsSpeaking() {
return (isSpeaking);
}
int
TTSCVOX::Speak2Wave(const char* szPhrase, char* szFileName, TTSTextType Type = TT_Text) {
cvox_GiveText( engine, szPhrase, strlen(szPhrase) );
cvox_Flush(engine);
return 1;
}
int
TTSCVOX::translateSex(const char* sex)
{
if (sex == 0) return -1;
if (strcmp(sex,"male") == 0) return CVOX_MALE;
if (strcmp(sex,"female") == 0) return CVOX_FEMALE;
return -1;
}
int
TTSCVOX::translateMedian(const char* median)
{
int medianInt = atoi(median);
if (medianInt < 0 ) return 0;
if (medianInt > 100) return 100;
return medianInt;
}
voila........!