synthesis_filter.hh
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:1k
源码类别:

DVD

开发平台:

Unix_Linux

  1. #ifndef SYNTHESIS_FILTER_H
  2. #define SYNTHESIS_FILTER_H
  3. class SynthesisFilter {
  4.   static const real d[512];
  5.   static const real n[32][31];
  6.   real v1[512], v2[512];
  7.   real *actual_v; // v1 or v2
  8.   uint32 actual_write_pos; // 0-15
  9.   real  samples[32]; // max. 32 new subband samples
  10.   uint32 subbandnumbers[32]; // subbandnumbers of new samples
  11.   uint32 number_of_samples; // number of elements in samples[] and subbandnumbers[]
  12.   uint32 channel;
  13.   real  scalefactor;
  14.   uint32 range_violations;
  15.   real  max_violation;
  16.   uint32 written_samples;
  17.   void compute_new_v (real *);
  18.   void compute_pcm_samples (Obuffer *);
  19.  public:
  20. SynthesisFilter (uint32 channelnumber, real scalefactor = 32768.0);
  21. // the scalefactor scales the calculated float pcm samples to short values
  22. // (raw pcm samples are in [-1.0, 1.0], if no violations occur)
  23.   void input_sample (real sample, uint32 subbandnumber){
  24.     samples[number_of_samples] = sample;
  25.     subbandnumbers[number_of_samples++] = subbandnumber;
  26.   };
  27.   void calculate_pcm_samples (Obuffer *);
  28. // calculate 32 PCM samples and put the into the Obuffer-object
  29.   uint32 violations (void) { return range_violations; }
  30.   real  hardest_violation (void) { return max_violation; }
  31.   uint32 recommended_scalefactor (void) { return (uint32)(32768.0 / max_violation); }
  32.   real  seconds_played (uint32 frequency){
  33.     return (real)written_samples / (real)frequency;
  34.   }
  35. };
  36. #endif