#include <Nsound/FilterDelay.h>

A class for filtering audio in the frequecy domain.
Definition at line 47 of file FilterDelay.h.
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 }
| AudioStream FilterDelay::filter | ( | const AudioStream & | x | ) |
Reimplemented from Nsound::Filter.
Definition at line 105 of file FilterDelay.cc.
Referenced by Nsound::FilterMovingAverage::filter(), Nsound::FilterFlanger::filter(), filter(), Nsound::FilterCombLowPassFeedback::filter(), Nsound::FilterAllPass::filter(), and FilterDelay_UnitTest().
00106 { 00107 return Filter::filter(x); 00108 }
| 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 }
Reimplemented from Nsound::Filter.
Definition at line 129 of file FilterDelay.cc.
References filter().
00130 { 00131 return Filter::filter(x); 00132 }
Reimplemented from Nsound::Filter.
Definition at line 137 of file FilterDelay.cc.
References filter().
00138 { 00139 return Filter::filter(x, delay); 00140 }
Reimplemented from Nsound::Filter.
Definition at line 145 of file FilterDelay.cc.
References filter().
00146 { 00147 return Filter::filter(x, delay); 00148 }
Implements Nsound::Filter.
Definition at line 153 of file FilterDelay.cc.
References delay_, and filter().
00154 { 00155 return FilterDelay::filter(x, delay_); 00156 00157 }
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 }
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 };
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 }
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().
| virtual uint32 Nsound::Filter::getKernelSize | ( | ) | const [inline, virtual, inherited] |
Reimplemented in Nsound::FilterIIR, and Nsound::FilterTone.
Definition at line 109 of file Filter.h.
References Nsound::Filter::kernel_size_.
Referenced by Nsound::FilterBandPassIIR::FilterBandPassIIR(), Nsound::FilterBandRejectIIR::plot(), Nsound::FilterBandPassIIR::plot(), and Nsound::FilterBandPassFIR::plot().
00109 {return kernel_size_;};
| 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 }
float64* Nsound::FilterDelay::buffer_ [protected] |
Definition at line 106 of file FilterDelay.h.
Referenced by filter(), FilterDelay(), operator=(), reset(), and ~FilterDelay().
float64* Nsound::FilterDelay::buffer_end_ptr_ [protected] |
Definition at line 107 of file FilterDelay.h.
Referenced by filter(), FilterDelay(), operator=(), and reset().
float64* Nsound::FilterDelay::read_ptr_ [protected] |
Definition at line 108 of file FilterDelay.h.
Referenced by filter(), operator=(), and reset().
float64* Nsound::FilterDelay::write_ptr_ [protected] |
Definition at line 109 of file FilterDelay.h.
Referenced by filter(), operator=(), and reset().
float64 Nsound::FilterDelay::delay_ [protected] |
Definition at line 111 of file FilterDelay.h.
Referenced by filter(), FilterDelay(), and operator=().
uint32 Nsound::FilterDelay::n_samples_ [protected] |
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().
float64 Nsound::Filter::two_pi_over_sample_rate_ [protected, inherited] |
Definition at line 132 of file Filter.h.
Referenced by Nsound::FilterTone::makeKernel(), Nsound::FilterParametricEqualizer::makeKernel(), and Nsound::FilterLowPassFIR::makeKernel().
uint32 Nsound::Filter::kernel_size_ [protected, inherited] |
Definition at line 133 of file Filter.h.
Referenced by Nsound::FilterLowPassFIR::filter(), Nsound::FilterLeastSquaresFIR::filter(), Nsound::FilterBandPassFIR::FilterBandPassFIR(), Nsound::FilterBandPassIIR::FilterBandPassIIR(), Nsound::FilterBandRejectIIR::FilterBandRejectIIR(), Nsound::FilterHighPassIIR::FilterHighPassIIR(), Nsound::FilterLeastSquaresFIR::FilterLeastSquaresFIR(), Nsound::FilterLowPassFIR::FilterLowPassFIR(), Nsound::FilterLowPassIIR::FilterLowPassIIR(), Nsound::FilterLeastSquaresFIR::getKernel(), Nsound::Filter::getKernelSize(), Nsound::FilterLowPassFIR::makeKernel(), Nsound::FilterLeastSquaresFIR::makeKernel(), Nsound::FilterHighPassFIR::makeKernel(), Nsound::FilterBandRejectFIR::makeKernel(), Nsound::FilterLeastSquaresFIR::operator=(), Nsound::FilterLowPassFIR::plot(), Nsound::FilterLeastSquaresFIR::plot(), Nsound::FilterHighPassFIR::plot(), Nsound::FilterBandRejectFIR::plot(), Nsound::FilterLowPassFIR::reset(), Nsound::FilterLeastSquaresFIR::reset(), Nsound::FilterHighPassFIR::reset(), Nsound::FilterLeastSquaresFIR::setKernel(), Nsound::FilterLeastSquaresFIR::setWindow(), and Nsound::FilterHighPassFIR::spectraReversal_().
1.6.3