Como sei, posso usar system()
a função para usar os comandos do terminal Linux dentro do meu código C++. Por exemplo system("aplay sound.wav");
. Não sei se posso escrever todos os comandos do Linux assim ou não, mas aplay
funciona.
Eu quero usar espeak
no meu programa C++. Eu gosto de espeak lê cada string que passo por ele (algo como o que aplay
faz no código acima, mas em relação a "strings"). É melhor chamá-lo por system()
função ou é melhor escrever um código como este dentro do meu código C++ e alterar char* text
sempre que eu quiser ler uma nova string?:
#include <string.h>
#include <malloc.h>
#include <espeak-ng/speak_lib.h>
espeak_POSITION_TYPE position_type;
espeak_AUDIO_OUTPUT output;
char *path=NULL;
int Buflength = 500, Options=0;
void* user_data;
t_espeak_callback *SynthCallback;
espeak_PARAMETER Parm;
char Voice[] = {"English"};
char *text = {"this is a english test"};
unsigned int Size,position=0, end_position=0, flags=espeakCHARS_AUTO, *unique_identifier;
int main(int argc, char* argv[] )
{
output = AUDIO_OUTPUT_PLAYBACK;
int I, Run = 1, L;
espeak_Initialize(output, Buflength, path, Options );
espeak_SetVoiceByName(Voice);
const char *langNativeString = "en"; //Default to US English
espeak_VOICE voice;
memset(&voice, 0, sizeof(espeak_VOICE)); // Zero out the voice first
voice.languages = langNativeString;
voice.name = "US";
voice.variant = 2;
voice.gender = 1;
espeak_SetVoiceByProperties(&voice);
Size = strlen(text)+1;
espeak_Synth( text, Size, position, position_type, end_position, flags,
unique_identifier, user_data );
espeak_Synchronize( );
return 0;
}
Qual deles é mais rápido?
Minha resposta curta é sim.
Por favor, confirme se entendi o que você perguntou.
Considere o que acontece quando você chama o sistema:
espeak
;Portanto, os itens de 1 a 3 (e talvez 4) são todos indiretos quando você usa
system()
, em comparação com quando inicia a mesma funcionalidade em seu código-fonte.Se você encontrar uma maneira de chamar a mesma funcionalidade por
espeak
meio de uma chamada de função em seu programa, terá tempos de resposta mais rápidos.Não sei falar, então tentarei responder em termos genéricos.
espeak
apenas algumas vezes, com um texto relativamente longo a ser falado.