我为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。
你知道如何解决这个问题吗?

最佳答案

如评论中所述,您应该删除参数计数(argc)检查。

另外:调用new_voice方法时,您会得到未初始化的cst_voice,但仍然无法使用它。

那就是为什么您得到错误:



这意味着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;
}

关于c++ - Windows上的Flite API错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51979973/

10-10 21:25