죄송합니다 질문 제목이 잘 아니지만, 내가 무엇을 의미하는지 설명하려고하는 경우 :어느 쪽이 더 낫습니까? C++ 코드에서 System() 함수를 사용하거나 소스 코드를 사용합니까?
내가 내 C++ 코드 내에서 리눅스 터미널의 명령을 사용하여 system()
기능을 사용할 수 있습니다 아시다시피. 예 : system("aplay sound.wav");
. 나는 이와 같은 모든 리눅스 명령을 쓸 수 있을지 모르지만, aplay
이 작동합니다.
espeak
를 사용하려면 읽기 내가 (
aplay
은 "문자열"을 위의 코드 만에 대하여 무엇을 같은 것을)을 여물 통과 각각의 문자열입니다. 그것은
system()
함수를 호출하는 것이 좋습니다 아니면이 내 C 내부 ++ 코드와 같은 코드를 작성하고 내가 새 문자열? 하나가 빠른
#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;
}
을 읽고 싶어 할 때마다 char* text
을 변경하는 것이 좋습니다?
, 그것은 오히려 시스템 호출보다 프로그램에서 eSpeak를 API를 사용하는 것이 아마 더 효율적입니다. – user0042
일부 시스템 명령을 실행하는 경우 C++ 대신 쉘 스크립트를 사용하는 것이 좋습니다. – VTT
@VTT : 프로그램 내에서 내용이 여러 번 변경 될 때마다 하나의'string/char' 변수 만 있습니다. 변경 될 때마다'espeak'를 통해 전달하려고합니다. – user145959