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;
}
Ejemplo n.º 2
0
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;
}