2

我想将一个字符串传递给 espeak-ng,它会通过声音读取我的字符串!

我搜索并找到了该程序并进行了一些修改以将其从意大利语更改为英语(在注释行下),但没有奏效:

#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[] = {"lt+klatt2"};
 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 = "lt"; //Default to US English
    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 = "klatt";
    voice.name = "US";
    voice.variant = 2;
    voice.gender = 1;
    espeak_SetVoiceByProperties(&voice);
    Size = strlen(text)+1;    
    printf("Saying  '%s'",text);
    espeak_Synth( text, Size, position, position_type, end_position, flags,
    unique_identifier, user_data );
    espeak_Synchronize( );
    printf("\n:Done\n"); 
    return 0;
}

问题是什么?

它编译没有错误并speaks作为可执行文件但是当我尝试时./speaks结果是:

Saying  'this is a english test'
:Done

没有声音!

编辑:我问了我的问题gitub,有人说:

espeak_Initialize 的 path 参数需要指向 espeak-ng-data 目录,或者它的父目录。或者,您可以将 ESPEAK_DATA_PATH 环境变量设置为指向该目录。

所以我确实将此行添加ESPEAK_DATA_PATH=/usr/local/share/espeak-ng-data/etc/environment文件中,但什么也没发生!

我也尝试将代码的路径变量更改为此(因为我知道地址是真的)char *path="/usr/local/share/espeak-ng-data"但又没有声音了!

4

1 回答 1

2

好的,尝试一下,您需要先构建和安装 libpaudio。

然后你配置 & 构建 espeak。

接下来,当您运行时,您可能需要指定库路径:

LD_LIBRARY_PATH=/tmp/espeak-ng/src/.libs/:/usr/local/lib ./sotest 

这然后通知我一个问题:

Error processing file '/usr/local/share/espeak-ng-data/phontab': No such file or directory.

这告诉我想要安装 libespeak-ng,因为路径是硬编码的(当然路径本身可以使用./configure --prefix=etc 进行修改)

我个人发现在构建所有库工件期间我必须执行 LD_LIBRARY_PATH 技巧,并且必须连续运行多次 make 直到最终它没有报告更多错误。

这一切都说明项目维护的不是很好。即使在此过程中,我也看到了几个段错误。

终于成功后

sudo make install

您的测试程序最终运行并发出预期的声音。

于 2017-11-23T10:39:55.587 回答