Я строю Flite для Windows, код:
#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 «использование:», если я удаляю это, я получаю это «пытался получить доступ к лексикону в формате val flite -1». Я нахожусь на окнах, поэтому я вызываю project.exe без аргументов в документации.
Вы знаете, как это исправить?
Как сказано в комментариях вы должны удалить количество параметров (argc
) проверять.
Кроме того: при звонке new_voice
метод вы неинициализированы cst_voice
и ты все еще не можешь использовать это.
Вот почему вы получаете ошибку:
пытался получить доступ к лексикону в -1 типе val flite
Это значит лекс (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;
}
Я исправил это, это была проблема с включаемыми файлами. Спасибо