sfFDN
Loading...
Searching...
No Matches
Audio Processors Options

Structs for configuring audio processors used in the FDN. More...

Classes

struct  sfFDN::ScalarFeedbackMatrixOptions
 Options for configuring a scalar feedback matrix. More...
 
struct  sfFDN::CascadedFeedbackMatrixOptions
 Information structure for constructing a cascaded feedback matrix (also known as a filter feedback matrix). More...
 
struct  sfFDN::ModulationOptions
 Options for configuring signal modulation. More...
 
struct  sfFDN::TimeVaryingFeedbackMatrixOptions
 Options for configuring a TimeVaryingFeedbackMatrix. More...
 
struct  sfFDN::ParallelGainsOptions
 Options for configuring parallel gain processing. More...
 
struct  sfFDN::DelayOptions
 Options for configuring delays. More...
 
struct  sfFDN::DelayBankOptions
 Options for configuring a delay bank. More...
 
struct  sfFDN::DelayBankTimeVaryingOptions
 Options for configuring a time-varying delay bank. More...
 
struct  sfFDN::FilterCoefficients
 Coefficients for a digital IIR filter. More...
 
struct  sfFDN::AllpassFilterOptions
 Options for configuring an allpass filter. More...
 
struct  sfFDN::SparseFirOptions
 Options for configuring a sparse FIR filter. More...
 
struct  sfFDN::CascadedBiquadsOptions
 Options for configuring cascaded biquad filters. More...
 
struct  sfFDN::FirOptions
 Options for configuring a FIR filter. More...
 
struct  sfFDN::MultichannelFirOptions
 
struct  sfFDN::SchroederAllpassSectionOptions
 Options for configuring a Schroeder allpass section consisting of N Schroeder allpass in series or in parallel. More...
 
struct  sfFDN::MultichannelSchroederAllpassSectionOptions
 Options for configuring a multichannel bank of Schroeder allpass sections. More...
 
struct  sfFDN::TimeVaryingSchroederAllpassSectionOptions
 Options for configuring an energy-preserving time-varying Schroeder allpass section. More...
 
struct  sfFDN::MultichannelTimeVaryingSchroederAllpassSectionOptions
 Options for configuring a multichannel bank of time-varying Schroeder allpass sections. More...
 
struct  sfFDN::DattorroDelayOptions
 Options for configuring a Dattorro delay-line effect. More...
 
struct  sfFDN::MultichannelDattorroDelayOptions
 Options for configuring a multichannel bank of Dattorro delay-line effects. More...
 
struct  sfFDN::ControllableFullWaveRectifierOptions
 Options for configuring a controllable full-wave rectifier. More...
 
struct  sfFDN::MultichannelControllableFullWaveRectifierOptions
 Options for configuring a multichannel bank of controllable full-wave rectifiers. More...
 
struct  sfFDN::SignalDependentFractionalDelayOptions
 Options for configuring a signal-dependent fractional delay. More...
 
struct  sfFDN::MultichannelSignalDependentFractionalDelayOptions
 Options for configuring a multichannel bank of signal-dependent fractional delays. More...
 
struct  sfFDN::RingModulatorOptions
 Options for configuring a ring modulator. More...
 
struct  sfFDN::MultichannelRingModulatorOptions
 Options for configuring a multichannel bank of ring modulators. More...
 
struct  sfFDN::HomogenousFilterOptions
 Options for configuring a homogenous filter. More...
 
struct  sfFDN::TwoBandFilterOptions
 Options for configuring a two-band filter. More...
 
struct  sfFDN::ThreeBandFilterOptions
 Options for configuring a three-band filter. More...
 
struct  sfFDN::TenBandFilterOptions
 Options for configuring a ten-band filter. More...
 
struct  sfFDN::AttenuationFilterBankOptions
 Options for configuring an attenuation filter bank. More...
 
struct  sfFDN::GraphicEQOptions
 Options for configuring a graphic equalizer. More...
 

Typedefs

using sfFDN::attenuation_filter_variant_t
 Variant type for holding different attenuation filter options.
 
