54 ev.remove_item_feature(
"rfc");
59 float t, amp,
f_shift, a=0, start_f0;
65 dur =
ev.F(
"rise_dur");
66 amp =
ev.F(
"rise_amp");
67 start_f0 = peak_f0 - amp;
69 for (
j = 0, t = 0.0; t < dur; t +=
f_shift, ++
j)
71 a = unit_curve(amp, dur, t) + start_f0;
77 dur =
ev.F(
"fall_dur");
78 amp =
ev.F(
"fall_amp");
80 for (t = 0.0; t < dur; t +=
f_shift, ++
j)
82 a = unit_curve(amp, dur, t) + peak_f0;
88 for (;
j <
fz.num_frames(); ++
j)
92void fill_connection_values(
EST_Track &
fz,
float start_f0,
float start_pos,
93 float end_f0,
float end_pos)
98 if ((end_pos - start_pos) == 0)
101 m = (end_f0 - start_f0) / (end_pos - start_pos);
102 for (
j = 0;
j <
fz.num_frames()-1; ++
j)
107 fz.a(
fz.num_frames()-1) = end_f0;
108 fz.set_value(
fz.num_frames()-1);
120 float start_pos=0, start_f0=0;
122 float end_pos, end_f0;
125 if (event_item(*
ev.tail()))
126 n = (int)(
ceil((
ev.tail()->F(
"time") +
127 ev.tail()->F(
"rfc.fall_dur",0)) /
f_shift)) + 1;
132 fz.set_equal_space(
true);
137 for (
int i = 0; i <
fz.num_frames(); ++i)
141 for (
e =
ev.head();
e != 0;
e = inext(
e))
145 start_pos =
e->F(
"time") -
e->F(
"rfc.rise_dur");
146 end_pos =
e->F(
"time") +
e->F(
"rfc.fall_dur");
164 synthesize_rf_event(sub,
e->A(
"rfc"),
e->F(
"ev.f0"));
172 for (
e =
ev.head(); inext(
e) != 0;
e = inext(
e))
174 if (
e->S(
"name") ==
"phrase_end")
181 start_f0 =
e->F(
"ev.f0") +
e->F(
"rfc.fall_amp", 0.0);
182 start_pos=
e->F(
"time") +
e->F(
"rfc.fall_dur", 0.0);
184 end_f0 =
nn->F(
"ev.f0") -
nn->F(
"rfc.rise_amp", 0.0);
185 end_pos =
nn->F(
"time") -
nn->F(
"rfc.rise_dur", 0.0);
202 fill_connection_values(sub, start_f0, start_pos, end_f0, end_pos);