CLAM-Development  1.4.0
FFT_ooura.hxx
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2001-2004 MUSIC TECHNOLOGY GROUP (MTG)
3  * UNIVERSITAT POMPEU FABRA
4  *
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19  *
20  */
21 
22 
23 #ifndef _FFT_ooura_
24 #define _FFT_ooura_
25 
26 #include "FFT_base.hxx"
27 #include "DataTypes.hxx"
28 #include "SpecTypeFlags.hxx"
29 #include "ErrDynamicType.hxx"
30 
31 namespace CLAM {
32 
33  struct FFTConfig;
34  class Spectrum;
35  class Audio;
36  class ProcessingConfig;
37  class IFFT_ooura;
38 
44  class FFT_ooura: public FFT_base
45  {
46 
48  int *ip;
49  TData *w;
50 
51  bool FFTConfigure();
52 
55  bool ConcreteConfigure(const ProcessingConfig&);
56 
57  // Memory Management (for work areas and stuff)
58 
59  void ReleaseMemory();
60 
61  void SetupMemory();
62 
63  // Output conversions
64 
65  void ToComplex(Spectrum &out);
66  void ToOther(Spectrum &out);
67 
68  public:
69  // FFTOOURA original functions, modified to accept
70  // TData instead of double
71  static void rdft(int n, int isgn, TData *a, int *ip, TData *w);
72  static void makewt(int nw, int *ip, TData *w);
73  static void makect(int nc, int *ip, TData *c);
74  static void bitrv2(int n, int *ip, TData *a);
75  static void cftfsub(int n, TData *a, TData *w);
76  static void cftbsub(int n, TData *a, TData *w);
77  static void rftfsub(int n, TData *a, int nc, TData *c);
78  static void rftbsub(int n, TData *a, int nc, TData *c);
79  static void cft1st(int n, TData *a, TData *w);
80  static void cftmdl(int n, int l, TData *a, TData *w);
81 
82 
83 
84  FFT_ooura();
85 
86  FFT_ooura(const FFTConfig &c) throw(ErrDynamicType);
87 
88  ~FFT_ooura();
89 
90  const char * GetClassName() const {return "FFT_ooura";}
91 
92  // Execution methods
93 
94  bool Do();
95 
96  bool Do(const Audio& in, Spectrum &out);
97 
98 
99  bool MayDisableExecution() const {return true;}
100 
101  };
102 
103 };//namespace CLAM
104 
105 #endif // _FFT_numrec_
106