cst_wave *flite_text_to_wave(const char *text, cst_voice *voice) { cst_utterance *u; cst_wave *w; if ((u = flite_synth_text(text,voice)) == NULL) return NULL; w = copy_wave(utt_wave(u)); delete_utterance(u); return w; }
void test_copy(void) { cst_voice *v = NULL; cst_wave *w1, *w2; common_init(); v = mimic_voice_select(A_VOICE); w1 = mimic_text_to_wave("Hello", v); w2 = copy_wave(w1); TEST_CHECK(w1 != w2); TEST_CHECK(w1->num_samples == w2->num_samples); TEST_CHECK(w1->sample_rate == w2->sample_rate); TEST_CHECK(w1->num_channels == w2->num_channels); TEST_CHECK(w1->samples != w2->samples); TEST_CHECK(w1->samples[0] == w2->samples[0]); TEST_CHECK(w1->samples[10] == w2->samples[10]); TEST_CHECK(w1->samples[20] == w2->samples[20]); delete_wave(w1); delete_wave(w2); }
int main(int argc, char **argv) { cst_wave *in, *out; cst_val *files; cst_features *args; int i,j; int w, a, t; args = new_features(); files = cst_args(argv,argc, "usage: dcoffset_wave OPTIONS\n" "Subtract window average from waveform\n" "-i <string> Input waveform\n" "-o <string> Output waveform\n" "-w <int> Window size (in samples)\n", args); w = flite_get_param_int(args,"-w",20); in = new_wave(); cst_wave_load_riff(in,flite_get_param_string(args,"-i","-")); out = copy_wave(in); for (i=0; i<=out->num_samples; i++) { for (t=a=0,j=i-w/2; j < i+w/2; j++) { if ((j > 0) && (j < out->num_samples)) { t += 1; a+=in->samples[j]; } } /* printf("%d %d %d %d %d\n",i,out->samples[i],a/t,t,out->samples[i]-a/t); */ out->samples[i] -= a/t; } cst_wave_save_riff(out,flite_get_param_string(args,"-o","-")); return 0; }