using sfFDN::feedback_matrix_variant_t
 Variant type for holding different feedback matrix options.
 
using sfFDN::single_channel_processor_variant_t
 Variant type for holding different single-channel processor options.
 
using sfFDN::multi_channel_processor_variant_t
 Variant type for holding different multi-channel processor options.
 

Enumerations

enum class  sfFDN::ScalarMatrixType : uint8_t {
  ScalarMatrixType::Identity = 0 , ScalarMatrixType::Random = 1 , ScalarMatrixType::Householder = 2 , ScalarMatrixType::RandomHouseholder = 3 ,
  ScalarMatrixType::Hadamard = 4 , ScalarMatrixType::Circulant = 5 , ScalarMatrixType::Allpass = 6 , ScalarMatrixType::NestedAllpass = 7 ,
  ScalarMatrixType::VariableDiffusion = 8 , Count = 9
}
 Represents the type of a scalar matrix. More...
 
enum class  sfFDN::DelayInterpolationType : uint8_t {
  DelayInterpolationType::None = 0 , DelayInterpolationType::Linear = 1 , DelayInterpolationType::Allpass = 2 , DelayInterpolationType::Lagrange = 3 ,
  Count = 4
}
 Types of interpolation for fractional delay lengths. More...
 
enum class  sfFDN::DelayLengthType : uint8_t {
  DelayLengthType::Random = 0 , DelayLengthType::Gaussian = 1 , DelayLengthType::Primes = 2 , DelayLengthType::Uniform = 3 ,
  DelayLengthType::PrimePower = 4 , DelayLengthType::SteamAudio = 5 , Count = 6
}
 Types of delay length distributions. More...
 
enum class  sfFDN::ParallelGainsMode : uint8_t { ParallelGainsMode::Split , ParallelGainsMode::Merge , ParallelGainsMode::Parallel }
 Enumeration for parallel gain processing modes. More...
 
enum class  sfFDN::TimeVaryingMatrixMode : uint8_t { TimeVaryingMatrixMode::Hadamard = 0 , TimeVaryingMatrixMode::RealSchur = 1 , TimeVaryingMatrixMode::Count = 2 }
 Construction modes for a TimeVaryingFeedbackMatrix. More...
 
enum class  sfFDN::DattorroEffectType : uint8_t {
  DattorroEffectType::Vibrato , DattorroEffectType::Flanger , DattorroEffectType::WhiteChorus , DattorroEffectType::Doubling ,
  DattorroEffectType::Echo
}
 Classic delay-line effects, as described in Table 1 of Jon Dattorro, "Effect Design Part 2: Delay-Line Modulation and Chorus", J. More...
 

Detailed Description

Structs for configuring audio processors used in the FDN.


Class Documentation

◆ sfFDN::ScalarFeedbackMatrixOptions

struct sfFDN::ScalarFeedbackMatrixOptions

Options for configuring a scalar feedback matrix.

Can be use to construct a ScalarFeedbackMatrix.

Class Members
optional< float > arg {std::nullopt} Optional argument for certain matrix types. For example, for the VariableDiffusion type, this could represent.
optional< vector< float > > custom_matrix {std::nullopt} Optional custom matrix values in row-major order: custom_matrix[row * matrix_size + column] is A[row, column], mapping source/input columns to destination/output rows (y = A*x). The size of the vector must be matrix_size*matrix_size. If this is set, type is ignored.
uint32_t matrix_size {0} Size of the feedback matrix.
uint32_t rng_seed {0} Optional. Seed for random number generation when type is Random or RandomHouseholder.
ScalarMatrixType type {ScalarMatrixType::Random} Type of the feedback matrix.

◆ sfFDN::CascadedFeedbackMatrixOptions

struct sfFDN::CascadedFeedbackMatrixOptions

Information structure for constructing a cascaded feedback matrix (also known as a filter feedback matrix).

A cascaded feedback matrix is composed of multiple stages, where each stage consists of a scalar feedback matrix followed by a bank of delay lines.

Can be used to construct a FilterFeedbackMatrix.

