Nsound::FilterDelay Class Reference

#include <Nsound/FilterDelay.h>

Inheritance diagram for Nsound::FilterDelay:
Inheritance graph
[legend]

List of all members.

Public Member Functions

 FilterDelay (const float64 &sample_rate, const float64 &max_delay_time_seconds)
 FilterDelay (const FilterDelay &copy)
 ~FilterDelay ()
AudioStream filter (const AudioStream &x)
AudioStream filter (const AudioStream &x, const float64 &delay_in_seconds)
AudioStream filter (const AudioStream &x, const Buffer &delay_in_seconds)
Buffer filter (const Buffer &x)
Buffer filter (const Buffer &x, const float64 &delay_in_seconds)
Buffer filter (const Buffer &x, const Buffer &delay_in_seconds)
float64 filter (const float64 &x)
float64 filter (const float64 &x, const float64 &delay_in_seconds)
FilterDelayoperator= (const FilterDelay &rhs)
void reset ()
Buffer getFrequencyAxis (const uint32 n_fft=8192)
Buffer getFrequencyResponse (const uint32 n_fft=8192)
Buffer getImpulseResponse (const uint32 n_samples=8192)
virtual uint32 getKernelSize () const
Buffer getPhaseResponse ()
float64 getSampleRate () const
void plot (boolean show_phase=false)

Protected Attributes

float64buffer_
float64buffer_end_ptr_
float64read_ptr_
float64write_ptr_
float64 delay_
uint32 n_samples_
float64 sample_rate_
float64 two_pi_over_sample_rate_
uint32 kernel_size_

Detailed Description

A class for filtering audio in the frequecy domain.

Definition at line 47 of file FilterDelay.h.


Constructor & Destructor Documentation

FilterDelay::FilterDelay ( const float64 sample_rate,
const float64 max_delay_time_seconds 
)

Definition at line 45 of file FilterDelay.cc.

References buffer_, buffer_end_ptr_, delay_, n_samples_, reset(), and Nsound::Filter::sample_rate_.

00049     :
00050     Filter(sample_rate),
00051     buffer_(NULL),
00052     buffer_end_ptr_(NULL),
00053     read_ptr_(NULL),
00054     write_ptr_(NULL),
00055     delay_(max_delay_time_seconds),
00056     n_samples_(0)
00057 {
00058     if(delay_ <= 0.0)
00059     {
00060         cerr << "Nsound::FilterDelay: delay_time_seconds must be > 0.0"
00061              << endl;
00062 
00063          delay_ = 0.1;
00064     }
00065 
00066     n_samples_ = static_cast<uint32>(std::ceil(sample_rate_ * delay_));
00067 
00068     ++n_samples_;
00069 
00070     buffer_ = new float64 [n_samples_];
00071 
00072     buffer_end_ptr_ = buffer_ + n_samples_;
00073 
00074     FilterDelay::reset();
}

FilterDelay::FilterDelay ( const FilterDelay copy  ) 

Definition at line 78 of file FilterDelay.cc.

References buffer_, buffer_end_ptr_, and n_samples_.

00080     :
00081     Filter(copy.sample_rate_),
00082     buffer_(NULL),
00083     buffer_end_ptr_(NULL),
00084     read_ptr_(NULL),
00085     write_ptr_(NULL),
00086     delay_(copy.delay_),
00087     n_samples_(copy.n_samples_)
00088 {
00089     buffer_ = new float64 [n_samples_];
00090 
00091     buffer_end_ptr_ = buffer_ + n_samples_;
00092 
00093     *this = copy;
}

FilterDelay::~FilterDelay (  ) 

Definition at line 97 of file FilterDelay.cc.

References buffer_.

00098 {
00099     delete [] buffer_;
00100 }


Member Function Documentation

AudioStream FilterDelay::filter ( const AudioStream x  ) 
AudioStream FilterDelay::filter ( const AudioStream x,
const float64 delay_in_seconds 
)

Reimplemented from Nsound::Filter.

Definition at line 113 of file FilterDelay.cc.

References filter().

00114 {
00115     return Filter::filter(x, delay);
00116 }

AudioStream FilterDelay::filter ( const AudioStream x,
const Buffer delay_in_seconds 
)

Reimplemented from Nsound::Filter.

Definition at line 121 of file FilterDelay.cc.

