CSL  6.0
Convolver.h
Go to the documentation of this file.
1 ///
2 /// Convolver.h -- The way-simplified convolution class.
3 /// This is an FFT-based convolver that uses the Nayuki FFT directly (no wrapper).
4 /// It also stores the FFT data in non-interleaved vectors (e.g., mFilterFFTRe & mFilterFFTIm)
5 /// stephen@heaveneverywhere.com - 1905
6 //
7 // Copyright(C) 2019 Stephen T. Pope. All rights reserved.
8 // THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE.
9 // The copyright notice above does not evidence any actual or intended
10 // publication of such source code.
11 ///
12 
13 #ifndef INCLUDE_CONVOLUTION_H
14 #define INCLUDE_CONVOLUTION_H
15 
16 #include "CSL_Core.h"
17 
18 namespace csl {
19 
20 ///
21 /// The Convolver is a CSL Effect
22 ///
23 
24 class Convolver : public Effect {
25 public: /// Constructors
26  Convolver(unsigned len = 512);
27  Convolver(char * inFName, unsigned len = 512);
28 // Convolver(UnitGenerator & in, char * inFName, unsigned len = 512);
29  Convolver(UnitGenerator & in, char * inFName, unsigned chan = 0, unsigned len = 512);
30  ~Convolver();
31  ///< set the IR file name; runs the analysis ffts
32  void setIRFile(char * inFName, unsigned chan = 0);
33  /// main nextBuffer call does the fft/ifft
34  void nextBuffer(Buffer &outputBuffer) throw (CException);
35 
36 protected:
38 
39  SampleBufferArray mFilterFFTRe; ///< A ring buffer of IR fft buffers
41  SampleBufferArray mInputFFTRe; ///< A list of past input spectra
43  SampleBuffer mSpectrumBufferRe; ///< current summation buffer
45  SampleBuffer mLastOutput; ///< most-recent output
46 
47  void checkBuffers(unsigned newNumBufs); ///< alloc buffers
48  void free_buffers();
49  /// fast complex MAC using non-interleaved complex arrays
51  SampleBuffer rightRe, SampleBuffer rightIm,
52  SampleBuffer outRe, SampleBuffer outIm);
53 };
54 
55 }
56 
57 #endif
sample * SampleBuffer
1-channel buffer data type, vector of (sample)
Definition: CSL_Types.h:194
Convolver(unsigned len=512)
Constructors.
Definition: Convolver.cpp:17
void checkBuffers(unsigned newNumBufs)
alloc buffers
Definition: Convolver.cpp:64
AdditiveInstrument.h – Sum-of-sines synthesis instrument class.
Definition: Accessor.h:17
Effect – mix-in for classes that have unit generators as inputs (like filters).
Definition: CSL_Core.h:466
unsigned mWindowCount
Definition: Convolver.h:37
SampleBuffer mSpectrumBufferIm
Definition: Convolver.h:44
unsigned mFFTSize
Definition: Convolver.h:37
~Convolver()
set the IR file name; runs the analysis ffts
Definition: Convolver.cpp:38
unsigned mChan
Definition: Convolver.h:37
SampleBufferArray mFilterFFTIm
Definition: Convolver.h:40
The Convolver is a CSL Effect.
Definition: Convolver.h:24
SampleBufferArray mInputFFTRe
A list of past input spectra.
Definition: Convolver.h:41
unsigned mFlSize
Definition: Convolver.h:37
static unsigned len
Definition: fft_N.c:39
SampleBuffer mSpectrumBufferRe
current summation buffer
Definition: Convolver.h:43
void nextBuffer(Buffer &outputBuffer)
main nextBuffer call does the fft/ifft
Definition: Convolver.cpp:129
Buffer – the multi-channel sample buffer class (passed around between generators and IO guys)...
Definition: CSL_Core.h:106
SampleBufferArray mFilterFFTRe
A ring buffer of IR fft buffers.
Definition: Convolver.h:39
void free_buffers()
Definition: Convolver.cpp:44
SampleBuffer mLastOutput
most-recent output
Definition: Convolver.h:45
forward declaration
Definition: CSL_Core.h:241
SampleBufferArray mInputFFTIm
Definition: Convolver.h:42
unsigned mNumBufs
Definition: Convolver.h:37
void complex_multiply_accumulate(SampleBuffer leftRe, SampleBuffer leftIm, SampleBuffer rightRe, SampleBuffer rightIm, SampleBuffer outRe, SampleBuffer outIm)
fast complex MAC using non-interleaved complex arrays
Definition: Convolver.cpp:204
Base class of CSL exceptions (written upper-case). Has a string message.
void setIRFile(char *inFName, unsigned chan=0)
Definition: Convolver.cpp:94
SampleBuffer * SampleBufferArray
Multi-channel buffer data type.
Definition: CSL_Types.h:196