Class Members
float gain_per_samples {1.f} Gain per sample.
uint32_t matrix_size {0} Size of the feedback matrix.
float sparsity {1.f} Sparsity level (>= 1).

A value of 1 corresponds to a fully dense matrix, while higher values correspond to sparser matrices.

uint32_t stage_count {0} Number of stages.
ScalarMatrixType type Type of the feedback matrix.

The same type is used for all stages.

◆ sfFDN::ModulationOptions

struct sfFDN::ModulationOptions

Options for configuring signal modulation.

Class Members
float amplitude {0.f} For TimeVaryingFeedbackMatrix, normalized peak angular deviation with |amplitude| <= 1.

It follows the AES paper's normalized μ_A convention and is multiplied by π exactly once internally: amplitude = 0.7 means 0.7π, approximately 2.2 radians, not 0.7 radians. The JASA paper instead expresses μ_A in radians, with μ_A <= π.

float frequency {0.f} Finite LFO frequency in cycles per sample, normalized by the sample rate.

For example, 1 Hz at 48 kHz is 1.0f / 48000.0f.

float initial_phase {0.f} Finite initial phase of the modulation, normalized to [0, 1].

◆ sfFDN::TimeVaryingFeedbackMatrixOptions

struct sfFDN::TimeVaryingFeedbackMatrixOptions

Options for configuring a TimeVaryingFeedbackMatrix.

Supply either no modulation configurations to disable modulation, or exactly one configuration for each 2x2 rotation block (matrix_size / 2). matrix_size must be even; Hadamard mode additionally requires a power of two.

Class Members
uint32_t matrix_size {0} Dimension of the square feedback matrix.

Must be even and at least two.

TimeVaryingMatrixMode mode {TimeVaryingMatrixMode::Hadamard} Construction mode for the orthogonal matrix.
uint32_t rng_seed {0} Seed for the RealSchur random orthogonal basis.

In RealSchur mode, zero selects a fixed seed so configurations are reproducible; Hadamard mode ignores it.

vector< ModulationOptions > time_varying_config One LFO configuration per rotation block, or empty to disable modulation.

◆ sfFDN::ParallelGainsOptions

struct sfFDN::ParallelGainsOptions

Options for configuring parallel gain processing.

Class Members
vector< float > gains Gain values for each channel.

The size of the vector determines the number of channels.

ParallelGainsMode mode {ParallelGainsMode::Split} Mode of parallel gain processing.
vector< ModulationOptions > time_varying_config Optional time-varying modulation configuration for each channel.

The size of the vector must match the size of gains if provided.

◆ sfFDN::DelayOptions

struct sfFDN::DelayOptions

Options for configuring delays.

Class Members
float delay {256.f}
DelayInterpolationType interp_type
optional< ModulationOptions > lfo_config
uint32_t max_delay {512}

◆ sfFDN::DelayBankOptions

struct sfFDN::DelayBankOptions

Options for configuring a delay bank.

Class Members
uint32_t block_size {kDefaultBlockSize}
vector< float > delays
DelayInterpolationType interpolation_type

◆ sfFDN::DelayBankTimeVaryingOptions

struct sfFDN::DelayBankTimeVaryingOptions

Options for configuring a time-varying delay bank.

Class Members
vector< float > delays
DelayInterpolationType interpolation_type
uint32_t max_delay {0}
vector< ModulationOptions > time_varying_config

◆ sfFDN::AllpassFilterOptions

struct sfFDN::AllpassFilterOptions

Options for configuring an allpass filter.

Class Members
float coeff {0.f} The coefficient for the allpass filter.

◆ sfFDN::SparseFirOptions

struct sfFDN::SparseFirOptions

Options for configuring a sparse FIR filter.

Class Members
vector< pair< uint32_t, float > > coeffs

◆ sfFDN::CascadedBiquadsOptions

struct sfFDN::CascadedBiquadsOptions

Options for configuring cascaded biquad filters.

Class Members
vector< FilterCoefficients > coeffs

◆ sfFDN::FirOptions