References filter().

00122 {
00123     return Filter::filter(x, delay);
00124 }

Buffer FilterDelay::filter ( const Buffer x  ) 

Reimplemented from Nsound::Filter.

Definition at line 129 of file FilterDelay.cc.

References filter().

00130 {
00131     return Filter::filter(x);
00132 }

Buffer FilterDelay::filter ( const Buffer x,
const float64 delay_in_seconds 
)

Reimplemented from Nsound::Filter.

Definition at line 137 of file FilterDelay.cc.

References filter().

00138 {
00139     return Filter::filter(x, delay);
00140 }

Buffer FilterDelay::filter ( const Buffer x,
const Buffer delay_in_seconds 
)

Reimplemented from Nsound::Filter.

Definition at line 145 of file FilterDelay.cc.

References filter().

00146 {
00147     return Filter::filter(x, delay);
00148 }

float64 FilterDelay::filter ( const float64 x  )  [virtual]

Implements Nsound::Filter.

Definition at line 153 of file FilterDelay.cc.

References delay_, and filter().

00154 {
00155     return FilterDelay::filter(x, delay_);
00156 
00157 }

float64 FilterDelay::filter ( const float64 x,
const float64 delay_in_seconds 
) [virtual]

Implements Nsound::Filter.

Definition at line 162 of file FilterDelay.cc.

References buffer_, buffer_end_ptr_, delay_, n_samples_, read_ptr_, Nsound::Filter::sample_rate_, and write_ptr_.

00163 {
00164     *write_ptr_ = x;
00165     ++write_ptr_;
00166 
00167     // Bounds check
00168     if(write_ptr_ >= buffer_end_ptr_)
00169     {
00170         write_ptr_ = buffer_;
00171     }
00172 
00173     float64 del = delay;
00174 
00175     // limit delay
00176     if(del > delay_)   del = delay_;
00177     else if(del < 0.0) del = 0.0;
00178 
00179     uint32 d = static_cast<uint32>(sample_rate_ * del);
00180 
00181     read_ptr_ = write_ptr_ - d - 1;
00182 
00183     // Bounds check.
00184     if(read_ptr_ < buffer_)
00185     {
00186         read_ptr_ += n_samples_;
00187     }
00188 
00189     float64 y = *read_ptr_;
00190 
00191     return y;
00192 }

FilterDelay & FilterDelay::operator= ( const FilterDelay rhs  ) 

Definition at line 198 of file FilterDelay.cc.

References buffer_, buffer_end_ptr_, delay_, n_samples_, read_ptr_, reset(), and write_ptr_.

00199 {
00200     if(this == &rhs)
00201     {
00202         return *this;
00203     }
00204 
00205     if(n_samples_ != rhs.n_samples_)
00206     {
00207         n_samples_ = rhs.n_samples_;
00208         delete [] buffer_;
00209         buffer_ = new float64 [n_samples_];
00210         buffer_end_ptr_ = buffer_ + n_samples_;
00211         reset();
00212     }
00213 
00214     delay_     = rhs.delay_;
00215     n_samples_ = rhs.n_samples_;
00216 
00217     // Copy the buffer.
00218     memcpy(buffer_, rhs.buffer_, sizeof(float64) * n_samples_);
00219 
00220     // Set the pointers to the same offsets into the buffer.
00221     read_ptr_  = buffer_ + (rhs.read_ptr_ - rhs.buffer_);
00222     write_ptr_ = buffer_ + (rhs.write_ptr_ - rhs.buffer_);
00223 
00224     return *this;
00225 }

void FilterDelay::reset (  )  [virtual]

Implements Nsound::Filter.

Definition at line 230 of file FilterDelay.cc.

References buffer_, buffer_end_ptr_, n_samples_, read_ptr_, and write_ptr_.

Referenced by FilterDelay(), operator=(), Nsound::FilterMovingAverage::reset(), Nsound::FilterFlanger::reset(), Nsound::FilterCombLowPassFeedback::reset(), and Nsound::FilterAllPass::reset().

00231 {
00232     // Clear all the memory in the buffer.
00233     memset(buffer_, 0, sizeof(float64) * n_samples_);
00234 
00235     read_ptr_ = buffer_;
00236     write_ptr_ = buffer_end_ptr_ - 1;
00237 }

