⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 algorithmbase.h

📁 这是一个从音频信号里提取特征参量的程序
💻 H
字号:
// file: $isip/class/algo/AlgorithmBase/AlgorithmBase.h// version: $Id: AlgorithmBase.h,v 1.51 2003/04/22 03:45:24 parihar Exp $//// make sure definitions are only made once://#ifndef ISIP_ALGORITHM_BASE#define ISIP_ALGORITHM_BASE// isip include files//#ifndef ISIP_ALGORITHM_DATA#include <AlgorithmData.h>#endif#ifndef ISIP_CIRCULAR_BUFFER#include <CircularBuffer.h>#endif// AlgorithmBase: a class that defines an interface contract for all// algorithms.//// there are two complicating factors in this class. first, every// algorithm class must support an interface contract through a// virtual function mechanism. because of this, there are many virtual// functions which the derived class must provide.//// second, since this class has protected data, it must supply methods// to manipulate the data. below, there are some virtual functions not// set to zero which means this specific class supplies an implementation// for that function.//class AlgorithmBase {  //---------------------------------------------------------------------------  //  // public constants  //  //---------------------------------------------------------------------------public:  // define the class name  //  static const String CLASS_NAME;  //----------------------------------------  //  // other important constants  //  //----------------------------------------    // define an enumeration for the computational mode:  //  many algorithms share a property that they can operate  //  only on data within the current frame (FRAME_INTERNAL) or on  //  data across several frames (CROSS_FRAME). Some classes, such  //  as Statistics, output data only once per file (ACCUMULATE).  //  enum CMODE { FRAME_INTERNAL = 0, CROSS_FRAME, ACCUMULATE,	       DEF_CMODE = FRAME_INTERNAL };  // define an enumeration for all possible data formats:  //  for some classes, such as filter, we must know whether the  //  the algorithm is frame-based or sample-based, so that we output  //  the correct number of samples. this allows some applications  //  to produce output files that are the same length as the input files.  //  enum DMODE { FRAME_BASED = 0, SAMPLE_BASED,	       DEF_DMODE = FRAME_BASED };    // define static NameMap objects  //  static const NameMap CMODE_MAP;  static const NameMap DMODE_MAP;  //----------------------------------------  //  // i/o related constants  //  //----------------------------------------  static const String PARAM_DBGL;  //----------------------------------------  //  // default values and arguments  //  //----------------------------------------    // signal processing constants  //  static const float DEF_SAMPLE_FREQUENCY = 8000;  static const float DEF_FRAME_DURATION = 0.01;  static const float DEF_SIGNAL_DURATION = 1.0;  static const long DEF_FRAME_INDEX = (long)-1;    // multichannel signal-related constants  //  static const long DEF_NUM_CHANNELS = 1;  static const long DEF_CHANNEL_INDEX = 0;  // define the default value(s) of the class data  //  static const long DEF_LEADING_PAD = 0;  static const long DEF_TRAILING_PAD = 0;  static const long DEF_LEFTOVER_SAMPS = 0;    //----------------------------------------  //  // error codes  //  //----------------------------------------    static const long ERR = 70000;  static const long ERR_UNKALG = 70001;  static const long ERR_UNKIMP = 70002;  static const long ERR_UNKTYP = 70003;    static const long ERR_UNSUPA = 70004;  static const long ERR_UNSUPI = 70005;  static const long ERR_UNSUPM = 70006;  static const long ERR_INSUFD = 70007;  static const long ERR_ORDER = 70008;  static const long ERR_UNCTYP = 70009;    static const long ERR_COMPF = 70010;    //---------------------------------------------------------------------------  //  // protected data  //  //---------------------------------------------------------------------------protected:  // define parameters that are part of the i/o for the class  //  // debugging parameters  //  DebugLevel debug_level_d;  // this flag is used to determine if the object's init method  // needs to be called  //  boolean is_valid_d;  // computational mode  //  CMODE cmode_d;    // data processing mode  //  DMODE dmode_d;    // define parameters that are not part of the i/o for the class  //  float sample_freq_d;  float frame_dur_d;  float signal_duration_d;  long leftover_samps_d;  long frame_index_d;  long num_channels_d;  long num_elements_d;  long offset_d;  //---------------------------------------------------------------------------  //  // required public methods  //  //---------------------------------------------------------------------------public:    // method: name  //  static const String& name() {    return CLASS_NAME;  }    // other static methods  //  static boolean diagnose(Integral::DEBUG debug_level);  // method: setDebug  //  // note that this method is not virtual since  // it operates on protected data found in this class.   //  boolean setDebug(Integral::DEBUG level) {    debug_level_d = level;    return true;  }  // other debug methods  //  virtual boolean debug(const unichar* msg) const;  // method: destructor  //  virtual ~AlgorithmBase() {}  // method: default constructor  //  AlgorithmBase();  // method: copy constructor  //  AlgorithmBase(const AlgorithmBase& arg) {    assign(arg);  }  // assign methods:  //  note that this method is not set to zero. this class must supply  //  a version of this method, since it manipulates protected data.  //  virtual boolean assign(const AlgorithmBase& arg);    // method: sofSize  //  virtual long sofSize() const = 0;  // method: read  //  virtual boolean read(Sof& sof, long tag, const String& name) = 0;  // method: write  //  virtual boolean write(Sof& sof, long tag, const String& name) const = 0;  // method: readData  //  virtual boolean readData(Sof& sof, const String& pname,			   long size, boolean param, boolean nested) = 0;  // method: writeData  //  virtual boolean writeData(Sof& sof, const String& pname) const = 0;    // method: eq  //  virtual boolean eq(const AlgorithmBase& arg) const;  // memory management methods:  //  new and delete methods are omitted since only the derived  //  classes will be used  //  virtual boolean clear(Integral::CMODE ctype = Integral::DEF_CMODE);    //---------------------------------------------------------------------------  //  // class-specific public methods:  //  set methods  //  // note: these functions are needed to manipulate protected data for  // this class that must be invoked by the public interface for the  // class. note that the set methods are virtual so a derived class  // can override it if it needs to do more with the method, such as  // buffer resizing.  //  //--------------------------------------------------------------------------  // method: setComputeMode  //  virtual boolean setComputeMode(CMODE cmode) {    cmode_d = cmode;    is_valid_d = false;        return true;    }    // method: setDataMode  //  virtual boolean setDataMode(DMODE mode) {    dmode_d = mode;    is_valid_d = false;        return true;    }  // method: setSampleFrequency  //  virtual boolean setSampleFrequency(float sf) {    sample_freq_d = sf;    is_valid_d = false;    return true;  }  // method: setFrameDuration  //  virtual boolean setFrameDuration(float fdur) {    frame_dur_d = fdur;    is_valid_d = false;        return true;  }  // method: setSignalDuration  //  virtual boolean setSignalDuration(float sdur) {    signal_duration_d = sdur;    is_valid_d = false;        return true;  }  // method: setLeftoverSamps  //  boolean setLeftoverSamps(long samps) {    leftover_samps_d = samps;    is_valid_d = false;        return true;  }  // method: setFrameIndex  //  virtual boolean setFrameIndex(long index) {    frame_index_d = index;    is_valid_d = false;        return true;  }    // method: setNumChannels  //  virtual boolean setNumChannels(long nchan) {    num_channels_d = nchan;    is_valid_d = false;    return true;  }  //---------------------------------------------------------------------------  //  // class-specific public methods:  //  get methods  //  //---------------------------------------------------------------------------      // method: getComputeMode  //  CMODE getComputeMode() const {    return cmode_d;  }  // method: getDataMode  //  DMODE getDataMode() const {    return dmode_d;  }  // method: getSampleFrequency  //  float getSampleFrequency() const {    return sample_freq_d;  }  // method: getFrameDuration  //  float getFrameDuration() const {    return frame_dur_d;  }  // method: getSignalDuration  //  float getSignalDuration() const {    return signal_duration_d;  }    // method: getLeftoverSamps  //  long getLeftoverSamps() const {    return leftover_samps_d;  }    // method: getFrameIndex  //  long getFrameIndex() const {    return frame_index_d;  }    // method: getNumChannels  //  long getNumChannels() const {    return num_channels_d;  }  // method: isValid  //  boolean isValid() const {    return is_valid_d;  }    //---------------------------------------------------------------------------  //  // class-specific public methods:    //  interface contract methods  //  // note: the methods below constitute the interface required by all  // algorithms that are going to be part of the generalized transform  // software (Cepstrum, Calculus etc.).  //  //---------------------------------------------------------------------------  // method: className  //  virtual const String& className() const = 0;    // method: init  //  virtual boolean init() {    return true;  }  // method: apply  //  virtual boolean apply(Vector<AlgorithmData>& output,		const Vector< CircularBuffer<AlgorithmData> >& input) = 0;  // method: getLeadingPad  //  virtual long getLeadingPad() const {    return DEF_LEADING_PAD;  }  // method: getTrailingPad  //  virtual long getTrailingPad() const {    return DEF_TRAILING_PAD;  }  // method: getOutputMode  //  virtual CMODE getOutputMode() const {    return DEF_CMODE;  }  // method: getOutputSampleFrequency  //  virtual float getOutputSampleFrequency() const {    return (1.0 / frame_dur_d);  }  // method: setParser  //  virtual boolean setParser(SofParser* parser) { return false; }  // method: displayStart  //  boolean displayStart(const AlgorithmBase* algo) {    if (debug_level_d >= Integral::ALL) {      algo->debug(L"");    }    return true;  }  // method: displayFinish  //  boolean displayFinish(const AlgorithmBase* algo) {    if (debug_level_d >= Integral::BRIEF) {      Console::decreaseIndention();    }    return true;  }  // method: displayChannel  //  boolean displayChannel(long channel) {    if (debug_level_d > Integral::NONE) {      if (channel != 0) {	Console::decreaseIndention();      }      String output(L"Channel ");      output.concat(channel);      output.concat(L":\n");      Console::put(output);      Console::increaseIndention();    }    return true;  }  // method: display  //    template <class TData0, class TData1>  boolean display(const TData0& output, const TData1& input,		  const String& algo_name) {    if (debug_level_d >= Integral::DETAILED) {      String str(algo_name);      str.concat(L" input");      input.debug(str);    }    if (debug_level_d >= Integral::BRIEF) {      String str(algo_name);      str.concat(L" output");      output.debug(str);    }    return true;  }    //---------------------------------------------------------------------------  //  // private methods  //  //---------------------------------------------------------------------------private:};// end of include file// #endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -