svn merge ^/trunk/blender -r41226:41227 .
[blender.git] / intern / audaspace / fftw / AUD_BandPassReader.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * Copyright 2009-2011 Jörg Hermann Müller
5  *
6  * This file is part of AudaSpace.
7  *
8  * Audaspace is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * AudaSpace is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with Audaspace; if not, write to the Free Software Foundation,
20  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 /** \file audaspace/fftw/AUD_BandPassReader.h
26  *  \ingroup audfftw
27  */
28
29
30 #ifndef AUD_BANDPASSREADER
31 #define AUD_BANDPASSREADER
32
33 #include <fftw3.h>
34
35 #include "AUD_EffectReader.h"
36 class AUD_Buffer;
37
38 /**
39  * This class only passes a specific frequency band of another reader.
40  */
41 class AUD_BandPassReader : public AUD_EffectReader
42 {
43 private:
44         /**
45          * The playback buffer.
46          */
47         AUD_Buffer *m_buffer;
48
49         /**
50          * The input buffer for fourier transformations.
51          */
52         AUD_Buffer *m_in;
53
54         /**
55          * The output buffer for fourier transformations.
56          */
57         AUD_Buffer *m_out;
58
59         /**
60          * The lowest passed frequency.
61          */
62         float m_low;
63
64         /**
65          * The highest passed frequency.
66          */
67         float m_high;
68
69         /**
70          * The fftw plan for forward transformation.
71          */
72         fftw_plan m_forward;
73
74         /**
75          * The fftw plan for backward transformation.
76          */
77         fftw_plan m_backward;
78
79         /**
80          * The length of the plans.
81          */
82         int m_length;
83
84 public:
85         /**
86          * Creates a new band pass reader.
87          * \param reader The reader to read from.
88          * \param low The lowest passed frequency.
89          * \param high The highest passed frequency.
90          */
91         AUD_BandPassReader(AUD_IReader* reader, float low, float high);
92
93         /**
94          * Destroys the reader.
95          */
96         virtual ~AUD_BandPassReader();
97
98         virtual AUD_ReaderType getType();
99         virtual void read(int & length, sample_t* & buffer);
100 };
101
102 #endif //AUD_BANDPASSREADER