Nsound  0.9.4
Public Member Functions | Protected Attributes | List of all members
Nsound::FilterDelay Class Reference

A class for filtering audio in the frequecy domain. More...

#include <Nsound/FilterDelay.h>

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

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 ()
 
void setRealtime (bool flag)
 
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_
 
float64 sample_time_
 
uint32 kernel_size_
 
bool is_realtime_
 

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_, M_ASSERT_VALUE, n_samples_, reset(), and Nsound::Filter::sample_rate_.

48  :
49  Filter(sample_rate),
50  buffer_(NULL),
51  buffer_end_ptr_(NULL),
52  read_ptr_(NULL),
53  write_ptr_(NULL),
54  delay_(max_delay_time_seconds),
55  n_samples_(0)
56 {
57  M_ASSERT_VALUE(delay_, >, 0.0);
58 
59  n_samples_ = static_cast<uint32>(std::ceil(sample_rate_ * delay_));
60 
61  ++n_samples_;
62 
63  buffer_ = new float64 [n_samples_];
64 
66 
68 }
unsigned int uint32
Definition: Nsound.h:153
#define M_ASSERT_VALUE(a, op, value)
Definition: Macros.h:76
float64 * write_ptr_
Definition: FilterDelay.h:94
double float64
Definition: Nsound.h:146
float64 * buffer_end_ptr_
Definition: FilterDelay.h:92
Filter(const float64 &sample_rate)
Definition: Filter.cc:41
float64 * read_ptr_
Definition: FilterDelay.h:93
float64 sample_rate_
Definition: Filter.h:113
FilterDelay::FilterDelay ( const FilterDelay copy)

Definition at line 72 of file FilterDelay.cc.

References buffer_, buffer_end_ptr_, and n_samples_.

73  :
74  Filter(copy.sample_rate_),
75  buffer_(NULL),
76  buffer_end_ptr_(NULL),
77  read_ptr_(NULL),
78  write_ptr_(NULL),
79  delay_(copy.delay_),
81 {
82  buffer_ = new float64 [n_samples_];
83 
85 
86  *this = copy;
87 }
float64 * write_ptr_
Definition: FilterDelay.h:94
double float64
Definition: Nsound.h:146
float64 * buffer_end_ptr_
Definition: FilterDelay.h:92
Filter(const float64 &sample_rate)
Definition: Filter.cc:41
float64 * read_ptr_
Definition: FilterDelay.h:93
float64 sample_rate_
Definition: Filter.h:113
FilterDelay::~FilterDelay ( )

Definition at line 91 of file FilterDelay.cc.

References buffer_.

92 {
93  delete [] buffer_;
94 }

Member Function Documentation

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

Definition at line 105 of file FilterDelay.cc.

References Nsound::Filter::filter().

106 {
107  return Filter::filter(x, delay);
108 }
AudioStream filter(const AudioStream &x)
Definition: Filter.cc:53
AudioStream FilterDelay::filter ( const AudioStream x,
const Buffer delay_in_seconds 
)

Definition at line 112 of file FilterDelay.cc.

References Nsound::Filter::filter().

113 {
114  return Filter::filter(x, delay);
115 }
AudioStream filter(const AudioStream &x)
Definition: Filter.cc:53
Buffer FilterDelay::filter ( const Buffer x)

Definition at line 119 of file FilterDelay.cc.

References Nsound::Filter::filter().

120 {
121  return Filter::filter(x);
122 }
AudioStream filter(const AudioStream &x)
Definition: Filter.cc:53
Buffer FilterDelay::filter ( const Buffer x,
const float64 delay_in_seconds 
)

Definition at line 126 of file FilterDelay.cc.

References Nsound::Filter::filter().

127 {
128  return Filter::filter(x, delay);
129 }
AudioStream filter(const AudioStream &x)
Definition: Filter.cc:53
Buffer FilterDelay::filter ( const Buffer x,
const Buffer delay_in_seconds 
)

Definition at line 133 of file FilterDelay.cc.

References Nsound::Filter::filter().

134 {
135  return Filter::filter(x, delay);
136 }
AudioStream filter(const AudioStream &x)
Definition: Filter.cc:53
float64 FilterDelay::filter ( const float64 x)
virtual

Implements Nsound::Filter.

Definition at line 140 of file FilterDelay.cc.

References delay_, and filter().

141 {
142  return FilterDelay::filter(x, delay_);
143 
144 }
AudioStream filter(const AudioStream &x)
Definition: FilterDelay.cc:98
float64 FilterDelay::filter ( const float64 x,
const float64 delay_in_seconds 
)
virtual

Implements Nsound::Filter.

