ec_main.cpp
资源名称:aec.rar [点击查看]
上传用户:lqyjxl
上传日期:2015-08-21
资源大小:14k
文件大小:3k
源码类别:
Audio
开发平台:
Visual C++
- // file: ec_main.cc
- //
- // system include files
- //
- #include <stdio.h>
- #include <stdlib.h>
- #include <memory.h>
- #include <math.h>
- #include <assert.h>
- // local include files
- //
- #include "ec.h"
- #include "ec_constants.h"
- extern unsigned char l2u( short data );
- extern short u2l( unsigned char data );
- //-----------------------------------------------------------------------------
- //
- // program: ec_main.cc
- // synopsis: echoc.exe
- // example: ec.exe < foo_stereo_echo.raw > foo_stereo_clean.raw
- //
- // options: none
- //
- // arguments: none
- //
- // note:
- // this program is a fairly hardcoded implementation of a standard
- // echo canceller.
- //-----------------------------------------------------------------------------
- int
- main( int argc, char * argv[] )
- {
- //---------------------------------------------------------------------------
- //
- // process the command line arguments
- //
- //---------------------------------------------------------------------------
- // check the number of arguments
- //
- if ( argc != 4 )
- {
- fprintf(stderr, "usage: ec.exe tx_file rx_file out_file");
- return(1);
- }
- FILE * f_tx = fopen( argv[ 1 ], "rb" );
- FILE * f_rx = fopen( argv[ 2 ], "rb" );
- FILE * f_out = fopen( argv[ 3 ], "wb+" );
- assert( f_tx != NULL );
- assert( f_rx != NULL );
- assert( f_out != NULL );
- // declare an echo canceller object for the reference far-end speech and
- // the near-end speech
- //
- Echo_canceller ec_near;
- // initialize the echo canceller
- //
- ec_near.init_cc(DEFAULT_GAMMA, DEFAULT_N, DEFAULT_M, DEFAULT_BETA1,
- DEFAULT_SIGMA_LY, DEFAULT_SIGMA_LU,
- DEFAULT_ALPHA_ST, DEFAULT_ALPHA_YT, DEFAULT_CUTOFF,
- DEFAULT_HANGT, DEFAULT_SUPPR, DEFAULT_TAU);
- //---------------------------------------------------------------------------
- //
- // process data
- //
- //---------------------------------------------------------------------------
- // main echo cancellation loop
- //
- unsigned char sig_tx, sig_rx;
- unsigned char sig_out;
- short sig_tx_s, sig_rx_s, sig_out_s;
- while ( 1 )
- {
- if ( fread( &sig_tx, sizeof(sig_tx), (int)1, f_tx ) <= 0 )
- break;
- if ( fread( &sig_rx, sizeof(sig_rx), (int)1, f_rx ) <= 0 )
- break;
- sig_tx_s = u2l( sig_tx );
- sig_rx_s = u2l( sig_rx );
- // process the data
- //
- // sig_out_s = ec_near.clip_cc( ec_near.process_cc( AMPL_SCALE_1 * sig_tx_s, AMPL_SCALE_1 * sig_rx_s ) );
- sig_out_s = (short)( ec_near.process_cc( sig_tx_s, sig_rx_s ) );
- // sig_out_s = (short)ec_near.process_cc( sig_tx_s, sig_rx_s );
- // write the output data
- //
- sig_out = l2u( sig_out_s );
- fwrite( &sig_out, sizeof(sig_out), (int)1, f_out );
- // if ( sig_out != sig_rx )
- // printf( "%2x:%2x ", sig_rx, sig_out );
- }
- // exit gracefully
- //
- fclose( f_tx );
- fclose( f_rx );
- fclose( f_out );
- return(0);
- }