Windows上的Flite API错误

Flite API error on windows

本文关键字:错误 API Flite 上的 Windows      更新时间:2023-10-16

我为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 FILEn");
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 上,所以我调用项目.exe没有文档中的参数。 你知道怎么解决这个问题吗?

如注释中所述,您应该删除参数计数(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;
}