"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "intonation/tilt/tilt_analysis.cc" between
speech_tools-2.4-release.tar.gz and speech_tools-2.5.0-release.tar.gz

About: The speech_tools - Edinburgh Speech Tools Library (used by the Festival Speech Synthesis System).

tilt_analysis.cc  (speech_tools-2.4-release):tilt_analysis.cc  (speech_tools-2.5.0-release)
skipping to change at line 136 skipping to change at line 136
if (op.present("debug")) if (op.present("debug"))
{ {
cout << "rfc_recognise\n"; cout << "rfc_recognise\n";
cout << ev; cout << ev;
} }
// fill values in event labels using matching algorithms // fill values in event labels using matching algorithms
for (e = ev.head(); e != 0; e = n) for (e = ev.head(); e != 0; e = n)
{ {
n = e->next(); n = inext(e);
// cout << endl << endl; // cout << endl << endl;
if (!event_item(*e)) if (!event_item(*e))
continue; continue;
end_search = e->F("end") + op.F("stop_limit"); end_search = e->F("end") + op.F("stop_limit");
start_search = e->F("start") - op.F("start_limit"); start_search = e->F("start") - op.F("start_limit");
if (op.present("debug")) if (op.present("debug"))
{ {
cout << "start = " << e->F("start") << " End " cout << "start = " << e->F("start") << " End "
<< e->F("end")<< endl; << e->F("end")<< endl;
skipping to change at line 247 skipping to change at line 247
e->A("ev").remove("start_f0"); e->A("ev").remove("start_f0");
} }
if (!e->f_present("time")) if (!e->f_present("time"))
e->set("time", (e->F("end") - e->F("rfc.fall_dur"))); e->set("time", (e->F("end") - e->F("rfc.fall_dur")));
} }
void convert_to_local(EST_Relation &ev) void convert_to_local(EST_Relation &ev)
{ {
EST_Item *e; EST_Item *e;
for (e = ev.head(); e; e = e->next()) for (e = ev.head(); e; e = inext(e))
convert_to_local(e); convert_to_local(e);
// cout << "c to l \n\n\n" << ev << endl << endl; // cout << "c to l \n\n\n" << ev << endl << endl;
// ev.remove_item_feature("rfc.peak_f0"); // ev.remove_item_feature("rfc.peak_f0");
// ev.remove_item_feature("rfc.peak_pos"); // ev.remove_item_feature("rfc.peak_pos");
ev.remove_item_feature("ev.start_f0"); ev.remove_item_feature("ev.start_f0");
ev.remove_item_feature("start"); ev.remove_item_feature("start");
// ev.remove_item_feature("rfc.end_f0"); // ev.remove_item_feature("rfc.end_f0");
ev.remove_item_feature("end"); ev.remove_item_feature("end");
skipping to change at line 499 skipping to change at line 499
// cout << "labelled event: " << ev << endl; // cout << "labelled event: " << ev << endl;
} }
return 0; return 0;
} }
static void silence_f0(EST_Relation &ev, EST_Track &fz) static void silence_f0(EST_Relation &ev, EST_Track &fz)
{ {
EST_Item * e; EST_Item * e;
int i; int i;
for (e = ev.head(); e; e = e->next()) for (e = ev.head(); e; e = inext(e))
if (sil_item(*e)) if (sil_item(*e))
{ {
i = fz.prev_non_break(fz.index(e->F("start"))); i = fz.prev_non_break(fz.index(e->F("start")));
e->set("ev.start_f0", fz.a(i)); e->set("ev.start_f0", fz.a(i));
i = fz.next_non_break(fz.index(e->F("end"))); i = fz.next_non_break(fz.index(e->F("end")));
e->set("ev.end_f0", fz.a(i)); e->set("ev.end_f0", fz.a(i));
} }
} }
static void add_phrases(EST_Relation &ev) static void add_phrases(EST_Relation &ev)
{ {
EST_Item *e, *n, *s; EST_Item *e, *n, *s;
// cout << "phrase edges: " << endl; // cout << "phrase edges: " << endl;
// cout << ev; // cout << ev;
for (e = ev.head(); e; e = n) for (e = ev.head(); e; e = n)
{ {
n = e->next(); n = inext(e);
if (sil_item(*e)) if (sil_item(*e))
{ {
if (e != ev.head()) if (e != ev.head())
{ {
s = e->insert_before(); s = e->insert_before();
s->set("name", "phrase_end"); s->set("name", "phrase_end");
s->set("ev.f0", e->F("ev.start_f0")); s->set("ev.f0", e->F("ev.start_f0"));
s->set("time", e->F("start")); s->set("time", e->F("start"));
} }
if (e != ev.tail()) if (e != ev.tail())
skipping to change at line 541 skipping to change at line 541
s = e->insert_after(); s = e->insert_after();
s->set("name", "phrase_start"); s->set("name", "phrase_start");
s->set("ev.f0", e->F("ev.end_f0")); s->set("ev.f0", e->F("ev.end_f0"));
s->set("time", e->F("end")); s->set("time", e->F("end"));
} }
} }
} }
for (e = ev.head(); e; e = n) for (e = ev.head(); e; e = n)
{ {
n = e->next(); n = inext(e);
if (sil_item(*e)) if (sil_item(*e))
ev.remove_item(e); ev.remove_item(e);
} }
} }
/* /*
static void add_phrases(EST_Relation &ev, bool phrase_edges) static void add_phrases(EST_Relation &ev, bool phrase_edges)
{ {
EST_Item *e, *n, *s, *p; EST_Item *e, *n, *s, *p;
float min_duration = 0.02; float min_duration = 0.02;
cout << "phrase edges: " << phrase_edges << endl; cout << "phrase edges: " << phrase_edges << endl;
cout << ev; cout << ev;
for (e = ev.head(); next(e); e = n) for (e = ev.head(); inext(e); e = n)
{ {
n = e->next(); n = inext(e);
p = e->prev(); p = iprev(e);
if (!sil_item(*e)) if (!sil_item(*e))
continue; continue;
s = 0; s = 0;
if ((e != ev.head()) && (phrase_edges if ((e != ev.head()) && (phrase_edges
|| (p &&(e->F("start") - p->F("end")) || (p &&(e->F("start") - p->F("end"))
> min_duration))) > min_duration)))
{ {
s = e->insert_before(); s = e->insert_before();
skipping to change at line 598 skipping to change at line 598
} }
} }
s = e->insert_after(); s = e->insert_after();
s->set("name", "phrase_end"); s->set("name", "phrase_end");
s->set("ev.f0", e->F("ev.start_f0", 1)); s->set("ev.f0", e->F("ev.start_f0", 1));
s->set("position", e->F("end")); s->set("position", e->F("end"));
for (e = ev.head(); e; e = n) for (e = ev.head(); e; e = n)
{ {
n = e->next(); n = inext(e);
if (sil_item(*e)) if (sil_item(*e))
ev.remove_item(e); ev.remove_item(e);
} }
cout << "end phrase edges\n"; cout << "end phrase edges\n";
} }
*/ */
static void make_int_item(EST_Item &tmp, static void make_int_item(EST_Item &tmp,
const EST_String name, float end, float start, const EST_String name, float end, float start,
float start_f0, float peak_pos, float start_f0, float peak_pos,
float peak_f0) float peak_f0)
skipping to change at line 729 skipping to change at line 729
/* /*
#if 0 #if 0
static void fill_f0_values(EST_Track &fz, EST_Relation &ev) static void fill_f0_values(EST_Track &fz, EST_Relation &ev)
{ {
EST_Item *e; EST_Item *e;
float start_a; float start_a;
int pos; int pos;
float prev = 0.0; float prev = 0.0;
for (e = ev.head(); e != 0; e = e->next()) for (e = ev.head(); e != 0; e = inext(e))
{ {
if (e->name() == "sil") if (e->name() == "sil")
{ {
pos = fz.index(prev); pos = fz.index(prev);
pos = fz.prev_non_break(pos); pos = fz.prev_non_break(pos);
start_a = pos > 0 ? fz.a(pos) : 0.0; start_a = pos > 0 ? fz.a(pos) : 0.0;
} }
else if (e->name() == "c") else if (e->name() == "c")
{ {
pos = fz.index(prev);; pos = fz.index(prev);;
skipping to change at line 799 skipping to change at line 799
n->set("start", sil_end); n->set("start", sil_end);
} }
static void add_phrases_old(EST_Relation &ev, EST_Track &fz) static void add_phrases_old(EST_Relation &ev, EST_Track &fz)
{ {
int i; int i;
EST_Item *e, *n, *s; EST_Item *e, *n, *s;
bool sil = false; bool sil = false;
float start, end; float start, end;
for (e = ev.head(); next(e); e = n) for (e = ev.head(); inext(e); e = n)
{ {
n = e->next(); n = inext(e);
start = e->F("end"); start = e->F("end");
end = n->F("start"); end = n->F("start");
sil = false; sil = false;
cout << endl << endl; cout << endl << endl;
cout << *e << endl; cout << *e << endl;
cout << *n << endl; cout << *n << endl;
cout << "start = " << start << endl; cout << "start = " << start << endl;
skipping to change at line 860 skipping to change at line 860
if (fz.track_break(i)) if (fz.track_break(i))
{ {
for (j = i; j < fz.num_frames(); ++j) for (j = i; j < fz.num_frames(); ++j)
if (fz.val(j)) if (fz.val(j))
break; break;
if (j == fz.num_frames()) // off end of array if (j == fz.num_frames()) // off end of array
break; break;
cout << "silence between " <<i << " and " << j << endl; cout << "silence between " <<i << " and " << j << endl;
// cout << " " << fz.t(i) << " and " << fz.t(j) << endl; // cout << " " << fz.t(i) << " and " << fz.t(j) << endl;
for (e = ev.head(); e != 0; e = e->next()) for (e = ev.head(); e != 0; e = inext(e))
if (e->F("end") >= fz.t(j)) if (e->F("end") >= fz.t(j))
break; break;
insert_silence(e, fz, i, j); insert_silence(e, fz, i, j);
// for (e = ev.head(); e != 0; e = e->next()) // for (e = ev.head(); e != 0; e = inext(e))
// cout << *e << " : " << *RFCS(*e) << endl; // cout << *e << " : " << *RFCS(*e) << endl;
i = j; i = j;
} }
if (sil_item(*ev.tail())) if (sil_item(*ev.tail()))
return; return;
float start_f0 = fz.a(fz.end()); float start_f0 = fz.a(fz.end());
skipping to change at line 887 skipping to change at line 887
start_f0, 0.0, 0.0); start_f0, 0.0, 0.0);
e->set("rfc:type", "SIL"); e->set("rfc:type", "SIL");
} }
*/ */
/*static void minimum_duration(EST_Relation &ev, float min_dur) /*static void minimum_duration(EST_Relation &ev, float min_dur)
{ {
EST_Item *e, *n; EST_Item *e, *n;
for (e = ev.head(); e != 0; e = n) for (e = ev.head(); e != 0; e = n)
{ {
n = e->next(); n = inext(e);
if (dur(*e) < min_dur) if (dur(*e) < min_dur)
ev.remove_item(e); ev.remove_item(e);
} }
} }
static void adjust_overlaps(EST_Relation &ev) static void adjust_overlaps(EST_Relation &ev)
{ {
EST_Item *e, *n; EST_Item *e, *n;
float pos=0.0; float pos=0.0;
for (e = ev.head(); next(e) != 0; e = e->next()) for (e = ev.head(); inext(e) != 0; e = e->next())
{ {
n = e->next(); n = inext(e);
if (e->F("end") > n->F("start")) if (e->F("end") > n->F("start"))
{ {
*/ */
/* cout << "Overlapping events " << *e <<":" << *n << endl; /* cout << "Overlapping events " << *e <<":" << *n << endl;
// case a: genuine overlap // case a: genuine overlap
if (n->F("end") > e->F("end")) if (n->F("end") > e->F("end"))
{ {
cout << "case A\n"; cout << "case A\n";
// pos = (e->F("end") + start(n)) / 2.0; // pos = (e->F("end") + start(n)) / 2.0;
} }
skipping to change at line 939 skipping to change at line 939
*/ */
/* e->set("end", pos); /* e->set("end", pos);
n->set("start", pos); n->set("start", pos);
cout << endl << endl; cout << endl << endl;
} }
} }
// The overlap adjustments may cause the peak position to lie outside // The overlap adjustments may cause the peak position to lie outside
// the start and end points. This checks for this and makes an // the start and end points. This checks for this and makes an
// arbitrary adjustment // arbitrary adjustment
for (e = ev.head(); next(e) != 0; e = e->next()) for (e = ev.head(); inext(e) != 0; e = inext(e))
if ((e->f("rfc:type") == "RISEFALL") && (e->F("rfc:peak_pos") < if ((e->f("rfc:type") == "RISEFALL") && (e->F("rfc:peak_pos") <
e->F("start"))) e->F("start")))
e->set("rfc:peak_pos", e->set("rfc:peak_pos",
(e->F("start") + e->F("end") / 2.0)); (e->F("start") + e->F("end") / 2.0));
} }
static void conn_ends(EST_Track &fz, EST_Relation &ev, float min_length) static void conn_ends(EST_Track &fz, EST_Relation &ev, float min_length)
{ {
EST_Item *e, *n, *tmp; EST_Item *e, *n, *tmp;
float t, f0; float t, f0;
const float ARB_DISTANCE = 0.1; const float ARB_DISTANCE = 0.1;
cout << min_length << endl; cout << min_length << endl;
for (e = ev.head(); next(e) != 0; e = e->next()) for (e = ev.head(); inext(e) != 0; e = inext(e))
{ {
n = e->next(); n = inext(e);
cout << *e << ":"; cout << *e << ":";
cout << "n: " << n->F("start") << " e "<< e->F("end") << endl; cout << "n: " << n->F("start") << " e "<< e->F("end") << endl;
if ((n->F("start") - e->F("end")) > min_length) if ((n->F("start") - e->F("end")) > min_length)
{ {
cout << "making connection\n"; cout << "making connection\n";
tmp = n->insert_before(); tmp = n->insert_before();
make_int_item(*tmp, "c", n->f("start"), e->f("start"), make_int_item(*tmp, "c", n->f("start"), e->f("start"),
e->f("rfc:end_f0"), 0.0, 0.0); e->f("rfc:end_f0"), 0.0, 0.0);
e = e->next(); // advance after new connection e = inext(e); // advance after new connection
} }
else else
{ {
t = (n->F("start") + e->F("end")) /2.0; t = (n->F("start") + e->F("end")) /2.0;
n->set("start", t); n->set("start", t);
e->set("end", t); e->set("end", t);
} }
} }
t = (ev.head())->f("start"); // store time of start of first event t = (ev.head())->f("start"); // store time of start of first event
 End of changes. 20 change blocks. 
21 lines changed or deleted 21 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)