Buffer Filter::getFrequencyAxis ( const uint32  n_fft = 8192  )  [inherited]

Definition at line 176 of file Filter.cc.

References Nsound::FFTransform::roundUp2(), and Nsound::Filter::sample_rate_.

Referenced by main(), Nsound::Filter::plot(), and Nsound::FilterIIR::savePlot().

00177 {
00178     uint32 fft_chunk_size = FFTransform::roundUp2(
00179         static_cast<int32>(n_fft));
00180 
00181     uint32 n_samples = fft_chunk_size / 2 + 1;
00182 
00183     float64 f_step = (1.0 / (static_cast<float64>(fft_chunk_size) / 2.0))
00184                    * (sample_rate_ / 2.0);
00185 
00186     Buffer f_axis;
00187 
00188     float64 f = 0.0;
00189 
00190     for(uint32 i = 0; i < n_samples; ++i)
00191     {
00192         f_axis << f;
00193         f += f_step;
00194     }
00195 
00196     return f_axis;
00197 };

Buffer Filter::getFrequencyResponse ( const uint32  n_fft = 8192  )  [inherited]

Definition at line 202 of file Filter.cc.

References Nsound::FFTransform::fft(), Nsound::Filter::getImpulseResponse(), and Nsound::Filter::sample_rate_.

Referenced by Nsound::FilterBandPassIIR::FilterBandPassIIR(), FilterLeastSquaresFIR_UnitTest(), Nsound::FilterIIR::getRMS(), main(), Nsound::Filter::plot(), and Nsound::FilterIIR::savePlot().

00203 {
00204     FFTransform fft(sample_rate_);
00205 
00206 //~    fft.setWindow(HANNING);
00207 
00208     FFTChunkVector vec;
00209 
00210     vec = fft.fft(getImpulseResponse(), n_fft);
00211 
00212     return vec[0].getMagnitude();
00213 }

Buffer Filter::getImpulseResponse ( const uint32  n_samples = 8192  )  [inherited]

Reimplemented in Nsound::FilterIIR.

Definition at line 218 of file Filter.cc.

References Nsound::Filter::filter(), and Nsound::Filter::reset().

Referenced by Nsound::Filter::getFrequencyResponse(), and Nsound::Filter::getPhaseResponse().

00219 {
00220     reset();
00221 
00222     Buffer response(n_samples);
00223 
00224     response << filter(1.0);
00225 
00226     for(uint32 i = 1; i < n_samples; ++i)
00227     {
00228         response << filter(0.0);
00229     }
00230 
00231     reset();
00232 
00233     return response;
00234 }

virtual uint32 Nsound::Filter::getKernelSize (  )  const [inline, virtual, inherited]
Buffer Filter::getPhaseResponse (  )  [inherited]

Definition at line 239 of file Filter.cc.

References Nsound::FFTransform::fft(), Nsound::Filter::getImpulseResponse(), Nsound::Buffer::getLength(), Nsound::Filter::sample_rate_, and Nsound::Buffer::subbuffer().

Referenced by Nsound::Filter::plot().

00240 {
00241     uint32 n_samples = static_cast<uint32>(sample_rate_ * 2);
00242 
00243     FFTransform fft(n_samples);
00244 
00245     FFTChunkVector vec;
00246 
00247     vec = fft.fft(getImpulseResponse(), n_samples);
00248 
00249     Buffer phase = vec[0].getPhase();
00250 
00251     return phase.subbuffer(0, phase.getLength() / 2 + 1);
00252 }

float64 Nsound::Filter::getSampleRate (  )  const [inline, inherited]

Definition at line 117 of file Filter.h.

References Nsound::Filter::sample_rate_.

00117 { return sample_rate_; };

void Filter::plot ( boolean  show_phase = false  )  [inherited]

Definition at line 257 of file Filter.cc.

References Nsound::Plotter::figure(), Nsound::Buffer::getdB(), Nsound::Filter::getFrequencyAxis(), Nsound::Filter::getFrequencyResponse(), Nsound::Buffer::getMax(), Nsound::Filter::getPhaseResponse(), Nsound::Plotter::plot(), Nsound::Plotter::subplot(), Nsound::Plotter::xlabel(), Nsound::Plotter::ylabel(), and Nsound::Plotter::ylim().

Referenced by main().