struct sfFDN::FirOptions

Options for configuring a FIR filter.

Class Members
vector< float > coeffs {1.f}

◆ sfFDN::MultichannelFirOptions

struct sfFDN::MultichannelFirOptions
Class Members
vector< vector< float > > coeffs

◆ sfFDN::SchroederAllpassSectionOptions

struct sfFDN::SchroederAllpassSectionOptions

Options for configuring a Schroeder allpass section consisting of N Schroeder allpass in series or in parallel.

Class Members
vector< float > delays
vector< float > gains
bool parallel {false}

◆ sfFDN::MultichannelSchroederAllpassSectionOptions

struct sfFDN::MultichannelSchroederAllpassSectionOptions

Options for configuring a multichannel bank of Schroeder allpass sections.

Each section processes one channel of audio.

Class Members
vector< SchroederAllpassSectionOptions > sections

◆ sfFDN::TimeVaryingSchroederAllpassSectionOptions

struct sfFDN::TimeVaryingSchroederAllpassSectionOptions

Options for configuring an energy-preserving time-varying Schroeder allpass section.

Each stage uses a fixed integer delay and modulates its gain coefficient. time_varying_config must contain one non-zero modulation entry per stage. The complete gain range must remain strictly inside (-1, 1).

Class Members
vector< float > delays Fixed delay values in samples.

Every value must be a positive integer.

vector< float > gains Base gain values.

The size must match delays.

bool parallel {false} If true, process stages in parallel.

Otherwise, process them in series.

vector< ModulationOptions > time_varying_config Gain modulation per stage.

amplitude is the non-zero peak gain deviation.

◆ sfFDN::MultichannelTimeVaryingSchroederAllpassSectionOptions

struct sfFDN::MultichannelTimeVaryingSchroederAllpassSectionOptions

Options for configuring a multichannel bank of time-varying Schroeder allpass sections.

Class Members
vector< TimeVaryingSchroederAllpassSectionOptions > sections

◆ sfFDN::DattorroDelayOptions

struct sfFDN::DattorroDelayOptions

Options for configuring a Dattorro delay-line effect.

blend, feedforward and feedback are the three knobs of the effect. See DattorroDelay for the topology and MakeDattorroDelayOptions() for the settings of the classic effects.

Collaboration diagram for sfFDN::DattorroDelayOptions:
[legend]
Class Members
float blend {0.7071f}
DelayOptions delay_config Configuration of the delay line.

delay is the nominal delay, which sets the position of the fixed feedback tap and the center of the modulated feedforward tap. lfo_config, if present, modulates the feedforward tap only.

Note
The default interpolation type suits a static delay. DelayInterpolationType::Linear is the cheaper choice for a modulated insert effect and DelayInterpolationType::Allpass the correct one inside a feedback loop; see DattorroDelay for why.
float feedback {0.7071f}
float feedforward {1.f}

◆ sfFDN::MultichannelDattorroDelayOptions

struct sfFDN::MultichannelDattorroDelayOptions

Options for configuring a multichannel bank of Dattorro delay-line effects.

Each entry processes one channel of audio.

See MakeMultichannelDattorroDelayOptions() for a decorrelated preset, and MakeMultichannelDattorroDelay() to build the processor.

Class Members
vector< DattorroDelayOptions > delays

◆ sfFDN::ControllableFullWaveRectifierOptions

struct sfFDN::ControllableFullWaveRectifierOptions

Options for configuring a controllable full-wave rectifier.

Implements equation (3) of G. Dal Santo, X. Pi, K. Prawda, S. J. Schlecht and V. Välimäki, "Shimmer Reverberation with Nonlinear Feedback Delay Networks", DAFx26.

Class Members
float alpha {1.f} Distortion amount, in [0, 1].

Zero passes the input through unchanged, one is a full-wave rectifier, and one half is a half-wave rectifier.

bool antialiasing {true} If true, approximate the rectifier with first-order antiderivative antialiasing, equation (4) of the paper.

This attenuates the aliased components that fold back from the even harmonics.

