5
#include <speex/speex_echo.h>
8
7
#include <sys/types.h>
9
8
#include <sys/stat.h>
11
10
#include <unistd.h>
12
#include <speex/speex_preprocess.h>
11
#include "speex/speex_echo.h"
12
#include "speex/speex_preprocess.h"
17
int main(int argc, char **argv)
19
19
int echo_fd, ref_fd, e_fd;
20
float echo[NN], ref[NN], e[NN];
22
21
short echo_buf[NN], ref_buf[NN], e_buf[NN];
23
22
SpeexEchoState *st;
24
23
SpeexPreprocessState *den;
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);
27
fprintf (stderr, "testecho mic_signal.sw speaker_signal.sw output.sw\n");
30
echo_fd = open (argv[2], O_RDONLY);
31
ref_fd = open (argv[1], O_RDONLY);
32
e_fd = open (argv[3], O_WRONLY | O_CREAT | O_TRUNC, 0644);
30
34
st = speex_echo_state_init(NN, 8*NN);
31
35
den = speex_preprocess_state_init(NN, 8000);
33
37
while (read(ref_fd, ref_buf, NN*2))
35
39
read(echo_fd, echo_buf, NN*2);
41
echo[i] = echo_buf[i];
43
speex_echo_cancel(st, ref_buf, echo_buf, e_buf, NULL);
44
/*speex_denoise(den, e, noise);*/
40
speex_echo_cancel(st, ref_buf, echo_buf, e_buf, noise);
41
/*speex_preprocess(den, e_buf, noise);*/
49
42
write(e_fd, e_buf, NN*2);
52
printf ("%f\n", e[i]);
56
for (i=0;i<st->window_size;i++)
57
printf ("%f\n", st->W[i]);
59
44
speex_echo_state_destroy(st);
60
45
speex_preprocess_state_destroy(den);