00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00036 
00037 #if !defined(SPECTRAL_HEADER_INCLUDED__)
00038 #define SPECTRAL_HEADER_INCLUDED__
00039 
00040 
00041 #include "FEAPIPluginBase.h"
00042 
00043 template <class T>  class CRingBuffer; 
00044 class CzplfFFT_If;
00045 
00048 class CSpectralFeatures : public CFeatureExtractBase
00049 {
00050 public:
00051 
00052     CSpectralFeatures ();
00053     
00054     virtual ~CSpectralFeatures ();
00055 
00056 
00058     
00059     
00060     
00061 
00062     FEAPI_Error_t      SetPluginParameter ( int iParameterIndex, 
00063                                             float fValue);
00064 
00065     float              GetPluginParameter ( int iParameterIndex);
00066 
00067 
00068     int                GetPluginResultLatency (int iResultIndex);
00069 
00070     float              GetPluginProperty (  FEAPI_PluginProperty_t ePluginProperty);
00071 
00072     FEAPI_Error_t      InitializePlugin (   float               fInputSampleRate, 
00073                                             int                 iNumberOfAudioChannels,
00074                                             int                 iHostApiMajorVersion,
00075                                             FEAPI_UserData_t     *pstUserData);
00076 
00077     FEAPI_Error_t      ProcessPlugin (  const float             **ppfInputBuffer, 
00078                                         const FEAPI_TimeStamp_t *ptFEAPI_TimeStamp,
00079                                         int                     iNumberOfFrames);
00080 
00081     FEAPI_Error_t      ProcessPluginDone ();
00082 
00083 
00084     int                GetPluginSizeOfResult (int iResultIndex);
00085 
00086     FEAPI_Error_t      GetPluginResult (     int iResultIndex, 
00087                                 float *pfResult,
00088                                 FEAPI_TimeStamp_t *ptFEAPI_TimeStamp);
00089 
00090 
00091     FEAPI_Error_t      ResetPlugin ();
00092 
00093 private:
00094 
00095     struct InternalResults_t
00096     {
00097         bool                bHoldsResult;
00098         float               fResult;
00099         FEAPI_TimeStamp_t   tTimeStamp;
00100     };
00101 
00102     void WriteResult (int iResultIdx, float fValue, FEAPI_TimeStamp_t tTimStamp);
00103     int CalcFreqTable ();
00104 
00105     
00106     FEAPI_SignalDescription_t m_stResultDescription;
00107     FEAPI_TimeStamp_t         *m_ptLocalTimeStamp;
00108 
00109 
00110     float   *m_pfParameters,
00111             *m_pfProcessBuffer,
00112             **m_ppfFFTHistory,
00113             *m_pfHelpBuffer,
00114             *m_pfLogFreqs;
00115 
00116     CRingBuffer<float>  **m_ppCRingBuffer;
00117 
00118     InternalResults_t   **m_ppResults;
00119 
00120     CzplfFFT_If         *m_pFFTInstance;
00121 
00122     int                 m_iSizeOfResultBuffer,
00123                         m_iMPEG7SetZero;
00124 };
00125 
00126 #endif // #if !defined(SPECTRAL_HEADER_INCLUDED__)
00127 
00128 
00129