int main(int argc, char *argv[]) { jsgf_t *jsgf; fsg_model_t *fsg; cmd_ln_t *config; const char *rule; if ((config = cmd_ln_parse_r(NULL, defn, argc, argv, TRUE)) == NULL) return 1; if (cmd_ln_boolean_r(config, "-help")) { usagemsg(argv[0]); } jsgf = jsgf_parse_file(cmd_ln_str_r(config, "-jsgf"), NULL); if (jsgf == NULL) { return 1; } rule = cmd_ln_str_r(config, "-toprule") ? cmd_ln_str_r(config, "-toprule") : NULL; if (!(fsg = get_fsg(jsgf, rule))) { E_ERROR("No fsg was built for the given rule '%s'.\n" "Check rule name; it should be qualified (with grammar name)\n" "and not enclosed in angle brackets (e.g. 'grammar.rulename').", rule); return 1; } if (cmd_ln_boolean_r(config, "-compile")) { fsg_model_null_trans_closure(fsg, NULL); } if (cmd_ln_str_r(config, "-fsm")) { const char* outfile = cmd_ln_str_r(config, "-fsm"); const char* symfile = cmd_ln_str_r(config, "-symtab"); if (outfile) fsg_model_writefile_fsm(fsg, outfile); else fsg_model_write_fsm(fsg, stdout); if (symfile) fsg_model_writefile_symtab(fsg, symfile); } else { const char *outfile = cmd_ln_str_r(config, "-fsg"); if (outfile) fsg_model_writefile(fsg, outfile); else fsg_model_write(fsg, stdout); } fsg_model_free(fsg); jsgf_grammar_free(jsgf); return 0; }
int main(int argc, char *argv[]) { jsgf_t *jsgf; fsg_model_t *fsg; cmd_ln_t *config; if ((config = cmd_ln_parse_r(NULL, defn, argc, argv, TRUE)) == NULL) return 1; if (cmd_ln_boolean_r(config, "-help")) { usagemsg(argv[0]); } jsgf = jsgf_parse_file(cmd_ln_str_r(config, "-jsgf"), NULL); if (jsgf == NULL) { return 1; } fsg = get_fsg(jsgf, cmd_ln_str_r(config, "-rule") ? cmd_ln_str_r(config, "-rule") : NULL); if (cmd_ln_boolean_r(config, "-compile")) { fsg_model_null_trans_closure(fsg, NULL); } if (cmd_ln_str_r(config, "-fsm")) { const char* outfile = cmd_ln_str_r(config, "-fsm"); const char* symfile = cmd_ln_str_r(config, "-symtab"); if (outfile) fsg_model_writefile_fsm(fsg, outfile); else fsg_model_write_fsm(fsg, stdout); if (symfile) fsg_model_writefile_symtab(fsg, symfile); } else { const char *outfile = cmd_ln_str_r(config, "-fsg"); if (outfile) fsg_model_writefile(fsg, outfile); else fsg_model_write(fsg, stdout); } fsg_model_free(fsg); jsgf_grammar_free(jsgf); return 0; }
int ofxSphinxASR::engineInit(ofAsrEngineArgs *e) { #if defined TARGET_WIN32 char cfg_filename[] = "sphinx.cfg"; char grammarJSGF_filename[] = "grammar.jsgf"; char grammarFSG_filename[] = "grammar.fsg"; #else char cfg_filename[] = "/tmp/sphinx.cfg"; char grammarJSGF_filename[] = "/tmp/grammar.jsgf"; char grammarFSG_filename[] = "/tmp/grammar.fsg"; #endif FILE *cfg_fp = fopen(cfg_filename, "wt"); if (cfg_fp==NULL) return OFXASR_FAIL_WRITE_CONFIG; if ( access(e->sphinxmodel_am.c_str(), 0) != 0 ) return OFXASR_FAIL_READ_FILES; if ( access(e->sphinxmodel_lm.c_str(), 0) != 0 ) return OFXASR_FAIL_READ_FILES; if ( access(e->sphinxmodel_dict.c_str(), 0) != 0 ) return OFXASR_FAIL_READ_FILES; if ( access(e->sphinxmodel_fdict.c_str(), 0) != 0 ) return OFXASR_FAIL_READ_FILES; char cur_path[1024]; getcwd(cur_path, 1024); fprintf(cfg_fp, "-samprate %d\n", e->samplerate); fprintf(cfg_fp, "-hmm %s/%s\n", cur_path, e->sphinxmodel_am.c_str()); fprintf(cfg_fp, "-dict %s/%s\n", cur_path, e->sphinxmodel_dict.c_str()); fprintf(cfg_fp, "-fdict %s/%s\n", cur_path, e->sphinxmodel_fdict.c_str()); fprintf(cfg_fp, "-lm %s/%s\n", cur_path, e->sphinxmodel_lm.c_str()); if (e->sphinx_mode == 2) { if(e->sphinx_candidate_sentences.size() < 1) { printf("Warning: The word list is empty! Use mode 4.\n"); e->sphinx_mode = 4; } else { FILE *gram_fp = fopen(grammarJSGF_filename, "wt"); if (gram_fp==NULL) return OFXASR_FAIL_WRITE_CONFIG; fprintf(gram_fp, "#JSGF V1.0;\n\ngrammar cca_gram;\n\npublic <cca_gram> = (\n"); for (int i=0; i<e->sphinx_candidate_sentences.size()-1; i++) { fprintf(gram_fp, "%s |\n", e->sphinx_candidate_sentences[i].c_str()); } fprintf(gram_fp, "%s );\n\n", e->sphinx_candidate_sentences[e->sphinx_candidate_sentences.size()-1].c_str()); fclose(gram_fp); } jsgf_t *jsgf = jsgf_parse_file(grammarJSGF_filename, NULL); if (jsgf == NULL) { printf("Bad jsgf file %s.\n", grammarJSGF_filename); return OFXASR_INVALID_JSGF_GRAMMAR; } fsg_model_t *fsg = get_fsg(jsgf, NULL); fsg_model_writefile(fsg, grammarFSG_filename); fsg_model_free(fsg); jsgf_grammar_free(jsgf); fprintf(cfg_fp, "-fsg %s\n", grammarFSG_filename); } fprintf(cfg_fp, "-op_mode %d\n", e->sphinx_mode); fclose(cfg_fp); err_set_logfp(NULL); // disable logs cmd_ln_t *config = NULL; config = cmd_ln_parse_file_r(config, S3_DECODE_ARG_DEFS, cfg_filename, TRUE); if (config == NULL) { return OFXASR_INVALID_CONFIG; } decoder = new s3_decode_t; if (s3_decode_init(decoder, config) != S3_DECODE_SUCCESS) { return OFXASR_FAIL_INIT_DECODER; } fe = fe_init_auto_r(config); if (fe == NULL) { return OFXASR_FAIL_INIT_FRONTEND; } bEngineInitialed = true; return OFXASR_SUCCESS; }