46#include "EST_cutils.h"
47#include "EST_wave_utils.h"
48#include "esps_utils.h"
55enum EST_write_status put_esps(
const char *filename,
const char *
style,
float *t,
float *a,
64 if ((fd=
fopen(filename,
"wb")) == NULL)
66 fprintf(
stderr,
"ESPS file: cannot open file \"%s\" for writing\n",
68 return misc_write_error;
71 hdr = make_esps_hdr();
73 if (streq(
style,
"F0"))
75 add_field(
hdr,
"F0",ESPS_DOUBLE,1);
76 add_field(
hdr,
"prob_voice",ESPS_DOUBLE,1);
77 add_field(
hdr,
"rms",ESPS_DOUBLE,1);
78 add_field(
hdr,
"ac_peak",ESPS_DOUBLE,1);
79 add_field(
hdr,
"k1",ESPS_DOUBLE,1);
80 add_fea_d(
hdr,
"record_freq",0,(
double)
rate);
81 add_fea_d(
hdr,
"frame_duration",0,(
double)fsize);
82 add_fea_d(
hdr,
"start_time",0,(
double)0);
83 add_fea_special(
hdr,ESPS_FEA_COMMAND,
84 "EDST F0 written as ESPS FEA_SD.\n");
85 write_esps_hdr(
hdr,fd);
89 set_field_d(
rec,0,0,a[i]);
90 set_field_d(
rec,1,0,(
float)v[i]);
91 set_field_d(
rec,2,0,0.5);
92 set_field_d(
rec,3,0,0.5);
93 set_field_d(
rec,4,0,0.5);
94 write_esps_rec(
rec,
hdr,fd);
100 add_field(
hdr,
"Track",ESPS_DOUBLE,1);
101 add_fea_d(
hdr,
"window_duration",0,(
double)0.049);
102 add_fea_d(
hdr,
"frame_duration",0,(
double)fsize);
103 add_fea_d(
hdr,
"record_freq",0,(
double)
rate);
104 add_fea_d(
hdr,
"start_time",0,(
double)0);
105 add_fea_special(
hdr,ESPS_FEA_COMMAND,
106 "EDST Track written as ESPS FEA_SD.\n");
107 write_esps_hdr(
hdr,fd);
111 set_field_d(
rec,0,0,a[i]);
112 write_esps_rec(
rec,
hdr,fd);
114 delete_esps_rec(
rec);
117 delete_esps_hdr(
hdr);
123enum EST_write_status put_track_esps(
const char *filename,
char **
f_names,
124 float **a,
float fsize,
float rate,
132 hdr = make_esps_hdr();
134 if ((fd =
fopen(filename,
"wb")) == NULL)
136 fprintf(
stderr,
"ESPS file: cannot open file \"%s\" for writing\n",
138 return misc_write_error;
141 for (i = 0; i < order; ++i)
146 add_fea_s(
hdr,
"lpccep_order",0,(
short)order);
147 add_fea_i(
hdr,
"step",0,(
int)fsize);
148 add_fea_d(
hdr,
"window_duration",0,(
double)0.049);
149 add_fea_i(
hdr,
"start",0,(
int)1);
150 add_fea_f(
hdr,
"warping_param",0,(
float)0.0);
151 add_fea_s(
hdr,
"window_type",0,(
short)2);
153 add_fea_d(
hdr,
"record_freq",0,(
double)
rate);
154 add_fea_d(
hdr,
"frame_duration",0,(
double)fsize);
155 add_fea_d(
hdr,
"start_time",0,(
double)0.0);
157 add_fea_s(
hdr,
"est_variable_frame", 0, (
short)1);
159 write_esps_hdr(
hdr,fd);
164 for (
j = 0;
j < order; ++
j)
165 set_field_d(
rec,
j, 0,(
double)a[i][
j]);
166 write_esps_rec(
rec,
hdr,fd);
169 delete_esps_hdr(
hdr);
174enum EST_read_status get_esps(
const char *filename,
char *
style,
175 float **t,
float **a,
int **v,
float *fsize,
int *
num_points)
179 enum EST_read_status
rv;
187 if ((fd =
fopen(filename,
"rb")) == NULL)
189 fprintf(
stderr,
"Can't open esps file %s for reading\n", filename);
190 return misc_read_error;
193 if ((
rv=read_esps_hdr(&
hdr,fd)) != format_ok)
198 ta = walloc(
float,
hdr->num_records);
199 tv = walloc(
int,
hdr->num_records);
202 if (streq(
"F0",
hdr->field_name[i]))
204 else if (streq(
"prob_voice",
hdr->field_name[i]))
208 for (i=0; i <
hdr->num_records; i++)
212 fprintf(
stderr,
"ESPS file: unexpected end of file when reading record %d\n", i);
213 delete_esps_rec(
rec);
214 delete_esps_hdr(
hdr);
216 return misc_read_error;
220 switch(
rec->field[0]->type)
223 ta[i] = get_field_d(
rec,0,0);
break;
225 ta[i] = get_field_f(
rec,0,0);
break;
228 delete_esps_rec(
rec);
229 delete_esps_hdr(
hdr);
231 return misc_read_error;
245 if (fea_value_d(
"record_freq",0,
hdr,&d) != 0)
253 delete_esps_rec(
rec);
254 delete_esps_hdr(
hdr);
260enum EST_read_status get_track_esps(
const char *filename,
char ***
fields,
261 float ***a,
float *fsize,
269 enum EST_read_status
rv;
274 if ((fd =
fopen(filename,
"rb")) == NULL)
275 return misc_read_error;
277 if ((
rv=read_esps_hdr(&
hdr,fd)) != format_ok)
283 order =
hdr->num_fields;
286 tf = walloc(
char *,order);
288 ta[
j] = walloc(
float,order);
295 *
fixed = fea_value_s(
"est_variable_frame", 0,
hdr, &v) != 0;
298 for (
j = 0;
j <
hdr->num_records;
j++)
302 fprintf(
stderr,
"ESPS file: unexpected end of file when reading record %d\n",
j);
303 delete_esps_rec(
rec);
304 delete_esps_hdr(
hdr);
306 for (i = 0; i < order; ++i)
307 switch (
rec->field[i]->type)
310 ta[
j][i]=get_field_d(
rec,i,0);
break;
312 ta[
j][i]=get_field_f(
rec,i,0);
break;
323 rec->field[i]->type);
324 delete_esps_rec(
rec);
325 delete_esps_hdr(
hdr);
327 return misc_read_error;
333 for (
j = 0;
j < order; ++
j)
334 tf[
j] = wstrdup(
hdr->field_name[
j]);
342 if (fea_value_d(
"record_freq",0,
hdr,&d) != 0)
347 delete_esps_rec(
rec);
348 delete_esps_hdr(
hdr);