Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members  

inverse_echofilter_generic.cpp

Go to the documentation of this file.
00001 /*
00002         $Id: inverse_echofilter_generic.cpp,v 1.1 2001/03/06 15:09:26 mbn Exp $
00003 
00004         ------------------------------------------------------------------------
00005         ClanLib, the platform independent game SDK.
00006 
00007         This library is distributed under the GNU LIBRARY GENERAL PUBLIC LICENSE
00008         version 2. See COPYING for details.
00009 
00010         For a total list of contributers see CREDITS.
00011 
00012         ------------------------------------------------------------------------
00013 */
00014 
00015 #ifdef WIN32
00016 #pragma warning (disable:4786)
00017 #endif
00018 
00019 #include "inverse_echofilter_generic.h"
00020 #include <memory>
00021 
00022 CL_InverseEchoFilter::CL_InverseEchoFilter(int buffer_size)
00023 {
00024         impl = new CL_InverseEchoFilter_Generic;
00025         impl->buffer_size = buffer_size;
00026         impl->pos = 0;
00027 
00028         impl->buffer = new int[buffer_size*2];
00029         memset(impl->buffer, 0, sizeof(int)*buffer_size*2);
00030 }
00031 
00032 CL_InverseEchoFilter::~CL_InverseEchoFilter()
00033 {
00034         delete[] impl->buffer;
00035         delete impl;
00036 }
00037 
00038 void CL_InverseEchoFilter::filter(int *data, int size)
00039 {
00040         int *buffer = impl->buffer;
00041         int &pos = impl->pos;
00042         int &buffer_size = impl->buffer_size;
00043 
00044         int delay = buffer_size / 4;
00045         for (int i=0; i<size*2; i++)
00046         {
00047                 buffer[pos] = data[i];
00048 
00049                 int res = 0;
00050                 for (int j=0; j<4; j++)
00051                 {
00052                         int p = pos+delay*j;
00053                         if (p > buffer_size) p -= buffer_size;
00054 
00055                         res += buffer[p]*2 / (5-j);
00056                 }
00057 
00058                 data[i] = res;
00059 
00060                 pos++;
00061                 if (pos == buffer_size) pos = 0;
00062         }
00063 }

Generated at Wed Apr 4 19:54:01 2001 for ClanLib by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001