我在网上找到了这个密码:

#include <string.h>
#include <malloc.h>
#include <espeak/speak_lib.h>


espeak_POSITION_TYPE position_type;
espeak_AUDIO_OUTPUT output;
char *path=NULL;
int Buflength = 1000, Options=0;
void* user_data;
t_espeak_callback *SynthCallback;
espeak_PARAMETER Parm;



char Voice[] = {"English"};


char text[30] = {"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读取我程序中的字符串,上面的代码可以做到这一点,但我想知道,所有这些代码都是为此目的所必需的吗?(我的意思是有可能简化它吗?)
***另外,我想知道有没有办法使用espeak作为系统功能?我是说system("espeak "something" ");

最佳答案

eSpeak本身的使用似乎非常少-您需要阅读相关文档。有一些小的C代码简化是可能的,但也许不值得这么做:
memset()是不必要的。结构可以初始化为零,因此:

espeak_VOICE voice = {0} ;

如果您声明text,则:
char text[] = "this is a English test";

然后可以避免使用strlen()并用Size替换sizeof(text)
变量IRunL未使用,可以删除。
要能够在命令行上将文本作为字符串传递,从而能够发出system( "espeak \"Say Something\"") ;,例如,您只需将argv[1]传递给espeak_Synth(),而不是text(但是您需要恢复strlen()调用以获得大小。

关于c - 在我们的C/C++程序中使用espeak时需要哪些行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47765577/

10-09 08:45