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 |