Definition at line 148 of file FilterDelay.cc.

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

149 {
150  *write_ptr_ = x;
151  ++write_ptr_;
152 
153  // Bounds check
155  {
157  }
158 
159  float64 del = delay;
160 
161  // limit delay
162  if(del > delay_) del = delay_;
163  else if(del < 0.0) del = 0.0;
164 
165  uint32 d = static_cast<uint32>(sample_rate_ * del);
166 
167  read_ptr_ = write_ptr_ - d - 1;
168 
169  // Bounds check.
170  if(read_ptr_ < buffer_)
171  {
173  }
174 
175  float64 y = *read_ptr_;
176 
177  return y;
178 }
unsigned int uint32
Definition: Nsound.h:153
float64 * write_ptr_
Definition: FilterDelay.h:94
double float64
Definition: Nsound.h:146
float64 * buffer_end_ptr_
Definition: FilterDelay.h:92
float64 * read_ptr_
Definition: FilterDelay.h:93
float64 sample_rate_
Definition: Filter.h:113
FilterDelay & FilterDelay::operator= ( const FilterDelay rhs)

Definition at line 184 of file FilterDelay.cc.

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

185 {
186  if(this == &rhs)
187  {
188  return *this;
189  }
190 
191  if(n_samples_ != rhs.n_samples_)
192  {
193  n_samples_ = rhs.n_samples_;
194  delete [] buffer_;
195  buffer_ = new float64 [n_samples_];
197  reset();
198  }
199 
200  delay_ = rhs.delay_;
201  n_samples_ = rhs.n_samples_;
202 
203  // Copy the buffer.
204  memcpy(buffer_, rhs.buffer_, sizeof(float64) * n_samples_);
205 
206  // Set the pointers to the same offsets into the buffer.
207  read_ptr_ = buffer_ + (rhs.read_ptr_ - rhs.buffer_);
208  write_ptr_ = buffer_ + (rhs.write_ptr_ - rhs.buffer_);
209 
210  return *this;
211 }
float64 * write_ptr_
Definition: FilterDelay.h:94
double float64
Definition: Nsound.h:146
float64 * buffer_end_ptr_
Definition: FilterDelay.h:92
float64 * read_ptr_
Definition: FilterDelay.h:93
void FilterDelay::reset ( )
virtual

Implements Nsound::Filter.

Definition at line 215 of file FilterDelay.cc.

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

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

216 {
217  // Clear all the memory in the buffer.
218  memset(buffer_, 0, sizeof(float64) * n_samples_);
219 
220  read_ptr_ = buffer_;
222 }
float64 * write_ptr_
Definition: FilterDelay.h:94
double float64
Definition: Nsound.h:146
float64 * buffer_end_ptr_
Definition: FilterDelay.h:92
float64 * read_ptr_
Definition: FilterDelay.h:93
void Nsound::Filter::setRealtime ( bool  flag)
inlineinherited

Definition at line 57 of file Filter.h.

References Nsound::Filter::is_realtime_.

57 {is_realtime_ = flag;}
bool is_realtime_
Definition: Filter.h:118
Buffer Filter::getFrequencyAxis ( const uint32  n_fft = 8192)
inherited

Definition at line 185 of file Filter.cc.

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

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

186 {
187  uint32 fft_chunk_size = FFTransform::roundUp2(
188  static_cast<int32>(n_fft));
189 
190  uint32 n_samples = fft_chunk_size / 2 + 1;
191 
192  float64 f_step = (1.0 / (static_cast<float64>(fft_chunk_size) / 2.0))
193  * (sample_rate_ / 2.0);
194 
195  Buffer f_axis;
196 
197  float64 f = 0.0;
198 
199  for(uint32 i = 0; i < n_samples; ++i)
200  {
201  f_axis << f;
202  f += f_step;
203  }
204 
205  return f_axis;
206 };
unsigned int uint32
Definition: Nsound.h:153
double float64
Definition: Nsound.h:146
static int32 roundUp2(int32 raw)
Returns nearest power of 2 >= raw.
Definition: FFTransform.cc:274
A Buffer for storing audio samples.
Definition: Buffer.h:60
float64 sample_rate_
Definition: Filter.h:113
Buffer Filter::getFrequencyResponse ( const uint32  n_fft = 8192)
inherited

Definition at line 210 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().

211 {
213 
214 //~ fft.setWindow(HANNING);
215 
216  FFTChunkVector vec;
217 
218  vec = fft.fft(getImpulseResponse(), n_fft);
219 
220  return vec[0].getMagnitude();
221 }
Buffer getImpulseResponse(const uint32 n_samples=8192)
Definition: Filter.cc:225
A Class that performes the Fast Fouier Transfrom on a Buffer.
Definition: FFTransform.h:57
std::vector< FFTChunk > FFTChunkVector
Definition: FFTChunk.h:119
float64 sample_rate_
Definition: Filter.h:113
Buffer Filter::getImpulseResponse ( const uint32  n_samples = 8192)
inherited

