【发布时间】:2018-05-09 19:37:36
【问题描述】:
对不起,如果问题标题不好,但我试图解释我的意思:
据我所知,我可以使用 system() 函数在我的 C++ 代码中使用 Linux 终端的命令。例如system("aplay sound.wav");。我不知道我能不能像这样写所有的 Linux 命令,但是aplay 可以。
所以,我的问题就在这里:我想在我的 C++ 程序中使用 espeak。我喜欢 espeak 读取我通过它传递的每个字符串(类似于 aplay 在上面的代码中所做的,但尊重“字符串”) .是通过 system() 函数调用它更好,还是在我的 C++ 代码中编写这样的代码并在我想读取新字符串时更改 char* text 更好?:
#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;
}
哪个更快?
【问题讨论】:
-
除了您过于简单的示例之外,使用程序中的 espeak API 可能比系统调用更有效。
-
如果您考虑执行一些系统命令,那么您可能需要考虑为此目的使用 shell 脚本而不是 C++。
-
@VTT:我只有一个
string/char变量,我会在我的程序中多次更改它的内容,然后想通过espeak传递它以在每次更改时读取它。
标签: c++ function terminal system espeak