|
sfFDN
|
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. | |
Structs for configuring audio processors used in the FDN.
| 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. |
| 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. |
| 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 |
| float | frequency {0.f} |
Finite LFO frequency in cycles per sample, normalized by the sample rate. For example, 1 Hz at 48 kHz is |
| float | initial_phase {0.f} | Finite initial phase of the modulation, normalized to [0, 1]. |
| 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. |
| 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 |
| 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} | |
| struct sfFDN::DelayBankOptions |
Options for configuring a delay bank.
| Class Members | ||
|---|---|---|
| uint32_t | block_size {kDefaultBlockSize} | |
| vector< float > | delays | |
| DelayInterpolationType | interpolation_type | |
| 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 | |
| struct sfFDN::AllpassFilterOptions |
| struct sfFDN::SparseFirOptions |
| struct sfFDN::CascadedBiquadsOptions |
Options for configuring cascaded biquad filters.
| Class Members | ||
|---|---|---|
| vector< FilterCoefficients > | coeffs | |
| struct sfFDN::FirOptions |
| struct sfFDN::SchroederAllpassSectionOptions |
| 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 | |
| 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 |
| bool | parallel {false} |
If true, process stages in parallel. Otherwise, process them in series. |
| vector< ModulationOptions > | time_varying_config |
Gain modulation per stage.
|
| struct sfFDN::MultichannelTimeVaryingSchroederAllpassSectionOptions |
Options for configuring a multichannel bank of time-varying Schroeder allpass sections.
| Class Members | ||
|---|---|---|
| vector< TimeVaryingSchroederAllpassSectionOptions > | sections | |
| 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.
| Class Members | ||
|---|---|---|
| float | blend {0.7071f} | |
| DelayOptions | delay_config |
Configuration of the delay line.
|
| float | feedback {0.7071f} | |
| float | feedforward {1.f} | |
| 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 | |
| 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.
| 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 | |
| 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.
| 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 | |
| struct sfFDN::RingModulatorOptions |
Options for configuring a ring modulator.
Implements equation (5) of the DAFx26 shimmer paper.
amplitude here is a plain linear gain and is never multiplied by pi. | 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 | |
| struct sfFDN::HomogenousFilterOptions |
| 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. |
| 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} | |
| 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. |
| struct sfFDN::AttenuationFilterBankOptions |
Options for configuring an attenuation filter bank.
| Class Members | ||
|---|---|---|
| vector< attenuation_filter_variant_t > | filter_configs | Vector of attenuation filter configurations. |
| struct sfFDN::GraphicEQOptions |
Variant type for holding different attenuation filter options.
Variant type for holding different feedback matrix options.
Variant type for holding different multi-channel processor options.
Variant type for holding different single-channel processor options.
|
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.
|
strong |
|
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. |
|
strong |
|
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.
|
strong |
Construction modes for a TimeVaryingFeedbackMatrix.
Both modes construct an orthogonal matrix at every sample by modulating independent 2x2 rotation blocks.