Definition at line 225 of file Filter.cc.

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

Referenced by Nsound::Filter::getFrequencyResponse(), Nsound::FilterHighPassFIR::getImpulseResponse(), Nsound::FilterLowPassFIR::getImpulseResponse(), Nsound::FilterLeastSquaresFIR::getImpulseResponse(), Nsound::FilterIIR::getImpulseResponse(), and Nsound::Filter::getPhaseResponse().

226 {
227  if(!is_realtime_) reset();
228 
229  Buffer response(n_samples);
230 
231  response << filter(1.0);
232 
233  for(uint32 i = 1; i < n_samples; ++i)
234  {
235  response << filter(0.0);
236  }
237 
238  if(!is_realtime_) reset();
239 
240  return response;
241 }
unsigned int uint32
Definition: Nsound.h:153
virtual void reset()=0
AudioStream filter(const AudioStream &x)
Definition: Filter.cc:53
bool is_realtime_
Definition: Filter.h:118
A Buffer for storing audio samples.
Definition: Buffer.h:60
virtual uint32 Nsound::Filter::getKernelSize ( ) const
inlinevirtualinherited
Buffer Filter::getPhaseResponse ( )
inherited

Definition at line 245 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().

246 {
247  uint32 n_samples = static_cast<uint32>(sample_rate_ * 2);
248 
249  FFTransform fft(n_samples);
250 
251  FFTChunkVector vec;
252 
253  vec = fft.fft(getImpulseResponse(), n_samples);
254 
255  Buffer phase = vec[0].getPhase();
256 
257  return phase.subbuffer(0, phase.getLength() / 2 + 1);
258 }
Buffer subbuffer(uint32 start_index, uint32 n_samples=0) const
Slice the Buffer.
Definition: Buffer.cc:2073
unsigned int uint32
Definition: Nsound.h:153
uint32 getLength() const
Returns the number of samples in the Buffer.
Definition: Buffer.h:587
Buffer getImpulseResponse(const uint32 n_samples=8192)
Definition: Filter.cc:225
A Class that performes the Fast Fouier Transfrom on a Buffer.
Definition: FFTransform.h:57
A Buffer for storing audio samples.
Definition: Buffer.h:60
std::vector< FFTChunk > FFTChunkVector
Definition: FFTChunk.h:119
float64 sample_rate_
Definition: Filter.h:113
float64 Nsound::Filter::getSampleRate ( ) const
inlineinherited

Definition at line 102 of file Filter.h.

References Nsound::Filter::sample_rate_.

102 { return sample_rate_; };
float64 sample_rate_
Definition: Filter.h:113
void Filter::plot ( boolean  show_phase = false)
inherited

Definition at line 262 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(), Nsound::FilterLowPassMoogVcf::plot(), Nsound::FilterPhaser::plot(), Nsound::FilterTone::plot(), Nsound::FilterHighPassIIR::plot(), Nsound::FilterCombLowPassFeedback::plot(), Nsound::FilterLowPassIIR::plot(), Nsound::FilterLowPassFIR::plot(), Nsound::FilterHighPassFIR::plot(), Nsound::FilterAllPass::plot(), Nsound::FilterBandPassVocoder::plot(), Nsound::FilterBandPassFIR::plot(), Nsound::FilterLeastSquaresFIR::plot(), Nsound::FilterFlanger::plot(), Nsound::FilterBandRejectFIR::plot(), Nsound::FilterBandPassIIR::plot(), Nsound::FilterBandRejectIIR::plot(), and Nsound::FilterParametricEqualizer::plot().

