summaryrefslogtreecommitdiffstats
path: root/lib/ladspa/caps/dsp/Delay.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ladspa/caps/dsp/Delay.h')
-rw-r--r--lib/ladspa/caps/dsp/Delay.h171
1 files changed, 0 insertions, 171 deletions
diff --git a/lib/ladspa/caps/dsp/Delay.h b/lib/ladspa/caps/dsp/Delay.h
deleted file mode 100644
index 3703e7f031..0000000000
--- a/lib/ladspa/caps/dsp/Delay.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- dsp/Delay.h
-
- Copyright 2003-4 Tim Goetze <tim@quitte.de>
-
- http://quitte.de/dsp/
-
- delay lines with fractional (linear or cubica interpolation) lookup
- and an allpass interpolating tap (which needs more work).
-
- delay line storage is aligned to powers of two for simplified wrapping
- checks (no conditional or modulo, binary and suffices instead).
-
-*/
-/*
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA or point your web browser to http://www.gnu.org.
-*/
-
-#ifndef _DSP_DELAY_H_
-#define _DSP_DELAY_H_
-
-#include "util.h"
-#include "FPTruncateMode.h"
-
-namespace DSP {
-
-class Delay
-{
- public:
- int size;
- d_sample * data;
- int read, write;
-
- Delay()
- {
- read = write = 0;
- data = 0;
- }
-
- ~Delay()
- {
- if (data) free (data);
- }
-
- void init (int n)
- {
- size = next_power_of_2 (n);
- data = (d_sample *) calloc (sizeof (d_sample), size);
- size -= 1;
- write = n;
- }
-
- void reset()
- {
- memset (data, 0, (size + 1) * sizeof (d_sample));
- }
-
- d_sample &
- operator [] (int i)
- {
- return data [(write - i) & size];
- }
-
- inline void
- put (d_sample x)
- {
- data [write] = x;
- write = (write + 1) & size;
- }
-
- inline d_sample
- get()
- {
- d_sample x = data [read];
- read = (read + 1) & size;
- return x;
- }
-
- inline d_sample
- putget (d_sample x)
- {
- put (x);
- return get();
- }
-
- /* fractional lookup, linear interpolation */
- inline d_sample
- get_at (float f)
- {
- int n;
- fistp (f, n); /* read: i = (int) f; relies on FPTruncateMode */
- f -= n;
-
- return (1 - f) * (*this) [n] + f * (*this) [n + 1];
- }
-
- /* fractional lookup, cubic interpolation */
- inline d_sample
- get_cubic (float f)
- {
- int n;
- fistp (f, n); /* see FPTruncateMode */
- f -= n;
-
- d_sample x_1 = (*this) [n - 1];
- d_sample x0 = (*this) [n];
- d_sample x1 = (*this) [n + 1];
- d_sample x2 = (*this) [n + 2];
-
- /* d_sample (32bit) quicker than double here */
- register d_sample a =
- (3 * (x0 - x1) - x_1 + x2) * .5;
- register d_sample b =
- 2 * x1 + x_1 - (5 * x0 + x2) * .5;
- register d_sample c =
- (x1 - x_1) * .5;
-
- return x0 + (((a * f) + b) * f + c) * f;
- }
-};
-
-/* allpass variant */
-
-class DelayTapA
-{
- public:
- d_sample x1, y1;
-
- DelayTapA()
- {
- reset();
- }
-
- void reset()
- {
- x1 = y1 = 0;
- }
-
- d_sample get (Delay & d, float f)
- {
- int n;
- fistp (f, n); /* read: i = (int) f; relies on FPTruncateMode */
- f -= n;
- if (0 && f < .5)
- f += 1,
- n -= 1;
-
- d_sample x = d[n];
- f = (1 - f) / (1 + f);
- y1 = x1 + f * x - f * y1;
- x1 = x;
- return y1;
- }
-};
-
-}; /* namespace DSP */
-
-#endif /* _DSP_DELAY_H_ */