bool dc_block {true} If true, follow the rectifier with a dc blocker with energy compensation, equations (7) and (8) of the paper.

The rectifier produces a dc component that would otherwise accumulate in a feedback loop.

float sample_rate {static_cast<float>(kDefaultSampleRate)} Sample rate in Hz.

Only used to set the time constants of the dc blocker, so it is irrelevant when dc_block is false.

◆ sfFDN::MultichannelControllableFullWaveRectifierOptions

struct sfFDN::MultichannelControllableFullWaveRectifierOptions

Options for configuring a multichannel bank of controllable full-wave rectifiers.

Each entry processes one channel of audio, and a std::nullopt entry leaves its channel unprocessed.

Class Members
vector< optional< ControllableFullWaveRectifierOptions > > channels

◆ sfFDN::SignalDependentFractionalDelayOptions

struct sfFDN::SignalDependentFractionalDelayOptions

Options for configuring a signal-dependent fractional delay.

Implements the filter of Fig. 5 of the DAFx26 shimmer paper, after V. Välimäki, T. Tolonen and M. Karjalainen, "Signal-dependent nonlinearities for physical models using time-varying fractional delay filters", ICMC 1998.

Class Members
float d {1.f} Interpolation weight, in [0, 1].

The positive half-wave component is delayed by 1 + d samples and the negative one by 1 - d samples, so zero is a plain one-sample delay and larger values distort the waveform more strongly around its zero crossings.

◆ sfFDN::MultichannelSignalDependentFractionalDelayOptions

struct sfFDN::MultichannelSignalDependentFractionalDelayOptions

Options for configuring a multichannel bank of signal-dependent fractional delays.

Each entry processes one channel of audio, and a std::nullopt entry leaves its channel unprocessed.

Class Members
vector< optional< SignalDependentFractionalDelayOptions > > channels

◆ sfFDN::RingModulatorOptions

struct sfFDN::RingModulatorOptions

Options for configuring a ring modulator.

Implements equation (5) of the DAFx26 shimmer paper.

Note
Unlike ModulationOptions::amplitude, amplitude here is a plain linear gain and is never multiplied by pi.
Class Members
float amplitude {std::numbers::sqrt2_v<float>} Linear gain applied to the modulating sinusoid.

The default of sqrt(2) compensates for the average power of a unit-amplitude sinusoid and makes the operation approximately energy preserving. Lower values are safer inside a strongly recirculating feedback loop.

float frequency {0.f} Modulation frequency in cycles per sample, normalized by the sample rate.

For example, 100 Hz at 96 kHz is 100.0f / 96000.0f. Must be finite and non-negative.

float initial_phase {0.f} Initial phase of the modulating sinusoid, normalized to [0, 1].

◆ sfFDN::MultichannelRingModulatorOptions

struct sfFDN::MultichannelRingModulatorOptions

Options for configuring a multichannel bank of ring modulators.

Each entry processes one channel of audio, and a std::nullopt entry leaves its channel unprocessed.

Class Members
vector< optional< RingModulatorOptions > > channels

◆ sfFDN::HomogenousFilterOptions

struct sfFDN::HomogenousFilterOptions

Options for configuring a homogenous filter.

The homogenous filter has the same attenuation characteristics across all frequencies.

Class Members
float delay {1.f}
float sample_rate = kDefaultSampleRate
float t60 = 1.f

◆ sfFDN::TwoBandFilterOptions

struct sfFDN::TwoBandFilterOptions

Options for configuring a two-band filter.

The two-band filter allows for specifying a target t60 at DC and Nyquist. The filter is implemented as a one-pole filter based on [1].

[1] Jot, J. M., & Chaigne, A. (1991). Digital delay networks for designing artificial reverberators (pp. 1-12). Presented at the Proc. Audio Eng. Soc. Conv., Paris, France.

Class Members
float delay {0.f}
float sample_rate = kDefaultSampleRate
array< float, 2 > t60s {1.f, 0.5f} Target T60 values for the low and high bands.

◆ sfFDN::ThreeBandFilterOptions

struct sfFDN::ThreeBandFilterOptions

