static const cst_val *last_accent(const cst_item *syl) { const cst_item *s; int c; for (c=0,s=item_as(syl,"Syllable"); s && (c < CST_CONST_INT_MAX); s=item_prev(s),c++) { if (val_int(accented(s))) return val_string_n(c); } return val_string_n(c); }
static const cst_val *sub_phrases(const cst_item *syl) { const cst_item *s; int c; for (c=0,s=path_to_item(syl,"R:SylStructure.parent.R:Phrase.parent.p"); s && (c < CST_CONST_INT_MAX); s=item_prev(s),c++); return val_string_n(c); }
static const cst_val *pos_in_syl(const cst_item *seg) { const cst_item *s; int c; for (c=-1,s=item_as(seg,"SylStructure"); s; s=item_prev(s),c++); return val_string_n(c); }
static const cst_val *syl_onsetsize(const cst_item *syl) { cst_item *d; int c; for (c=0,d=item_daughter(item_as(syl,"SylStructure")); d; d=item_next(d),c++) { if (cst_streq("+",val_string(ph_vc(d)))) break; } return val_string_n(c); }
static const cst_val *syl_in(const cst_item *syl) { /* Number of syllables since last major break */ const cst_item *ss,*p,*fs; int c; ss = item_as(syl,"Syllable"); fs = path_to_item(syl,"R:SylStructure.parent.R:Phrase.parent.daughter.R:SylStructure.daughter"); for (c=0, p=ss; p && (c < CST_CONST_INT_MAX); p=item_prev(p),c++) if (item_equal(p,fs)) break; return val_string_n(c); }
static const cst_val *ssyl_out(const cst_item *syl) { /* Number of stressed syllables until last major break */ const cst_item *ss,*p,*fs; int c; ss = item_as(syl,"Syllable"); fs = path_to_item(syl,"R:SylStructure.parent.R:Phrase.parent.daughtern.R:SylStructure.daughtern"); for (c=0, p=item_next(ss); p && (c < CST_CONST_INT_MAX); p=item_next(p)) { if (cst_streq("1",item_feat_string(p,"stress"))) c++; if (item_equal(p,fs)) break; } return val_string_n(c); /* its used randomly as int and float */ }
static const cst_val *ssyl_in(const cst_item *syl) { /* Number of stressed syllables since last major break */ const cst_item *ss,*p,*fs; int c; ss = item_as(syl,"Syllable"); fs = path_to_item(syl,"R:SylStructure.parent.R:Phrase.parent.daughter.R:SylStructure.daughter"); /* This should actually include the first syllable, but Festival's doesn't. */ for (c=0, p=item_prev(ss); p && (!item_equal(p,fs)) && (c < CST_CONST_INT_MAX); p=item_prev(p)) { if (cst_streq("1",item_feat_string(p,"stress"))) c++; } return val_string_n(c); /* its used randomly as int and float */ }
/* Flite_HTS_Engine_create_label: create label per phoneme */ static void Flite_HTS_Engine_create_label(Flite_HTS_Engine * f, cst_item * item, char *label) { const char *p1 = ffeature_string(item, "p.p.name"); const char *p2 = ffeature_string(item, "p.name"); const char *p3 = ffeature_string(item, "name"); const char *p4 = ffeature_string(item, "n.name"); const char *p5 = ffeature_string(item, "n.n.name"); if (strcmp(p3, "pau") == 0) { /* for pause */ int a3 = ffeature_int(item, "p.R:SylStructure.parent.R:Syllable.syl_numphones"); int c3 = ffeature_int(item, "n.R:SylStructure.parent.R:Syllable.syl_numphones"); int d2 = ffeature_int(item, "p.R:SylStructure.parent.parent.R:Word.word_numsyls"); int f2 = ffeature_int(item, "n.R:SylStructure.parent.parent.R:Word.word_numsyls"); int g1 = ffeature_int(item, "p.R:SylStructure.parent.parent.R:Phrase.parent.lisp_num_syls_in_phrase"); int g2 = ffeature_int(item, "p.R:SylStructure.parent.parent.R:Phrase.parent.lisp_num_words_in_phrase"); int i1 = ffeature_int(item, "n.R:SylStructure.parent.parent.R:Phrase.parent.lisp_num_syls_in_phrase"); int i2 = ffeature_int(item, "n.R:SylStructure.parent.parent.R:Phrase.parent.lisp_num_words_in_phrase"); int j1, j2, j3; if (item_next(item) != NULL) { j1 = ffeature_int(item, "n.R:SylStructure.parent.parent.R:Phrase.parent.lisp_total_syls"); j2 = ffeature_int(item, "n.R:SylStructure.parent.parent.R:Phrase.parent.lisp_total_words"); j3 = ffeature_int(item, "n.R:SylStructure.parent.parent.R:Phrase.parent.lisp_total_phrases"); } else { j1 = ffeature_int(item, "p.R:SylStructure.parent.parent.R:Phrase.parent.lisp_total_syls"); j2 = ffeature_int(item, "p.R:SylStructure.parent.parent.R:Phrase.parent.lisp_total_words"); j3 = ffeature_int(item, "p.R:SylStructure.parent.parent.R:Phrase.parent.lisp_total_phrases"); } sprintf(label, "%s^%s-%s+%s=%s@x_x/A:%s_%s_%s/B:x-x-x@x-x&x-x#x-x$x-x!x-x;x-x|x/C:%s+%s+%s/D:%s_%s/E:x+x@x+x&x+x#x+x/F:%s_%s/G:%s_%s/H:x=x^x=x|x/I:%s=%s/J:%d+%d-%d", /* */ strcmp(p1, "0") == 0 ? "x" : p1, /* p1 */ strcmp(p2, "0") == 0 ? "x" : p2, /* p2 */ p3, /* p3 */ strcmp(p4, "0") == 0 ? "x" : p4, /* p4 */ strcmp(p5, "0") == 0 ? "x" : p5, /* p5 */ a3 == 0 ? "x" : ffeature_string(item, "p.R:SylStructure.parent.R:Syllable.stress"), /* a1 */ a3 == 0 ? "x" : ffeature_string(item, "p.R:SylStructure.parent.R:Syllable.accented"), /* a2 */ a3 == 0 ? "x" : val_string(val_string_n(a3)), /* a3 */ c3 == 0 ? "x" : ffeature_string(item, "n.R:SylStructure.parent.R:Syllable.stress"), /* c1 */ c3 == 0 ? "x" : ffeature_string(item, "n.R:SylStructure.parent.R:Syllable.accented"), /* c2 */ c3 == 0 ? "x" : val_string(val_string_n(c3)), /* c3 */ d2 == 0 ? "x" : ffeature_string(item, "p.R:SylStructure.parent.parent.R:Word.gpos"), /* d1 */ d2 == 0 ? "x" : val_string(val_string_n(d2)), /* d2 */ f2 == 0 ? "x" : ffeature_string(item, "n.R:SylStructure.parent.parent.R:Word.gpos"), /* f1 */ f2 == 0 ? "x" : val_string(val_string_n(f2)), /* f2 */ g1 == 0 ? "x" : val_string(val_string_n(g1)), /* g1 */ g2 == 0 ? "x" : val_string(val_string_n(g2)), /* g2 */ i1 == 0 ? "x" : val_string(val_string_n(i1)), /* i1 */ i2 == 0 ? "x" : val_string(val_string_n(i2)), /* i2 */ j1, /* j1 */ j2, /* j2 */ j3); /* j3 */ } else { /* for no pause */ int p6 = ffeature_int(item, "R:SylStructure.pos_in_syl") + 1; int a3 = ffeature_int(item, "R:SylStructure.parent.R:Syllable.p.syl_numphones"); int b3 = ffeature_int(item, "R:SylStructure.parent.R:Syllable.syl_numphones"); int b4 = ffeature_int(item, "R:SylStructure.parent.R:Syllable.pos_in_word") + 1; int b12 = ffeature_int(item, "R:SylStructure.parent.R:Syllable.lisp_distance_to_p_stress"); int b13 = ffeature_int(item, "R:SylStructure.parent.R:Syllable.lisp_distance_to_n_stress"); int b14 = ffeature_int(item, "R:SylStructure.parent.R:Syllable.lisp_distance_to_p_accent"); int b15 = ffeature_int(item, "R:SylStructure.parent.R:Syllable.lisp_distance_to_n_accent"); int c3 = ffeature_int(item, "R:SylStructure.parent.R:Syllable.n.syl_numphones"); int d2 = ffeature_int(item, "R:SylStructure.parent.parent.R:Word.p.word_numsyls"); int e2 = ffeature_int(item, "R:SylStructure.parent.parent.R:Word.word_numsyls"); int e3 = ffeature_int(item, "R:SylStructure.parent.parent.R:Word.pos_in_phrase") + 1; int e7 = ffeature_int(item, "R:SylStructure.parent.parent.R:Word.lisp_distance_to_p_content"); int e8 = ffeature_int(item, "R:SylStructure.parent.parent.R:Word.lisp_distance_to_n_content"); int f2 = ffeature_int(item, "R:SylStructure.parent.parent.R:Word.n.word_numsyls"); int g1 = ffeature_int(item, "R:SylStructure.parent.parent.R:Phrase.parent.p.lisp_num_syls_in_phrase"); int g2 = ffeature_int(item, "R:SylStructure.parent.parent.R:Phrase.parent.p.lisp_num_words_in_phrase"); int h2 = ffeature_int(item, "R:SylStructure.parent.parent.R:Phrase.parent.lisp_num_words_in_phrase"); int h3 = ffeature_int(item, "R:SylStructure.parent.R:Syllable.sub_phrases") + 1; const char *h5 = ffeature_string(item, "R:SylStructure.parent.parent.R:Phrase.parent.daughtern.R:SylStructure.daughtern.endtone"); int i1 = ffeature_int(item, "R:SylStructure.parent.parent.R:Phrase.parent.n.lisp_num_syls_in_phrase"); int i2 = ffeature_int(item, "R:SylStructure.parent.parent.R:Phrase.parent.n.lisp_num_words_in_phrase"); int j1 = ffeature_int(item, "R:SylStructure.parent.parent.R:Phrase.parent.lisp_total_syls"); int j2 = ffeature_int(item, "R:SylStructure.parent.parent.R:Phrase.parent.lisp_total_words"); int j3 = ffeature_int(item, "R:SylStructure.parent.parent.R:Phrase.parent.lisp_total_phrases"); sprintf(label, "%s^%s-%s+%s=%s@%d_%d/A:%s_%s_%s/B:%d-%d-%d@%d-%d&%d-%d#%d-%d$%d-%d!%s-%s;%s-%s|%s/C:%s+%s+%s/D:%s_%s/E:%s+%d@%d+%d&%d+%d#%s+%s/F:%s_%s/G:%s_%s/H:%d=%d^%d=%d|%s/I:%s=%s/J:%d+%d-%d", /* */ strcmp(p1, "0") == 0 ? "x" : p1, /* p1 */ strcmp(p2, "0") == 0 ? "x" : p2, /* p2 */ p3, /* p3 */ strcmp(p4, "0") == 0 ? "x" : p4, /* p4 */ strcmp(p5, "0") == 0 ? "x" : p5, /* p5 */ p6, /* p6 */ b3 - p6 + 1, /* p7 */ a3 == 0 ? "x" : ffeature_string(item, "R:SylStructure.parent.R:Syllable.p.stress"), /* a1 */ a3 == 0 ? "x" : ffeature_string(item, "R:SylStructure.parent.R:Syllable.p.accented"), /* a2 */ a3 == 0 ? "x" : val_string(val_string_n(a3)), /* a3 */ ffeature_int(item, "R:SylStructure.parent.R:Syllable.stress"), /* b1 */ ffeature_int(item, "R:SylStructure.parent.R:Syllable.accented"), /* b2 */ b3, /* b3 */ b4, /* b4 */ e2 - b4 + 1, /* b5 */ ffeature_int(item, "R:SylStructure.parent.R:Syllable.syl_in") + 1, /* b6 */ ffeature_int(item, "R:SylStructure.parent.R:Syllable.syl_out") + 1, /* b7 */ ffeature_int(item, "R:SylStructure.parent.R:Syllable.ssyl_in"), /* b8 */ ffeature_int(item, "R:SylStructure.parent.R:Syllable.ssyl_out"), /* b9 */ ffeature_int(item, "R:SylStructure.parent.R:Syllable.asyl_in"), /* b10 */ ffeature_int(item, "R:SylStructure.parent.R:Syllable.asyl_out"), /* b11 */ b12 == 0 ? "x" : val_string(val_string_n(b12)), /* b12 */ b13 == 0 ? "x" : val_string(val_string_n(b13)), /* b13 */ b14 == 0 ? "x" : val_string(val_string_n(b14)), /* b14 */ b15 == 0 ? "x" : val_string(val_string_n(b15)), /* b15 */ ffeature_string(item, "R:SylStructure.parent.R:Syllable.syl_vowel"), /* b16 */ c3 == 0 ? "x" : ffeature_string(item, "R:SylStructure.parent.R:Syllable.n.stress"), /* c1 */ c3 == 0 ? "x" : ffeature_string(item, "R:SylStructure.parent.R:Syllable.n.accented"), /* c2 */ c3 == 0 ? "x" : val_string(val_string_n(c3)), /* c3 */ d2 == 0 ? "x" : ffeature_string(item, "R:SylStructure.parent.parent.R:Word.p.gpos"), /* d1 */ d2 == 0 ? "x" : val_string(val_string_n(d2)), /* d2 */ ffeature_string(item, "R:SylStructure.parent.parent.R:Word.gpos"), /* e1 */ e2, /* e2 */ e3, /* e3 */ h2 - e3 + 1, /* e4 */ ffeature_int(item, "R:SylStructure.parent.parent.R:Word.content_words_in"), /* e5 */ ffeature_int(item, "R:SylStructure.parent.parent.R:Word.content_words_out"), /* e6 */ e7 == 0 ? "x" : val_string(val_string_n(e7)), /* e7 */ e8 == 0 ? "x" : val_string(val_string_n(e8)), /* e8 */ f2 == 0 ? "x" : ffeature_string(item, "R:SylStructure.parent.parent.R:Word.n.gpos"), /* f1 */ f2 == 0 ? "x" : val_string(val_string_n(f2)), /* f2 */ g1 == 0 ? "x" : val_string(val_string_n(g1)), /* g1 */ g2 == 0 ? "x" : val_string(val_string_n(g2)), /* g2 */ ffeature_int(item, "R:SylStructure.parent.parent.R:Phrase.parent.lisp_num_syls_in_phrase"), /* h1 */ h2, /* h2 */ h3, /* h3 */ j3 - h3 + 1, /* h4 */ strcmp(h5, "0") == 0 ? "NONE" : h5, /* h5 */ i1 == 0 ? "x" : val_string(val_string_n(i1)), /* i1 */ i2 == 0 ? "x" : val_string(val_string_n(i2)), /* i2 */ j1, /* j1 */ j2, /* j2 */ j3); /* j3 */ } }