我在网上找到了这个密码:
#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)
。变量
I
、Run
和L
未使用,可以删除。要能够在命令行上将文本作为字符串传递,从而能够发出
system( "espeak \"Say Something\"") ;
,例如,您只需将argv[1]
传递给espeak_Synth()
,而不是text
(但是您需要恢复strlen()
调用以获得大小。关于c - 在我们的C/C++程序中使用espeak时需要哪些行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47765577/