Options for configuring a three-band filter.

The three-band filter is composed of a 2nd order low shelf and a 2nd order high shelf filter in series and allows control of the T60 over three bands with the first band being [0, freq[0]], the second band [freq[0], freq[1]], and the third band [freq[1], Nyquist].

Class Members
float delay {0.f}
array< float, 2 > freqs {800.f, 8000.f}
float q = 1.f / std::numbers::sqrt2_v<float>
float sample_rate = kDefaultSampleRate
array< float, 3 > t60s {1.f, 0.5f, 0.25f}

◆ sfFDN::TenBandFilterOptions

struct sfFDN::TenBandFilterOptions

Options for configuring a ten-band filter.

The ten-band filter allows control of the T60 over ten bands. The bands of the filter are set to {32, 64, 125, 250, 500, 1k, 2k, 4k, 8k, 16k} Hz.

The filter is implemented as a cascade of second-order biquad filters following the design method described in [1]. [1] V. Välimäki, K. Prawda, and S. J. Schlecht, "Two-Stage Attenuation Filter for Artificial Reverberation," IEEE Signal Processing Letters, vol. 31, pp. 391–395, 2024, doi: 10.1109/LSP.2024.3352510.

Class Members
float delay {0.f} Delay in samples for the delay line preceding the filter. If set to <= 0, it will be updated automatically when accessed from CreateFDNFromConfig()
float sample_rate = kDefaultSampleRate Sample rate in Hz. This is used to calculate the filter coefficients based on the specified T60 values.
float shelf_cutoff = 8000.f Cutoff frequency for the shelf filters.
array< float, 10 > t60s = {1.f, 0.9f, 0.8f, 0.7f, 0.6f, 0.5f, 0.4f, 0.3f, 0.2f, 0.1f} Target T60 values for the ten bands.

◆ sfFDN::AttenuationFilterBankOptions

struct sfFDN::AttenuationFilterBankOptions

Options for configuring an attenuation filter bank.

Class Members
vector< attenuation_filter_variant_t > filter_configs Vector of attenuation filter configurations.

◆ sfFDN::GraphicEQOptions

struct sfFDN::GraphicEQOptions

Options for configuring a graphic equalizer.

Class Members
array< float, 10 > freqs {} Frequency values for the ten bands in Hz.
array< float, 10 > gains_db {} Target gains for the ten bands in dB.
float sample_rate = kDefaultSampleRate Sample rate in Hz.

Typedef Documentation

◆ attenuation_filter_variant_t

Initial value:
std::variant<HomogenousFilterOptions, TwoBandFilterOptions, ThreeBandFilterOptions, TenBandFilterOptions>

Variant type for holding different attenuation filter options.

◆ feedback_matrix_variant_t

Initial value:
std::variant<CascadedFeedbackMatrixOptions, ScalarFeedbackMatrixOptions, TimeVaryingFeedbackMatrixOptions>

Variant type for holding different feedback matrix options.

◆ multi_channel_processor_variant_t

Initial value:
std::variant<ParallelGainsOptions, MultichannelSchroederAllpassSectionOptions,
MultichannelTimeVaryingSchroederAllpassSectionOptions, MultichannelDattorroDelayOptions,
AttenuationFilterBankOptions, DelayBankOptions, DelayBankTimeVaryingOptions,
CascadedFeedbackMatrixOptions, ScalarFeedbackMatrixOptions, MultichannelFirOptions,
MultichannelControllableFullWaveRectifierOptions, MultichannelSignalDependentFractionalDelayOptions,
MultichannelRingModulatorOptions>

Variant type for holding different multi-channel processor options.

◆ single_channel_processor_variant_t

Initial value:
std::variant<SchroederAllpassSectionOptions, TimeVaryingSchroederAllpassSectionOptions, AllpassFilterOptions,
CascadedBiquadsOptions, FirOptions, DelayOptions, GraphicEQOptions, DattorroDelayOptions,
ControllableFullWaveRectifierOptions, SignalDependentFractionalDelayOptions, RingModulatorOptions>

