CSL 5.2

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

Classes | Namespaces | Macros | Typedefs
Filters.h File Reference
`#include "CSL_Core.h"`

Go to the source code of this file.

## Classes
class | csl::FrequencyAmount
| FrequencyAmount – mix-in class with frequency and amount (BW) control inputs (may be constants or generators). amount (probably 0..1) is a generalised placeholder for bandwidth, resonance or radius, according to filter type or could equally be used as a kind of x,y location in the frequency domain. More...
class | csl::Filter
| Filter: the canonical-form n-pole/m-zero filter class. More...
class | csl::Butter
| Butterworth IIR (2nd order recursive) filter. This operates upon a buffer of frames of amplitude samples by applying the following equation y(n) = a0*x(n) + a1*x(n-1) + a2*x(n-2) - b1*y(n-1) - b2*y(n-2) where x is an amplitude sample. It has constructors that can calculate the coefficients from a given cutoff frequency. More...
class | csl::Formant
| Formant Filter with zeros at +-z and complex conjugate poles at +-omega. setupCoeffs() looks at the member var called normalize; if normalize is true, the filter zeros are placed at z = 1, z = -1, and the coefficients are then normalized to produce a constant unity peak gain. The resulting filter frequency response has a resonance at the given frequency. The closer the poles are to the unit-circle (radius close to one), the narrower the resulting resonance width. More...
class | csl::Notch
| Notch Filter with poles at +-z and complex conjugate zeros at +-omega. More...
class | csl::Allpass
| Allpass Filter with a pole and a zero at equal frequency and straddling the unit circle. Allows all freqs to pass through but messes with phases. Note that the Amount parameter of FrequencyAmount is ignored. More...
class | csl::Moog
| Moog VCF class. More...

## Namespaces
namespace | csl
| AdditiveInstrument.h – Sum-of-sines synthesis instrument class.

## Macros
#define | FILTER_MAX_COEFFICIENTS (16)
| Filters.h – CSL filter classes.
#define | BW_LOW_PASS 0
#define | BW_HIGH_PASS 1
#define | BW_BAND_PASS 2
#define | BW_BAND_STOP 3
#define | DECLARE_FILTER_CONTROLS
| Declare the pointer to freq/bw buffers (if used) and current scale/offset values.
#define | LOAD_FILTER_CONTROLS
| Load the freq/bw-related values at the start.

## Typedefs
typedef int | csl::ButterworthType

## Macro Definition Documentation

#define FILTER_MAX_COEFFICIENTS (16)

Filters.h – CSL filter classes.

The base Filter class can perform the generic filter equation based upon a set of feedback and feedforward coefficients. Subclasses of Filter implement the setupCoeffs method to build these coefficients according to different algorithms. The subclasses here mostly inherit from the FrequencyAmount controllable, which specifies a center frequency and an 'amount' which may variously be resonance, radius, bandwidth etc according to the algorithm.

OK so for example Butter class has a CenterFrequency port and a Bandwidth port, but pull_controls must be calling Controllables to do the pullInput()

Or, a generic filter that can take a multichannel UGen for each of aCoeffs and bCoeffs (i.e. multichannel ports), and other filter classes that wrap this and have Frequency and Bandwidth ports etc. This reduces the calls to setupCoeffs, because they'd actually be part of the nextBuffer instead

The reason is that the Scalable type approach & macros can't be extended to filter otherwise. ALSO, there are no similar macros for Effect; how should this work?

OK, the way he had it working here is filtering in place, i.e. no internal buffer, but if I inherit from Effect, I do have an internal buffer; this means the first thing to do is memcopy the input to the output, then pounce on that; or do the in-place stuff in the Effect port and finally copy to output, say with scale & offset performed there.

See the copyright notice and acknowledgment of authors in the file COPYRIGHT

Definition at line 32 of file Filters.h.

#define BW_LOW_PASS 0

Definition at line 47 of file Filters.h.

Referenced by csl::Butter::setupCoeffs(), testFilters(), testSplitJoin1(), and testSplitJoin2().

#define BW_HIGH_PASS 1

Definition at line 48 of file Filters.h.

Referenced by csl::Butter::setupCoeffs(), testFilters(), testSplitJoin1(), and testSplitJoin2().

#define BW_BAND_PASS 2

Definition at line 49 of file Filters.h.

Referenced by filt_test(), csl::Butter::setupCoeffs(), swept_noise(), testDynamicFilters(), testDynamicVoice(), testFancy_FM(), testFilters(), testMultiTap(), testNDynamicFilters(), testReverb(), testStereoverb(), and csl::VSTIO::VSTIO().

#define BW_BAND_STOP 3

Definition at line 50 of file Filters.h.

Referenced by csl::Butter::setupCoeffs(), and testFilters().

#define DECLARE_FILTER_CONTROLS

Value:
Port * freqPort = mInputs[CSL_FILTER_FREQUENCY]; \
Port * bwPort = mInputs[CSL_FILTER_AMOUNT]

Declare the pointer to freq/bw buffers (if used) and current scale/offset values.

Definition at line 56 of file Filters.h.

Referenced by csl::Filter::nextBuffer(), and csl::Moog::nextBuffer().

#define LOAD_FILTER_CONTROLS

Value:
if (freqPort) Controllable::pullInput(freqPort, numFrames); \
if (bwPort) Controllable::pullInput(bwPort, numFrames)

Load the freq/bw-related values at the start.

Definition at line 62 of file Filters.h.

Referenced by csl::Filter::nextBuffer(), and csl::Moog::nextBuffer().