sst-filters
Filters submodule for the Surge Synthesizer
Namespaces | Classes | Typedefs | Enumerations | Functions | Variables
sst::filters Namespace Reference

DSP code for Surge filters. More...

Namespaces

 CutoffWarp
 This namespace contains an adaptation of the filter found at https://ccrma.stanford.edu/~jatin/ComplexNonlinearities/NLFeedback.html with coefficient calculation from https://webaudio.github.io/Audio-EQ-Cookbook/audio-eq-cookbook.html.
 
 detail
 
 DiodeLadderFilter
 This namespace contains an adaptation of the filter from https://github.com/TheWaveWarden/odin2/blob/master/Source/audio/Filters/DiodeFilter.cpp.
 
 HalfRate
 
 K35Filter
 This namespace contains an adaptation of the filter from https://github.com/TheWaveWarden/odin2/blob/master/Source/audio/Filters/Korg35Filter.cpp.
 
 OBXDFilter
 This namespace contains an adaptation of the filter from https://github.com/reales/OB-Xd/blob/master/Source/Engine/Filter.h.
 
 ResonanceWarp
 This contains an adaptation of the filter found at https://ccrma.stanford.edu/~jatin/ComplexNonlinearities/NLBiquad.html with coefficient calculation from https://webaudio.github.io/Audio-EQ-Cookbook/audio-eq-cookbook.html.
 
 TriPoleFilter
 This filter is an emulation of the "Threeler" VCF by Ian Fritz (https://ijfritz.byethost4.com/Threeler_board_doc.pdf).
 
 utilities
 Utility code needed for Surge filters.
 
 VintageLadder
 This contains various adaptations of the models found at.
 

Classes

class  FilterCoefficientMaker
 Class for creating filter coefficients. More...
 
struct  FilterPlotParameters
 
class  FilterPlotter
 
struct  QuadFilterUnitState
 State for a filter unit. More...
 

Typedefs

typedef __m128(* FilterUnitQFPtr) (QuadFilterUnitState *__restrict, __m128 in)
 Typedef alias for a filter unit processing method. More...
 

Enumerations

enum  FilterType {
  fut_none = 0, fut_lp12, fut_lp24, fut_lpmoog,
  fut_hp12, fut_hp24, fut_bp12, fut_notch12,
  fut_comb_pos, fut_SNH, fut_vintageladder, fut_obxd_2pole_lp,
  fut_obxd_4pole, fut_k35_lp, fut_k35_hp, fut_diode,
  fut_cutoffwarp_lp, fut_cutoffwarp_hp, fut_cutoffwarp_n, fut_cutoffwarp_bp,
  fut_obxd_2pole_hp, fut_obxd_2pole_n, fut_obxd_2pole_bp, fut_bp24,
  fut_notch24, fut_comb_neg, fut_apf, fut_cutoffwarp_ap,
  fut_resonancewarp_lp, fut_resonancewarp_hp, fut_resonancewarp_n, fut_resonancewarp_bp,
  fut_resonancewarp_ap, fut_tripole, num_filter_types
}
 These are the filter types we have to choose from! More...
 
enum  FilterSubType {
  st_Standard = 0, st_Driven = 1, st_Clean = 2, st_Medium = 3,
  st_Notch = 0, st_NotchMild = 1, st_lpmoog_6dB = 0, st_lpmoog_12dB = 1,
  st_lpmoog_18dB = 2, st_lpmoog_24dB = 3, st_diode_6dB = 0, st_diode_12dB = 1,
  st_diode_18dB = 2, st_diode_24dB = 3, st_cutoffwarp_tanh1 = 0, st_cutoffwarp_tanh2 = 1,
  st_cutoffwarp_tanh3 = 2, st_cutoffwarp_tanh4 = 3, st_cutoffwarp_softclip1 = 4, st_cutoffwarp_softclip2 = 5,
  st_cutoffwarp_softclip3 = 6, st_cutoffwarp_softclip4 = 7, st_cutoffwarp_ojd1 = 8, st_cutoffwarp_ojd2 = 9,
  st_cutoffwarp_ojd3 = 10, st_cutoffwarp_ojd4 = 11, st_resonancewarp_tanh1 = 0, st_resonancewarp_tanh2 = 1,
  st_resonancewarp_tanh3 = 2, st_resonancewarp_tanh4 = 3, st_resonancewarp_softclip1 = 4, st_resonancewarp_softclip2 = 5,
  st_resonancewarp_softclip3 = 6, st_resonancewarp_softclip4 = 7, st_tripole_LLL1 = 0, st_tripole_LHL1 = 1,
  st_tripole_HLH1 = 2, st_tripole_HHH1 = 3, st_tripole_LLL2 = 4, st_tripole_LHL2 = 5,
  st_tripole_HLH2 = 6, st_tripole_HHH2 = 7, st_tripole_LLL3 = 8, st_tripole_LHL3 = 9,
  st_tripole_HLH3 = 10, st_tripole_HHH3 = 11
}
 Sub-types for each filter are defined here. More...
 
enum  QFUSubtypeMasks : int32_t { UNMASK_SUBTYPE = (1 << 8) - 1, EXTENDED_COMB = 1 << 9 }
 

Functions

template<typename T >
db_to_linear (T in)
 
float clipscale (float freq, int subtype)
 
float boundFreq (float freq)
 
double Map2PoleResonance (double reso, double freq, int subtype)
 
double Map2PoleResonance_noboost (double reso, double, int subtype)
 
double Map4PoleResonance (double reso, double freq, int subtype)
 
template<typename T >
resoscale (T reso, int subtype)
 
template<typename T >
resoscale4Pole (T reso, int subtype)
 
FilterUnitQFPtr GetQFPtrFilterUnit (FilterType type, FilterSubType subtype)
 Returns a filter unit pointer for a given filter type and sub-type. More...
 
__m128 SVFLP12Aquad (QuadFilterUnitState *__restrict f, __m128 in)
 
__m128 SVFLP24Aquad (QuadFilterUnitState *__restrict f, __m128 in)
 
__m128 SVFHP24Aquad (QuadFilterUnitState *__restrict f, __m128 in)
 
__m128 SVFBP24Aquad (QuadFilterUnitState *__restrict f, __m128 in)
 
__m128 SVFHP12Aquad (QuadFilterUnitState *__restrict f, __m128 in)
 
__m128 SVFBP12Aquad (QuadFilterUnitState *__restrict f, __m128 in)
 
__m128 IIR12Aquad (QuadFilterUnitState *__restrict f, __m128 in)
 
__m128 IIR12Bquad (QuadFilterUnitState *__restrict f, __m128 in)
 
__m128 IIR12WDFquad (QuadFilterUnitState *__restrict f, __m128 in)
 
__m128 IIR12CFCquad (QuadFilterUnitState *__restrict f, __m128 in)
 
__m128 IIR12CFLquad (QuadFilterUnitState *__restrict f, __m128 in)
 
__m128 IIR24CFCquad (QuadFilterUnitState *__restrict f, __m128 in)
 
__m128 IIR24CFLquad (QuadFilterUnitState *__restrict f, __m128 in)
 
__m128 IIR24Bquad (QuadFilterUnitState *__restrict f, __m128 in)
 
template<FilterSubType subtype>
__m128 LPMOOGquad (QuadFilterUnitState *__restrict f, __m128 in)
 
__m128 SNHquad (QuadFilterUnitState *__restrict f, __m128 in)
 
template<int COMB_SIZE>
__m128 COMBquad_SSE2 (QuadFilterUnitState *__restrict f, __m128 in)
 

Variables

constexpr int n_cm_coeffs = 8
 
constexpr float smooth = 0.2f
 
const char filter_type_names [num_filter_types][32]
 
const char filter_menu_names [num_filter_types][32]
 
const char fut_notch_subtypes [2][32]
 
const char fut_comb_subtypes [2][64]
 
const char fut_def_subtypes [3][32]
 
const char fut_ldr_subtypes [4][32]
 
const char fut_vintageladder_subtypes [6][32]
 
const char fut_obxd_2p_subtypes [2][32] = {"Standard", "Pushed"}
 
const char fut_obxd_4p_subtypes [4][32]
 
const char fut_k35_subtypes [5][32]
 
const float fut_k35_saturations [5] = {0.0f, 1.0f, 2.0f, 3.0f, 4.0f}
 
const char fut_nlf_subtypes [4][32]
 
const char fut_nlf_saturators [4][16]
 
const char fut_tripole_subtypes [4][32]
 
const char fut_tripole_output_stage [3][16]
 
const int fut_subcount [num_filter_types]
 The number of sub-types for each filter type. More...
 
constexpr int n_filter_registers = 16
 Max number of registers stored in each filter state. More...
 

Detailed Description

DSP code for Surge filters.

Typedef Documentation

◆ FilterUnitQFPtr

typedef __m128(* FilterUnitQFPtr) (QuadFilterUnitState *__restrict, __m128 in)

Typedef alias for a filter unit processing method.

Enumeration Type Documentation

◆ FilterType

enum FilterType

These are the filter types we have to choose from!

Enumerator
fut_none 

Off.

fut_lp12 

Lowpass - 12 dB.

fut_lp24 

Lowpass - 24 dB.

fut_lpmoog 

Lowpass - Legacy Ladder.

fut_hp12 

Highpass - 12 dB.

fut_hp24 

Highpass - 24 dB.

fut_bp12 

Bandpass - 12 dB.

fut_notch12 

Notch - 12 dB.

fut_comb_pos 

Effect - Comb +.

fut_SNH 

Effect - Sample & Hold.

fut_vintageladder 

Lowpass - Vintage Ladder.

fut_obxd_2pole_lp 

Lowpass - OB-Xd 12 dB.

fut_obxd_4pole 

Lowpass - OB-Xd 24 dB.

fut_k35_lp 

Lowpass - K35.

fut_k35_hp 

Highpass - K35.

fut_diode 

Lowpass - Diode Ladder.

fut_cutoffwarp_lp 

Lowpass - Cutoff Warp.

fut_cutoffwarp_hp 

Higghpass - Cutoff Warp.

fut_cutoffwarp_n 

Notch - Cutoff Warp.

fut_cutoffwarp_bp 

Bandpass - Cutoff Warp.

fut_obxd_2pole_hp 

Highpass - OB-Xd 12 dB.

fut_obxd_2pole_n 

Notch - OB-Xd 12 dB.

fut_obxd_2pole_bp 

Bandpass - OB-Xd 12 dB.

fut_bp24 

Bandpass - 24 dB.

fut_notch24 

Notch - 24 dB.

fut_comb_neg 

Effect - Comb -.

fut_apf 

Effect - Allpass.

fut_cutoffwarp_ap 

Effect - Cutoff Warp Allpass.

fut_resonancewarp_lp 

Lowpass - Resonance Warp.

fut_resonancewarp_hp 

Highpass - Resonance Warp.

fut_resonancewarp_n 

Notch - Resonance Warp.

fut_resonancewarp_bp 

Bandpass - Resonance Warp.

fut_resonancewarp_ap 

Effect - Resonance Warp Allpass.

fut_tripole 

Multi - Tri-pole.

num_filter_types 

◆ FilterSubType

Sub-types for each filter are defined here.

Enumerator
st_Standard 

Standard (SVF)

st_Driven 

Driven.

st_Clean 

Clean.

st_Medium 

(Unused)

st_Notch 

Standard.

st_NotchMild 

Mild.

st_lpmoog_6dB 

Legacy Ladder - 6 dB.

st_lpmoog_12dB 

Legacy Ladder - 12 dB.

st_lpmoog_18dB 

Legacy Ladder - 18 dB.

st_lpmoog_24dB 

Legacy Ladder - 24 dB.

st_diode_6dB 

Diode Ladder - 6 dB.

st_diode_12dB 

Diode Ladder - 12 dB.

st_diode_18dB 

Diode Ladder - 18 dB.

st_diode_24dB 

Diode Ladder - 24 dB.

st_cutoffwarp_tanh1 

Cutoff Warp - 1 Stage tanh.

st_cutoffwarp_tanh2 

Cutoff Warp - 2 Stages tanh.

st_cutoffwarp_tanh3 

Cutoff Warp - 3 Stages tanh.

st_cutoffwarp_tanh4 

Cutoff Warp - 4 Stages tanh.

st_cutoffwarp_softclip1 

Cutoff Warp - 1 Stage Soft Clip.

st_cutoffwarp_softclip2 

Cutoff Warp - 2 Stages Soft Clip.

st_cutoffwarp_softclip3 

Cutoff Warp - 3 Stages Soft Clip.

st_cutoffwarp_softclip4 

Cutoff Warp - 4 Stages Soft Clip.

st_cutoffwarp_ojd1 

Cutoff Warp - 1 Stage OJD.

st_cutoffwarp_ojd2 

Cutoff Warp - 2 Stages OJD.

st_cutoffwarp_ojd3 

Cutoff Warp - 3 Stages OJD.

st_cutoffwarp_ojd4 

Cutoff Warp - 4 Stages OJD.

st_resonancewarp_tanh1 

Resonance Warp - 1 Stage tanh.

st_resonancewarp_tanh2 

Resonance Warp - 2 Stages tanh.

st_resonancewarp_tanh3 

Resonance Warp - 3 Stages tanh.

st_resonancewarp_tanh4 

Resonance Warp - 4 Stages tanh.

st_resonancewarp_softclip1 

Resonance Warp - 1 Stage Soft Clip.

st_resonancewarp_softclip2 

Resonance Warp - 2 Stages Soft Clip.

st_resonancewarp_softclip3 

Resonance Warp - 3 Stages Soft Clip.

st_resonancewarp_softclip4 

Resonance Warp - 4 Stages Soft Clip.

st_tripole_LLL1 

Low -> Low -> Low, first.

st_tripole_LHL1 

Low -> High -> Low, first.

st_tripole_HLH1 

High -> Low -> High, first.

st_tripole_HHH1 

High -> High -> High, first.

st_tripole_LLL2 

Low -> Low -> Low, second.

st_tripole_LHL2 

Low -> High -> Low, second.

st_tripole_HLH2 

High -> Low -> High, second.

st_tripole_HHH2 

High -> High -> High, second.

st_tripole_LLL3 

Low -> Low -> Low, third.

st_tripole_LHL3 

Low -> High -> Low, third.

st_tripole_HLH3 

High -> Low -> High, third.

st_tripole_HHH3 

High -> High -> High, third.

◆ QFUSubtypeMasks

enum QFUSubtypeMasks : int32_t
Enumerator
UNMASK_SUBTYPE 
EXTENDED_COMB 

Function Documentation

◆ db_to_linear()

T sst::filters::db_to_linear ( in)

Referenced by clipscale().

◆ clipscale()

float sst::filters::clipscale ( float  freq,
int  subtype 
)

References db_to_linear(), st_Clean, and st_Driven.

◆ boundFreq()

float sst::filters::boundFreq ( float  freq)

◆ Map2PoleResonance()

double sst::filters::Map2PoleResonance ( double  reso,
double  freq,
int  subtype 
)

◆ Map2PoleResonance_noboost()

double sst::filters::Map2PoleResonance_noboost ( double  reso,
double  ,
int  subtype 
)

◆ Map4PoleResonance()

double sst::filters::Map4PoleResonance ( double  reso,
double  freq,
int  subtype 
)

◆ resoscale()

T sst::filters::resoscale ( reso,
int  subtype 
)

References st_Clean, st_Driven, and st_Medium.

◆ resoscale4Pole()

T sst::filters::resoscale4Pole ( reso,
int  subtype 
)

References st_Clean, st_Driven, and st_Medium.

◆ GetQFPtrFilterUnit()

FilterUnitQFPtr GetQFPtrFilterUnit ( FilterType  type,
FilterSubType  subtype 
)

Returns a filter unit pointer for a given filter type and sub-type.

References EXTENDED_COMB, fut_apf, fut_bp12, fut_bp24, fut_comb_neg, fut_comb_pos, fut_cutoffwarp_ap, fut_cutoffwarp_bp, fut_cutoffwarp_hp, fut_cutoffwarp_lp, fut_cutoffwarp_n, fut_diode, fut_hp12, fut_hp24, fut_k35_hp, fut_k35_lp, fut_lp12, fut_lp24, fut_lpmoog, fut_none, fut_notch12, fut_notch24, fut_obxd_2pole_bp, fut_obxd_2pole_hp, fut_obxd_2pole_lp, fut_obxd_2pole_n, fut_obxd_4pole, fut_resonancewarp_ap, fut_resonancewarp_bp, fut_resonancewarp_hp, fut_resonancewarp_lp, fut_resonancewarp_n, fut_SNH, fut_tripole, fut_vintageladder, IIR12Bquad(), IIR12CFCquad(), IIR24Bquad(), IIR24CFCquad(), num_filter_types, sst::filters::VintageLadder::RK::process(), sst::filters::VintageLadder::Huov::process(), sst::filters::OBXDFilter::process_2_pole(), sst::filters::OBXDFilter::process_4_pole(), sst::filters::K35Filter::process_hp(), sst::filters::K35Filter::process_lp(), SNHquad(), st_Clean, st_cutoffwarp_ojd1, st_cutoffwarp_ojd2, st_cutoffwarp_ojd3, st_cutoffwarp_ojd4, st_cutoffwarp_softclip1, st_cutoffwarp_softclip2, st_cutoffwarp_softclip3, st_cutoffwarp_softclip4, st_cutoffwarp_tanh1, st_cutoffwarp_tanh2, st_cutoffwarp_tanh3, st_cutoffwarp_tanh4, st_diode_12dB, st_diode_18dB, st_diode_24dB, st_diode_6dB, st_Driven, st_lpmoog_12dB, st_lpmoog_18dB, st_lpmoog_24dB, st_lpmoog_6dB, st_resonancewarp_softclip1, st_resonancewarp_softclip2, st_resonancewarp_softclip3, st_resonancewarp_softclip4, st_resonancewarp_tanh1, st_resonancewarp_tanh2, st_resonancewarp_tanh3, st_resonancewarp_tanh4, st_Standard, st_tripole_HHH1, st_tripole_HHH2, st_tripole_HHH3, st_tripole_HLH1, st_tripole_HLH2, st_tripole_HLH3, st_tripole_LHL1, st_tripole_LHL2, st_tripole_LHL3, st_tripole_LLL1, st_tripole_LLL2, st_tripole_LLL3, SVFBP12Aquad(), SVFBP24Aquad(), SVFHP12Aquad(), SVFHP24Aquad(), SVFLP12Aquad(), and SVFLP24Aquad().

◆ SVFLP12Aquad()

__m128 sst::filters::SVFLP12Aquad ( QuadFilterUnitState *__restrict  f,
__m128  in 
)

Referenced by GetQFPtrFilterUnit().

◆ SVFLP24Aquad()

__m128 sst::filters::SVFLP24Aquad ( QuadFilterUnitState *__restrict  f,
__m128  in 
)

Referenced by GetQFPtrFilterUnit().

◆ SVFHP24Aquad()

__m128 sst::filters::SVFHP24Aquad ( QuadFilterUnitState *__restrict  f,
__m128  in 
)

Referenced by GetQFPtrFilterUnit().

◆ SVFBP24Aquad()

__m128 sst::filters::SVFBP24Aquad ( QuadFilterUnitState *__restrict  f,
__m128  in 
)

Referenced by GetQFPtrFilterUnit().

◆ SVFHP12Aquad()

__m128 sst::filters::SVFHP12Aquad ( QuadFilterUnitState *__restrict  f,
__m128  in 
)

Referenced by GetQFPtrFilterUnit().

◆ SVFBP12Aquad()

__m128 sst::filters::SVFBP12Aquad ( QuadFilterUnitState *__restrict  f,
__m128  in 
)

Referenced by GetQFPtrFilterUnit().

◆ IIR12Aquad()

__m128 sst::filters::IIR12Aquad ( QuadFilterUnitState *__restrict  f,
__m128  in 
)

◆ IIR12Bquad()

__m128 sst::filters::IIR12Bquad ( QuadFilterUnitState *__restrict  f,
__m128  in 
)

Referenced by GetQFPtrFilterUnit().

◆ IIR12WDFquad()

__m128 sst::filters::IIR12WDFquad ( QuadFilterUnitState *__restrict  f,
__m128  in 
)

◆ IIR12CFCquad()

__m128 sst::filters::IIR12CFCquad ( QuadFilterUnitState *__restrict  f,
__m128  in 
)

◆ IIR12CFLquad()

__m128 sst::filters::IIR12CFLquad ( QuadFilterUnitState *__restrict  f,
__m128  in 
)

◆ IIR24CFCquad()

__m128 sst::filters::IIR24CFCquad ( QuadFilterUnitState *__restrict  f,
__m128  in 
)

◆ IIR24CFLquad()

__m128 sst::filters::IIR24CFLquad ( QuadFilterUnitState *__restrict  f,
__m128  in 
)

◆ IIR24Bquad()

__m128 sst::filters::IIR24Bquad ( QuadFilterUnitState *__restrict  f,
__m128  in 
)

Referenced by GetQFPtrFilterUnit().

◆ LPMOOGquad()

__m128 sst::filters::LPMOOGquad ( QuadFilterUnitState *__restrict  f,
__m128  in 
)

◆ SNHquad()

__m128 sst::filters::SNHquad ( QuadFilterUnitState *__restrict  f,
__m128  in 
)

◆ COMBquad_SSE2()

__m128 sst::filters::COMBquad_SSE2 ( QuadFilterUnitState *__restrict  f,
__m128  in 
)

Variable Documentation

◆ n_cm_coeffs

constexpr int n_cm_coeffs = 8
constexpr

◆ smooth

constexpr float smooth = 0.2f
constexpr

◆ filter_type_names

const char filter_type_names[num_filter_types][32]

◆ filter_menu_names

const char filter_menu_names[num_filter_types][32]

◆ fut_notch_subtypes

const char fut_notch_subtypes[2][32]
Initial value:
= {
"Standard",
"Mild",
}

◆ fut_comb_subtypes

const char fut_comb_subtypes[2][64]
Initial value:
= {
"50% Wet",
"100% Wet",
}

◆ fut_def_subtypes

const char fut_def_subtypes[3][32]
Initial value:
= {
"Standard",
"Driven",
"Clean",
}

◆ fut_ldr_subtypes

const char fut_ldr_subtypes[4][32]
Initial value:
= {
"6 dB",
"12 dB",
"18 dB",
"24 dB",
}

◆ fut_vintageladder_subtypes

const char fut_vintageladder_subtypes[6][32]
Initial value:
= {
"Type 1",
"Type 1 Compensated",
"Type 2",
"Type 2 Compensated",
}

◆ fut_obxd_2p_subtypes

const char fut_obxd_2p_subtypes[2][32] = {"Standard", "Pushed"}

◆ fut_obxd_4p_subtypes

const char fut_obxd_4p_subtypes[4][32]
Initial value:
= {
"6 dB",
"12 dB",
"18 dB",
"24 dB",
}

◆ fut_k35_subtypes

const char fut_k35_subtypes[5][32]
Initial value:
= {"No Saturation", "Mild Saturation", "Moderate Saturation",
"Heavy Saturation", "Extreme Saturation"}

◆ fut_k35_saturations

const float fut_k35_saturations[5] = {0.0f, 1.0f, 2.0f, 3.0f, 4.0f}

◆ fut_nlf_subtypes

const char fut_nlf_subtypes[4][32]
Initial value:
= {
"1 Stage",
"2 Stages",
"3 Stages",
"4 Stages",
}

◆ fut_nlf_saturators

const char fut_nlf_saturators[4][16]
Initial value:
= {
"tanh",
"Soft Clip",
"OJD",
"Sine",
}

◆ fut_tripole_subtypes

const char fut_tripole_subtypes[4][32]
Initial value:
= {
"Low -> Low -> Low",
"Low -> High -> Low",
"High -> Low -> High",
"High -> High -> High",
}

◆ fut_tripole_output_stage

const char fut_tripole_output_stage[3][16]
Initial value:
{
"First",
"Second",
"Third",
}

◆ fut_subcount

const int fut_subcount[num_filter_types]

The number of sub-types for each filter type.

◆ n_filter_registers

constexpr int n_filter_registers = 16
constexpr

Max number of registers stored in each filter state.