Variant type for holding different single-channel processor options.

Enumeration Type Documentation

◆ DattorroEffectType

enum class sfFDN::DattorroEffectType : uint8_t
strong

Classic delay-line effects, as described in Table 1 of Jon Dattorro, "Effect Design Part 2: Delay-Line Modulation and Chorus", J.

Audio Eng. Soc., Vol. 45, No. 10, 1997.

Enumerator
Vibrato 

Fully wet, modulated delay.

Flanger 

Short modulated delay with negative feedback.

WhiteChorus 

Medium modulated delay with positive feedback.

Doubling 

Long modulated delay without feedback.

Echo 

Long unmodulated delay with feedback.

◆ DelayInterpolationType

enum class sfFDN::DelayInterpolationType : uint8_t
strong

Types of interpolation for fractional delay lengths.

Enumerator
None 

No interpolation. The delay length will be rounded to the nearest integer value.

Linear 

Linear interpolation.

Allpass 

Allpass interpolation.

Lagrange 

Third-order Lagrange interpolation.

◆ DelayLengthType

enum class sfFDN::DelayLengthType : uint8_t
strong

Types of delay length distributions.

Enumerator
Random 

Delay lengths are generated randomly within the specified range based on a uniform distribution.

Gaussian 

Delay lengths are generated based on a Gaussian distribution within the specified range.

Primes 

Delay lengths are selected randomly from a list of prime numbers within the specified range.

Uniform 

Delay lengths are uniformly distributed within the specified range.

PrimePower 

Delay lengths are generated as powers of prime numbers within the specified range. Based on https://ccrma.stanford.edu/~jos/pasp/Prime_Power_Delay_Line_Lengths.html.

SteamAudio 

Delay lengths are generated using the algorithm from the SteamAudio library.

◆ ParallelGainsMode

enum class sfFDN::ParallelGainsMode : uint8_t
strong

Enumeration for parallel gain processing modes.

Enumerator
Split 

Process input as a single channel and output to multiple channels.

Merge 

Process each input channel separately and output to one channel.

Parallel 

Process each input channel separately and output to the same number of channels.

◆ ScalarMatrixType

enum class sfFDN::ScalarMatrixType : uint8_t
strong

Represents the type of a scalar matrix.

[1] D. Rocchesso and J. O. Smith, “Circulant and elliptic feedback delay networks for artificial reverberation,” IEEE Transactions on Speech and Audio Processing, vol. 5, no. 1, pp. 51–63, Jan. 1997, doi: 10.1109/89.554269.
[2] S. J. Schlecht, “FDNTB: the feedback delay network toolbox,” 23rd International Conference on Digital Audio Effects (DAFx2020), 2020.
[3] O. Das, E. K. Canfield-Dafilou, and J. S. Abel, “On The Behavior of Delay Network Reverberator Modes,” in 2019 IEEE Workshop on Applications of Signal Processing to Audio and Acoustics (WASPAA), Oct. 2019, pp. 50–54. doi: 10.1109/WASPAA.2019.8937260.

Enumerator
Identity 

Identity matrix.

Random 

Random orthogonal matrix.

Householder 

Householder matrix.

RandomHouseholder 

Random Householder matrix.

Hadamard 

Hadamard matrix.

Circulant 

Circulant matrix as described in [1].

Allpass 

Allpass matrix.

See [2]

NestedAllpass 

Nested Allpass matrix.

See [2]

VariableDiffusion 

Variable diffusion matrix as described in [3].

◆ TimeVaryingMatrixMode

enum class sfFDN::TimeVaryingMatrixMode : uint8_t
strong

Construction modes for a TimeVaryingFeedbackMatrix.

Both modes construct an orthogonal matrix at every sample by modulating independent 2x2 rotation blocks.

Enumerator
Hadamard 

Uses H^T * blockdiag(R(theta)) * H.

Requires a power-of-two matrix_size.

RealSchur 

Uses V * blockdiag(R(theta)) * V^T.

Accepts any even matrix_size.

Count 

Number of time-varying matrix modes.