trying some ideas for soft-decision DTD based on residual-to-signal ratio
[speexdsp.git] / libspeex / testecho.c
1 #ifdef HAVE_CONFIG_H
2 #include "config.h"
3 #endif
4
5 #include <speex/speex_echo.h>
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <sys/types.h>
9 #include <sys/stat.h>
10 #include <fcntl.h>
11 #include <unistd.h>
12 #include <speex/speex_preprocess.h>
13
14 #define NN 160
15
16 int main()
17 {
18    int i;
19    int echo_fd, ref_fd, e_fd;
20    float echo[NN], ref[NN], e[NN];
21    short noise[NN];
22    short echo_buf[NN], ref_buf[NN], e_buf[NN];
23    SpeexEchoState *st;
24    SpeexPreprocessState *den;
25
26    echo_fd = open ("play.sw", O_RDONLY);
27    ref_fd  = open ("rec.sw",  O_RDONLY);
28    e_fd    = open ("echo.sw", O_WRONLY | O_CREAT | O_TRUNC, 0644);
29
30    st = speex_echo_state_init(NN, 8*NN);
31    den = speex_preprocess_state_init(NN, 8000);
32
33    while (read(ref_fd, ref_buf, NN*2))
34    {
35       read(echo_fd, echo_buf, NN*2);
36 /*
37       for (i=0;i<NN;i++)
38          ref[i] = ref_buf[i];
39       
40       for (i=0;i<NN;i++)
41          echo[i] = echo_buf[i];
42 */
43       speex_echo_cancel(st, ref_buf, echo_buf, e_buf, NULL);
44       /*speex_denoise(den, e, noise);*/
45       
46  /*     for (i=0;i<NN;i++)
47          e_buf[i] = e[i];
48 */
49       write(e_fd, e_buf, NN*2);
50 #if 0
51       for (i=0;i<NN;i++)
52          printf ("%f\n", e[i]);
53 #endif
54    }
55 #if 0
56    for (i=0;i<st->window_size;i++)
57       printf ("%f\n", st->W[i]);
58 #endif
59    speex_echo_state_destroy(st);
60    speex_preprocess_state_destroy(den);
61    close(e_fd);
62    close(echo_fd);
63    close(ref_fd);
64    return 0;
65 }