00258 {
00259     Buffer x = getFrequencyAxis();
00260     Buffer fr = getFrequencyResponse().getdB();
00261 
00262     Plotter pylab;
00263 
00264     pylab.figure();
00265 
00266     int subplot_int = 111;
00267 
00268     if(show_phase)
00269     {
00270         subplot_int = 211;
00271     }
00272 
00273     pylab.subplot(subplot_int);
00274 
00275     // Frequency response
00276     pylab.plot(x,fr, "blue");
00277 
00278     pylab.xlabel("Frequency (Hz)");
00279     pylab.ylabel("Frequency Response (dB)");
00280 
00281     // Phase response
00282     if(show_phase)
00283     {
00284         pylab.subplot(subplot_int + 1);
00285 
00286         Buffer pr = getPhaseResponse().getdB();
00287 
00288         pylab.plot(x,pr);
00289 
00290         pylab.xlabel("Frequency (Hz)");
00291         pylab.ylabel("Phase Response (dB)");
00292     }
00293 
00294     float64 ymax = fr.getMax();
00295     float64 height = ymax - -60.0;
00296 
00297     pylab.ylim(-60.0, ymax + 0.05 * height);
00298 
00299 }


Member Data Documentation

Definition at line 106 of file FilterDelay.h.

Referenced by filter(), FilterDelay(), operator=(), reset(), and ~FilterDelay().

Definition at line 107 of file FilterDelay.h.

Referenced by filter(), FilterDelay(), operator=(), and reset().

Definition at line 108 of file FilterDelay.h.

Referenced by filter(), operator=(), and reset().

Definition at line 109 of file FilterDelay.h.

Referenced by filter(), operator=(), and reset().

Definition at line 111 of file FilterDelay.h.

Referenced by filter(), FilterDelay(), and operator=().

Definition at line 113 of file FilterDelay.h.

Referenced by filter(), FilterDelay(), operator=(), and reset().

float64 Nsound::Filter::sample_rate_ [protected, inherited]

Definition at line 131 of file Filter.h.

Referenced by Nsound::FilterPhaser::filter(), filter(), Nsound::FilterCombLowPassFeedback::filter(), Nsound::FilterAllPass::FilterAllPass(), Nsound::FilterCombLowPassFeedback::FilterCombLowPassFeedback(), FilterDelay(), Nsound::FilterFlanger::FilterFlanger(), Nsound::FilterPhaser::FilterPhaser(), Nsound::FilterSlinky::FilterSlinky(), Nsound::Filter::getFrequencyAxis(), Nsound::Filter::getFrequencyResponse(), Nsound::Filter::getPhaseResponse(), Nsound::Filter::getSampleRate(), Nsound::FilterStageIIR::makeIIRKernelHelper(), Nsound::FilterStageIIR::makeKernel(), Nsound::FilterParametricEqualizer::makeKernel(), Nsound::FilterLeastSquaresFIR::makeKernel(), Nsound::FilterHighPassFIR::makeKernel(), Nsound::FilterBandPassVocoder::makeKernel(), Nsound::FilterPhaser::operator=(), Nsound::FilterLeastSquaresFIR::operator=(), Nsound::FilterIIR::operator=(), Nsound::FilterFlanger::operator=(), Nsound::FilterTone::plot(), Nsound::FilterPhaser::plot(), Nsound::FilterParametricEqualizer::plot(), Nsound::FilterLowPassIIR::plot(), Nsound::FilterLowPassFIR::plot(), Nsound::FilterLeastSquaresFIR::plot(), Nsound::FilterHighPassIIR::plot(), Nsound::FilterHighPassFIR::plot(), Nsound::FilterFlanger::plot(), Nsound::FilterCombLowPassFeedback::plot(), Nsound::FilterBandRejectIIR::plot(), Nsound::FilterBandRejectFIR::plot(), Nsound::FilterBandPassIIR::plot(), Nsound::FilterBandPassFIR::plot(), Nsound::FilterAllPass::plot(), Nsound::FilterLowPassIIR::setCutoff(), and Nsound::FilterLeastSquaresFIR::setWindow().

uint32 Nsound::Filter::kernel_size_ [protected, inherited]

The documentation for this class was generated from the following files:
Generated on Sun Apr 15 20:10:50 2012 for nsound by  doxygen 1.6.3