PageRenderTime 404ms CodeModel.GetById 242ms app.highlight 3ms RepoModel.GetById 158ms app.codeStats 0ms

/external/pysoundtouch14/libsoundtouch/AAFilter.h

http://echo-nest-remix.googlecode.com/
C++ Header | 91 lines | 25 code | 14 blank | 52 comment | 0 complexity | e3e2cfce7c6eb2a7e4efd6cf40f66b16 MD5 | raw file
 1////////////////////////////////////////////////////////////////////////////////
 2///
 3/// Sampled sound tempo changer/time stretch algorithm. Changes the sound tempo 
 4/// while maintaining the original pitch by using a time domain WSOLA-like method 
 5/// with several performance-increasing tweaks.
 6///
 7/// Anti-alias filter is used to prevent folding of high frequencies when 
 8/// transposing the sample rate with interpolation.
 9///
10/// Author        : Copyright (c) Olli Parviainen
11/// Author e-mail : oparviai 'at' iki.fi
12/// SoundTouch WWW: http://www.surina.net/soundtouch
13///
14////////////////////////////////////////////////////////////////////////////////
15//
16// Last changed  : $Date: 2008-02-10 18:26:55 +0200 (Sun, 10 Feb 2008) $
17// File revision : $Revision: 4 $
18//
19// $Id: AAFilter.h 11 2008-02-10 16:26:55Z oparviai $
20//
21////////////////////////////////////////////////////////////////////////////////
22//
23// License :
24//
25//  SoundTouch audio processing library
26//  Copyright (c) Olli Parviainen
27//
28//  This library is free software; you can redistribute it and/or
29//  modify it under the terms of the GNU Lesser General Public
30//  License as published by the Free Software Foundation; either
31//  version 2.1 of the License, or (at your option) any later version.
32//
33//  This library is distributed in the hope that it will be useful,
34//  but WITHOUT ANY WARRANTY; without even the implied warranty of
35//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
36//  Lesser General Public License for more details.
37//
38//  You should have received a copy of the GNU Lesser General Public
39//  License along with this library; if not, write to the Free Software
40//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
41//
42////////////////////////////////////////////////////////////////////////////////
43
44#ifndef AAFilter_H

45#define AAFilter_H

46
47#include "STTypes.h"

48
49namespace soundtouch
50{
51
52class AAFilter
53{
54protected:
55    class FIRFilter *pFIR;
56
57    /// Low-pass filter cut-off frequency, negative = invalid
58    double cutoffFreq;
59
60    /// num of filter taps
61    uint length;
62
63    /// Calculate the FIR coefficients realizing the given cutoff-frequency
64    void calculateCoeffs();
65public:
66    AAFilter(uint length);
67
68    ~AAFilter();
69
70    /// Sets new anti-alias filter cut-off edge frequency, scaled to sampling 
71    /// frequency (nyquist frequency = 0.5). The filter will cut off the 
72    /// frequencies than that.
73    void setCutoffFreq(double newCutoffFreq);
74
75    /// Sets number of FIR filter taps, i.e. ~filter complexity
76    void setLength(uint newLength);
77
78    uint getLength() const;
79
80    /// Applies the filter to the given sequence of samples. 
81    /// Note : The amount of outputted samples is by value of 'filter length' 
82    /// smaller than the amount of input samples.
83    uint evaluate(SAMPLETYPE *dest, 
84                  const SAMPLETYPE *src, 
85                  uint numSamples, 
86                  uint numChannels) const;
87};
88
89}
90
91#endif