EMIPLIB

mipaudiofilter.h

Go to the documentation of this file.
00001 /*
00002     
00003   This file is a part of EMIPLIB, the EDM Media over IP Library.
00004   
00005   Copyright (C) 2006-2011  Hasselt University - Expertise Centre for
00006                       Digital Media (EDM) (http://www.edm.uhasselt.be)
00007 
00008   This library is free software; you can redistribute it and/or
00009   modify it under the terms of the GNU Lesser General Public
00010   License as published by the Free Software Foundation; either
00011   version 2.1 of the License, or (at your option) any later version.
00012 
00013   This library is distributed in the hope that it will be useful,
00014   but WITHOUT ANY WARRANTY; without even the implied warranty of
00015   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00016   Lesser General Public License for more details.
00017 
00018   You should have received a copy of the GNU Lesser General Public
00019   License along with this library; if not, write to the Free Software
00020   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  
00021   USA
00022 
00023 */
00024 
00029 #ifndef MIPAUDIOFILTER_H
00030 
00031 #define MIPAUDIOFILTER_H
00032 
00033 #include "mipconfig.h"
00034 #include "mipcomponent.h"
00035 #include "miprawaudiomessage.h"
00036 #include "miptime.h"
00037 #include <list>
00038 
00039 class MIPAudioMessage;
00040 
00045 class EMIPLIB_IMPORTEXPORT MIPAudioFilter : public MIPComponent
00046 {
00047 public:
00048         MIPAudioFilter();
00049         ~MIPAudioFilter();
00050 
00057         bool init(int sampRate, int channels, MIPTime interval);
00058 
00060         void setLowFilter(float frequency)                                              { m_lowFreq = frequency; m_useLow = true; }
00061 
00063         void setHighFilter(float frequency)                                             { m_highFreq = frequency; m_useHigh = true; }
00064 
00066         void setMiddleFilter(float lowFrequency, float highFrequency)                   { m_midLowFreq = lowFrequency; m_midHighFreq = highFrequency; m_useMiddle = true; }
00067 
00069         void clearLowFilter()                                                           { m_useLow = false; }
00070 
00072         void clearHighFilter()                                                          { m_useHigh = false; }
00073 
00075         void clearMiddleFilter()                                                        { m_useMiddle = false; }
00076 
00077         bool push(const MIPComponentChain &chain, int64_t iteration, MIPMessage *pMsg);
00078         bool pull(const MIPComponentChain &chain, int64_t iteration, MIPMessage **pMsg);
00079 private:
00080         void cleanUp();
00081         void clearMessages();
00082 
00083         bool m_useLow, m_useHigh, m_useMiddle;
00084         float m_lowFreq, m_highFreq, m_midLowFreq, m_midHighFreq;
00085         
00086         bool m_init;
00087         int m_sampRate, m_channels;
00088         int m_audioSize, m_numFrames;
00089         float *m_pAM, *m_pBM;
00090         float *m_pA, *m_pB;
00091         float *m_pBuf;
00092         float m_period;
00093         std::list<MIPAudioMessage *> m_messages;
00094         std::list<MIPAudioMessage *>::const_iterator m_msgIt;
00095         int64_t m_prevIteration;
00096 };
00097 
00098 #endif // MIPAUDIOFILTER_H
00099