using std::shared_ptr;
-/** @return array of floats which the caller must destroy with delete[] */
-float *
+std::vector<float>
AudioFilter::sinc_blackman (float cutoff, bool invert) const
{
- float* ir = new float[_M + 1];
+ auto ir = std::vector<float>();
+ ir.reserve(_M + 1);
/* Impulse response */
}
-AudioFilter::~AudioFilter ()
-{
- delete[] _ir;
-}
-
-
shared_ptr<AudioBuffers>
AudioFilter::run (shared_ptr<const AudioBuffers> in)
{
auto lpf = sinc_blackman (lower, false);
auto hpf = sinc_blackman (higher, true);
- delete[] _ir;
- _ir = new float[_M + 1];
+ _ir.reserve (_M + 1);
for (int i = 0; i <= _M; ++i) {
_ir[i] = lpf[i] + hpf[i];
}
- delete[] lpf;
- delete[] hpf;
-
/* We now have a band-stop, so invert for band-pass */
for (int i = 0; i <= _M; ++i) {
_ir[i] = -_ir[i];
#include <memory>
+#include <vector>
class AudioBuffers;
}
}
- virtual ~AudioFilter ();
+ virtual ~AudioFilter () {}
std::shared_ptr<AudioBuffers> run (std::shared_ptr<const AudioBuffers> in);
friend struct audio_filter_impulse_kernel_test;
friend struct audio_filter_impulse_input_test;
- float* sinc_blackman (float cutoff, bool invert) const;
+ std::vector<float> sinc_blackman (float cutoff, bool invert) const;
- float* _ir = nullptr;
+ std::vector<float> _ir;
int _M;
std::shared_ptr<AudioBuffers> _tail;
};
BOOST_AUTO_TEST_CASE (audio_filter_impulse_kernel_test)
{
AudioFilter f (0.02);
- delete[] f._ir;
- f._ir = new float[f._M + 1];
+ f._ir.reserve(f._M + 1);
f._ir[0] = 1;
for (int i = 1; i <= f._M; ++i) {
f._ir[i] = 0;