我为Windows构建了flite,代码为:
#include "..\\include\\flite.h"
cst_voice *register_cmu_us_kal();
int main(int argc, char **argv)
{ cst_voice *v;
if (argc != 2)
{
fprintf(stderr, "usage: flite_test FILE\n");
exit(-1);
}
flite_init();
v = new_voice();
flite_text_to_speech("This is a test",v,"play");
return 0;
}
但是我得到了printf消息“ usage:”,如果我删除该消息,则会得到这个“试图以-1型val flite访问词典”的信息。我在Windows上,所以我在没有文档中参数的情况下调用project.exe。 你知道如何解决这个问题吗?
答案 0 :(得分:0)
如评论中所述,您应该删除参数计数(argc
)检查。
此外:调用new_voice
方法时,您会得到未初始化的cst_voice
,但仍然无法使用它。
这就是为什么出现错误的原因:
试图以-1型val flite访问词典
这意味着lex(cst_lexicon
)在cst_voice
结构中仍未初始化。
我想您需要执行以下代码:
cst_voice *register_cmu_us_no_wave()
{
cst_voice *v = new_voice();
cst_lexicon *lex;
v->name = "no_wave_voice";
/* Set up basic values for synthesizing with this voice */
usenglish_init(v);
feat_set_string(v->features,"name","cmu_us_no_wave");
/* Lexicon */
lex = cmu_lex_init();
feat_set(v->features,"lexicon",lexicon_val(lex));
/* Intonation */
feat_set_float(v->features,"int_f0_target_mean",95.0);
feat_set_float(v->features,"int_f0_target_stddev",11.0);
feat_set_float(v->features,"duration_stretch",1.1);
/* Post lexical rules */
feat_set(v->features,"postlex_func",uttfunc_val(lex->postlex));
/* Waveform synthesis: diphone_synth */
feat_set(v->features,"wave_synth_func",uttfunc_val(&no_wave_synth));
return v;
}
答案 1 :(得分:0)
我已解决此问题,这是包含文件的问题。谢谢