263 {
264  Buffer x = getFrequencyAxis();
266 
267  Plotter pylab;
268 
269  pylab.figure();
270 
271  uint32 n_rows = 1;
272  uint32 n_cols = 1;
273 
274  if(show_phase)
275  {
276  n_rows = 2;
277  }
278 
279  pylab.subplot(n_rows, n_cols, 1);
280 
281  // Frequency response
282  pylab.plot(x,fr, "blue");
283 
284  pylab.xlabel("Frequency (Hz)");
285  pylab.ylabel("Frequency Response (dB)");
286 
287  // Phase response
288  if(show_phase)
289  {
290  pylab.subplot(n_rows, n_cols, 2);
291 
292  Buffer pr = getPhaseResponse().getdB();
293 
294  pylab.plot(x,pr);
295 
296  pylab.xlabel("Frequency (Hz)");
297  pylab.ylabel("Phase Response (dB)");
298  }
299 
300  float64 ymax = fr.getMax();
301  float64 height = ymax - -60.0;
302 
303  pylab.ylim(-60.0, ymax + 0.05 * height);
304 }
unsigned int uint32
Definition: Nsound.h:153
void xlabel(const std::string &label, const std::string &kwargs="")
Add a label x axis.
Definition: Plotter.cc:1154
void plot(const Buffer &y, const std::string &fmt="", const std::string &kwargs="")
Plots the Buffer on the current figure.
Definition: Plotter.cc:765
void figure(const std::string &kwargs="") const
Creates a new figure window to plot in.
Definition: Plotter.cc:455
Buffer getPhaseResponse()
Definition: Filter.cc:245
double float64
Definition: Nsound.h:146
Axes subplot(const uint32 n_rows, const uint32 n_cols, const uint32 n, const std::string &kwargs="", Axes *sharex=NULL, Axes *sharey=NULL)
Creates a figure in a subplot, subplot(A, B, C, **kwargs)
Definition: Plotter.cc:1031
void ylim(const float64 &ymin, const float64 &ymax)
Definition: Plotter.cc:422
Buffer getFrequencyAxis(const uint32 n_fft=8192)
Definition: Filter.cc:185
void ylabel(const std::string &label, const std::string &kwargs="")
Add a label y axis.
Definition: Plotter.cc:1180
A Buffer for storing audio samples.
Definition: Buffer.h:60
Buffer getFrequencyResponse(const uint32 n_fft=8192)
Definition: Filter.cc:210
float64 getMax() const
Returns the maximum sample value in the Buffer.
Definition: Buffer.cc:951
Buffer getdB() const
Returns the Buffer in dB.
Definition: Buffer.h:487

Member Data Documentation

float64* Nsound::FilterDelay::buffer_
protected

Definition at line 91 of file FilterDelay.h.

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

float64* Nsound::FilterDelay::buffer_end_ptr_
protected

Definition at line 92 of file FilterDelay.h.

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

float64* Nsound::FilterDelay::read_ptr_
protected

Definition at line 93 of file FilterDelay.h.

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

float64* Nsound::FilterDelay::write_ptr_
protected

Definition at line 94 of file FilterDelay.h.

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

float64 Nsound::FilterDelay::delay_
protected

Definition at line 96 of file FilterDelay.h.

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

uint32 Nsound::FilterDelay::n_samples_
protected

Definition at line 98 of file FilterDelay.h.

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

float64 Nsound::Filter::sample_rate_
protectedinherited

Definition at line 113 of file Filter.h.

Referenced by Nsound::FilterPhaser::filter(), Nsound::FilterCombLowPassFeedback::filter(), 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::FilterHighPassFIR::makeKernel(), Nsound::FilterStageIIR::makeKernel(), Nsound::FilterBandPassVocoder::makeKernel(), Nsound::FilterLeastSquaresFIR::makeKernel(), Nsound::FilterParametricEqualizer::makeKernel(), Nsound::FilterPhaser::operator=(), Nsound::FilterLeastSquaresFIR::operator=(), Nsound::FilterFlanger::operator=(), Nsound::FilterIIR::operator=(), Nsound::FilterLowPassMoogVcf::plot(), Nsound::FilterPhaser::plot(), Nsound::FilterTone::plot(), Nsound::FilterHighPassIIR::plot(), Nsound::FilterLowPassIIR::plot(), Nsound::FilterCombLowPassFeedback::plot(), Nsound::FilterLowPassFIR::plot(), Nsound::FilterHighPassFIR::plot(), Nsound::FilterAllPass::plot(), Nsound::FilterBandPassFIR::plot(), Nsound::FilterLeastSquaresFIR::plot(), Nsound::FilterFlanger::plot(), Nsound::FilterBandRejectFIR::plot(), Nsound::FilterBandRejectIIR::plot(), Nsound::FilterBandPassIIR::plot(), Nsound::FilterParametricEqualizer::plot(), Nsound::FilterLowPassIIR::setCutoff(), and Nsound::FilterLeastSquaresFIR::setWindow().

float64 Nsound::Filter::two_pi_over_sample_rate_
protectedinherited
float64 Nsound::Filter::sample_time_
protectedinherited

Definition at line 115 of file Filter.h.

Referenced by Nsound::FilterLowPassMoogVcf::_make_filter().

uint32 Nsound::Filter::kernel_size_
protectedinherited
bool Nsound::Filter::is_realtime_
protectedinherited

The documentation for this class was generated from the following files: