sfFDN
Loading...
Searching...
No Matches
types.h
1#pragma once
2
3#include <nlohmann/json.hpp>
4
5#include <array>
6#include <cstdint>
7#include <numbers>
8#include <optional>
9#include <variant>
10#include <vector>
11
12namespace sfFDN
13{
14
15// helper type for the visitor #4
16// The overload-set idiom inherits from a pack of lambdas so that std::visit can dispatch on it. The multiple
17// inheritance is the whole point, so misc-multiple-inheritance does not apply.
18template <class... Ts>
19// NOLINTNEXTLINE(misc-multiple-inheritance)
20struct overloaded : Ts...
21{
22 using Ts::operator()...;
23};
24// explicit deduction guide (not needed as of C++20)
25template <class... Ts>
26overloaded(Ts...) -> overloaded<Ts...>;
27
28constexpr uint32_t kDefaultSampleRate = 48000;
29constexpr uint32_t kDefaultBlockSize = 128;
30
39// ENUMS
40
51enum class ScalarMatrixType : uint8_t
52{
53 Identity = 0,
54 Random = 1,
55 Householder = 2,
57 Hadamard = 4,
58 Circulant = 5,
59 Allpass = 6,
60 NestedAllpass = 7,
62 Count = 9
63};
64
66enum class DelayInterpolationType : uint8_t
67{
69 None = 0,
70
72 Linear = 1,
73
75 Allpass = 2,
76
78 Lagrange = 3,
79 Count = 4,
80};
81
85enum class DelayLengthType : uint8_t
86{
88 Random = 0,
89
91 Gaussian = 1,
92
94 Primes = 2,
95
97 Uniform = 3,
98
101 PrimePower = 4,
102
104 SteamAudio = 5,
105
106 Count = 6,
107};
108
110enum class ParallelGainsMode : uint8_t
111{
113 Split,
114
116 Merge,
117
120};
121
126enum class TimeVaryingMatrixMode : uint8_t
127{
128 Hadamard = 0,
129 RealSchur = 1,
130 Count = 2
131};
132
133// STRUCTS
134
140{
142 uint32_t matrix_size{0};
143
146
150 std::optional<std::vector<float>> custom_matrix{std::nullopt};
151
153 uint32_t rng_seed{0};
154
156 // the diffusion parameter.
157 std::optional<float> arg{std::nullopt};
158};
159
177
180{
181 float frequency{0.f};
183 float amplitude{0.f};
188 float initial_phase{0.f};
189};
190
205
208{
210 std::vector<float>
212 std::vector<ModulationOptions>
215};
216
219{
220 float delay{256.f}; /*< Delay in samples. This can be a fractional value if interpolation is used. */
221 uint32_t max_delay{512}; /*< Maximum delay in samples. This is used to determine the size of the delay buffer and
222 must be greater than or equal to `delay`. */
224 sfFDN::DelayInterpolationType::None}; /*< Interpolation type for fractional delays. */
225 std::optional<sfFDN::ModulationOptions> lfo_config{
226 std::nullopt}; /*< Optional LFO configuration for time-varying delay modulation. If provided, the delay will be
227 modulated according to the specified parameters. */
228};
229
232{
233 std::vector<float>
234 delays; /*< Delay values for each channel in samples. These can be fractional values if interpolation is used.
235 The size of the vector determines the number of channels in the delay bank. */
236 uint32_t block_size{kDefaultBlockSize}; /*< Block size for processing audio. This is used to determine the size of
237 internal buffers and can affect performance. */
238 DelayInterpolationType interpolation_type{
239 DelayInterpolationType::None}; /*< Interpolation type for fractional delays. */
240};
241
244{
245 std::vector<float> delays; /*< Initial delay values for each channel in samples. These can be fractional values if
246 interpolation is used. The size of the vector determines the number of channels in the delay bank. */
247 uint32_t max_delay{0}; /*< Maximum delay in samples. This is used to determine the size of the delay buffer and
248 must be greater than or equal to the initial delays. */
249 DelayInterpolationType interpolation_type{
250 DelayInterpolationType::None}; /*< Interpolation type for fractional delays. */
251 std::vector<ModulationOptions> time_varying_config; /*< Time-varying modulation configuration for each channel. The
252 size of the vector must match the size of `delays`. */
253};
254
257{
259 float b0;
260
262 float b1;
263
265 float b2;
266
268 float a0;
269
271 float a1;
272
274 float a2;
275
278 {
279 return {.b0 = b0 / a0, .b1 = b1 / a0, .b2 = b2 / a0, .a0 = 1.0f, .a1 = a1 / a0, .a2 = a2 / a0};
280 }
281};
282
285{
287 float coeff{0.f};
288};
289
292{
293 std::vector<std::pair<uint32_t, float>> coeffs; // pair of (index, coefficient)
294};
295
298{
299 std::vector<FilterCoefficients> coeffs;
300};
301
304{
305 std::vector<float> coeffs{1.f};
306};
307
309{
310 std::vector<std::vector<float>> coeffs;
311};
312
316{
317 std::vector<float> delays; /*< Initial delay values for each Schroeder allpass in samples. */
318 std::vector<float> gains; /*< Feedback gain values for each Schroeder allpass. The size of this vector must match
319 the size of `delays`. */
320 bool parallel{false}; /*< If true, the allpass filters in the section are connected in parallel. If false, they are
321 connected in series. */
322};
323
327{
328 std::vector<SchroederAllpassSectionOptions> sections;
329};
330
337{
338 std::vector<float> delays;
339 std::vector<float> gains;
340 std::vector<ModulationOptions>
342 bool parallel{false};
343};
344
347{
348 std::vector<TimeVaryingSchroederAllpassSectionOptions> sections;
349};
350
353enum class DattorroEffectType : uint8_t
354{
355 Vibrato,
356 Flanger,
358 Doubling,
359 Echo,
360};
361
368{
376 .delay = 256.f, .max_delay = 512, .interp_type = DelayInterpolationType::Allpass, .lfo_config = std::nullopt};
377 float blend{0.7071f}; /*< Gain applied to the input of the delay line. */
378 float feedforward{1.f}; /*< Gain applied to the modulated output of the delay line. */
379 float feedback{0.7071f}; /*< Gain applied to the fixed output of the delay line before it is fed back into the
380 delay line. The feedback is subtracted at the summing junction, so a positive value
381 recirculates with inverted polarity. Must be in the range (-1, 1) to be stable. */
382};
383
391{
392 std::vector<DattorroDelayOptions> delays;
393};
394
401{
404 float alpha{1.f};
407 bool antialiasing{true};
410 bool dc_block{true};
413 float sample_rate{static_cast<float>(kDefaultSampleRate)};
414};
415
419{
420 std::vector<std::optional<ControllableFullWaveRectifierOptions>> channels;
421};
422
429{
433 float d{1.f};
434};
435
439{
440 std::vector<std::optional<SignalDependentFractionalDelayOptions>> channels;
441};
442
450{
453 float frequency{0.f};
457 float amplitude{std::numbers::sqrt2_v<float>};
459 float initial_phase{0.f};
460};
461
465{
466 std::vector<std::optional<RingModulatorOptions>> channels;
467};
468
472{
473 float t60 = 1.f; /*< Target T60 value for the filter. */
474 float delay{1.f}; /*< Delay in samples for the delay line preceding the filter. If set to <= 0, it will be updated
475 automatically when accessed from `CreateFDNFromConfig()`*/
476 float sample_rate = kDefaultSampleRate; /*< Sample rate in Hz. This is used to calculate the filter coefficients
477 based on the specified T60 values. */
478};
479
487{
488 std::array<float, 2> t60s{1.f, 0.5f};
489 float delay{0.f}; /*< Delay in samples for the delay line preceding the filter. If set to <= 0, it will be updated
490 automatically when accessed from `CreateFDNFromConfig()`*/
491 float sample_rate = kDefaultSampleRate; /*< Sample rate in Hz. This is used to calculate the filter coefficients
492 based on the specified T60 values. */
493};
494
499{
500 std::array<float, 3> t60s{1.f, 0.5f, 0.25f}; /*< Target T60 values for the low, mid and high bands. */
501 float delay{0.f}; /*< Delay in samples for the delay line preceding the filter. If set to <= 0, it will be updated
502 automatically when accessed from `CreateFDNFromConfig()`*/
503 std::array<float, 2> freqs{800.f, 8000.f}; /*< Frequency values for the low and high shelves. */
504 float q = 1.f / std::numbers::sqrt2_v<float>; /*< Q-factor for the shelf filters. Q values higher than 0.707 may
505 cause instability if placed in a feedback loop. */
506 float sample_rate = kDefaultSampleRate; /*< Sample rate in Hz. This is used to calculate the filter coefficients
507 based on the specified T60 values. */
508};
509
518{
520 std::array<float, 10> t60s = {1.f, 0.9f, 0.8f, 0.7f, 0.6f, 0.5f, 0.4f, 0.3f, 0.2f, 0.1f};
521
524 float delay{0.f};
525
527 float sample_rate = kDefaultSampleRate;
528
530 float shelf_cutoff = 8000.f;
531};
532
535 std::variant<HomogenousFilterOptions, TwoBandFilterOptions, ThreeBandFilterOptions, TenBandFilterOptions>;
536
539{
541 std::vector<attenuation_filter_variant_t> filter_configs;
542};
543
546{
548 std::array<float, 10> gains_db{};
549
551 std::array<float, 10> freqs{};
552
554 float sample_rate = kDefaultSampleRate;
555};
556
559 std::variant<CascadedFeedbackMatrixOptions, ScalarFeedbackMatrixOptions, TimeVaryingFeedbackMatrixOptions>;
560
566
575
578NLOHMANN_JSON_SERIALIZE_ENUM(ScalarMatrixType, {{ScalarMatrixType::Identity, "Identity"},
579 {ScalarMatrixType::Random, "Random"},
580 {ScalarMatrixType::Householder, "Householder"},
581 {ScalarMatrixType::RandomHouseholder, "RandomHouseholder"},
582 {ScalarMatrixType::Hadamard, "Hadamard"},
583 {ScalarMatrixType::Circulant, "Circulant"},
584 {ScalarMatrixType::Allpass, "Allpass"},
585 {ScalarMatrixType::NestedAllpass, "NestedAllpass"},
586 {ScalarMatrixType::VariableDiffusion, "VariableDiffusion"},
587 {ScalarMatrixType::Count, "Count"}});
588
589NLOHMANN_JSON_SERIALIZE_ENUM(DelayInterpolationType, {{DelayInterpolationType::None, "None"},
592 {DelayInterpolationType::Lagrange, "Lagrange"}});
593
594NLOHMANN_JSON_SERIALIZE_ENUM(DelayLengthType, {{DelayLengthType::Random, "Random"},
595 {DelayLengthType::Gaussian, "Gaussian"},
596 {DelayLengthType::Primes, "Primes"},
597 {DelayLengthType::Uniform, "Uniform"},
598 {DelayLengthType::PrimePower, "PrimePower"},
599 {DelayLengthType::SteamAudio, "SteamAudio"}});
600
601NLOHMANN_JSON_SERIALIZE_ENUM(ParallelGainsMode, {{ParallelGainsMode::Split, "Split"},
602 {ParallelGainsMode::Merge, "Merge"},
603 {ParallelGainsMode::Parallel, "Parallel"}});
604
605NLOHMANN_JSON_SERIALIZE_ENUM(TimeVaryingMatrixMode, {{TimeVaryingMatrixMode::Hadamard, "Hadamard"},
607 {TimeVaryingMatrixMode::Count, "Count"}});
608
609void to_json(nlohmann::json& j, const ScalarFeedbackMatrixOptions& config);
610void from_json(const nlohmann::json& j, ScalarFeedbackMatrixOptions& config);
611NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(CascadedFeedbackMatrixOptions, matrix_size, stage_count, sparsity, type,
612 gain_per_samples);
613NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(ModulationOptions, frequency, amplitude, initial_phase);
614NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(TimeVaryingFeedbackMatrixOptions, matrix_size, mode, time_varying_config, rng_seed);
615NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(ParallelGainsOptions, mode, gains, time_varying_config);
616void to_json(nlohmann::json& j, const DelayOptions& config);
617void from_json(const nlohmann::json& j, DelayOptions& config);
618NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(DelayBankOptions, delays, block_size, interpolation_type);
619NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(DelayBankTimeVaryingOptions, delays, max_delay, interpolation_type,
620 time_varying_config);
621NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(FilterCoefficients, b0, b1, b2, a0, a1, a2);
622NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(AllpassFilterOptions, coeff);
623NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(SparseFirOptions, coeffs);
624NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(CascadedBiquadsOptions, coeffs);
625NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(FirOptions, coeffs);
626NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultichannelFirOptions, coeffs);
627NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(SchroederAllpassSectionOptions, delays, gains, parallel);
628NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(TimeVaryingSchroederAllpassSectionOptions, delays, gains, time_varying_config,
629 parallel);
630NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(DattorroDelayOptions, delay_config, blend, feedforward, feedback);
631NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultichannelSchroederAllpassSectionOptions, sections);
632NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultichannelTimeVaryingSchroederAllpassSectionOptions, sections);
633NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultichannelDattorroDelayOptions, delays);
634NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(ControllableFullWaveRectifierOptions, alpha, antialiasing, dc_block, sample_rate);
635NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(SignalDependentFractionalDelayOptions, d);
636NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(RingModulatorOptions, frequency, amplitude, initial_phase);
637// The multichannel banks hold `std::optional` entries, which nlohmann does not serialize on its own. A null entry
638// means the channel is left unprocessed.
639void to_json(nlohmann::json& j, const MultichannelControllableFullWaveRectifierOptions& config);
640void from_json(const nlohmann::json& j, MultichannelControllableFullWaveRectifierOptions& config);
641void to_json(nlohmann::json& j, const MultichannelSignalDependentFractionalDelayOptions& config);
642void from_json(const nlohmann::json& j, MultichannelSignalDependentFractionalDelayOptions& config);
643void to_json(nlohmann::json& j, const MultichannelRingModulatorOptions& config);
644void from_json(const nlohmann::json& j, MultichannelRingModulatorOptions& config);
645NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(HomogenousFilterOptions, t60, delay, sample_rate);
646NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(TwoBandFilterOptions, t60s, delay, sample_rate);
647NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(ThreeBandFilterOptions, t60s, delay, freqs, q, sample_rate);
648NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(TenBandFilterOptions, t60s, delay, sample_rate, shelf_cutoff);
649NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(GraphicEQOptions, gains_db, freqs, sample_rate);
650
651void to_json(nlohmann::json& j, const AttenuationFilterBankOptions& config);
652void from_json(const nlohmann::json& j, AttenuationFilterBankOptions& config);
653
654} // namespace sfFDN
std::optional< float > arg
Optional argument for certain matrix types. For example, for the VariableDiffusion type,...
Definition types.h:157
float coeff
The coefficient for the allpass filter.
Definition types.h:287
ParallelGainsMode mode
Mode of parallel gain processing.
Definition types.h:209
bool antialiasing
If true, approximate the rectifier with first-order antiderivative antialiasing, equation (4) of the ...
Definition types.h:407
std::vector< ModulationOptions > time_varying_config
One LFO configuration per rotation block, or empty to disable modulation.
Definition types.h:201
float shelf_cutoff
Cutoff frequency for the shelf filters.
Definition types.h:530
float initial_phase
Finite initial phase of the modulation, normalized to [0, 1].
Definition types.h:188
DelayOptions delay_config
Configuration of the delay line.
Definition types.h:375
float frequency
Finite LFO frequency in cycles per sample, normalized by the sample rate.
Definition types.h:181
uint32_t rng_seed
Seed for the RealSchur random orthogonal basis.
Definition types.h:202
bool dc_block
If true, follow the rectifier with a dc blocker with energy compensation, equations (7) and (8) of th...
Definition types.h:410
std::vector< ModulationOptions > time_varying_config
Optional time-varying modulation configuration for each channel.
Definition types.h:213
ScalarMatrixType type
Type of the feedback matrix.
Definition types.h:145
bool parallel
If true, process stages in parallel.
Definition types.h:342
std::vector< float > gains
Base gain values.
Definition types.h:339
uint32_t matrix_size
Size of the feedback matrix.
Definition types.h:142
uint32_t matrix_size
Dimension of the square feedback matrix.
Definition types.h:198
std::array< float, 10 > freqs
Frequency values for the ten bands in Hz.
Definition types.h:551
float alpha
Distortion amount, in [0, 1].
Definition types.h:404
ScalarMatrixType type
Type of the feedback matrix.
Definition types.h:173
std::vector< attenuation_filter_variant_t > filter_configs
Vector of attenuation filter configurations.
Definition types.h:541
float sample_rate
Sample rate in Hz.
Definition types.h:413
float amplitude
Linear gain applied to the modulating sinusoid.
Definition types.h:457
std::vector< float > delays
Fixed delay values in samples.
Definition types.h:338
std::array< float, 2 > t60s
Target T60 values for the low and high bands.
Definition types.h:488
float delay
Delay in samples for the delay line preceding the filter. If set to <= 0, it will be updated automati...
Definition types.h:524
uint32_t rng_seed
Optional. Seed for random number generation when type is Random or RandomHouseholder.
Definition types.h:153
float initial_phase
Initial phase of the modulating sinusoid, normalized to [0, 1].
Definition types.h:459
float sample_rate
Sample rate in Hz. This is used to calculate the filter coefficients based on the specified T60 value...
Definition types.h:527
float amplitude
For TimeVaryingFeedbackMatrix, normalized peak angular deviation with |amplitude| <= 1.
Definition types.h:183
uint32_t stage_count
Number of stages.
Definition types.h:170
std::optional< std::vector< float > > custom_matrix
Optional custom matrix values in row-major order: custom_matrix[row * matrix_size + column] is A[row,...
Definition types.h:150
float d
Interpolation weight, in [0, 1].
Definition types.h:433
std::array< float, 10 > gains_db
Target gains for the ten bands in dB.
Definition types.h:548
std::vector< float > gains
Gain values for each channel.
Definition types.h:211
std::vector< ModulationOptions > time_varying_config
Gain modulation per stage.
Definition types.h:341
float frequency
Modulation frequency in cycles per sample, normalized by the sample rate.
Definition types.h:453
uint32_t matrix_size
Size of the feedback matrix.
Definition types.h:169
TimeVaryingMatrixMode mode
Construction mode for the orthogonal matrix.
Definition types.h:199
float sample_rate
Sample rate in Hz.
Definition types.h:554
float sparsity
Sparsity level (>= 1).
Definition types.h:171
std::array< float, 10 > t60s
Target T60 values for the ten bands.
Definition types.h:520
float gain_per_samples
Gain per sample.
Definition types.h:175
std::variant< CascadedFeedbackMatrixOptions, ScalarFeedbackMatrixOptions, TimeVaryingFeedbackMatrixOptions > feedback_matrix_variant_t
Variant type for holding different feedback matrix options.
Definition types.h:558
TimeVaryingMatrixMode
Construction modes for a TimeVaryingFeedbackMatrix.
Definition types.h:127
std::variant< ParallelGainsOptions, MultichannelSchroederAllpassSectionOptions, MultichannelTimeVaryingSchroederAllpassSectionOptions, MultichannelDattorroDelayOptions, AttenuationFilterBankOptions, DelayBankOptions, DelayBankTimeVaryingOptions, CascadedFeedbackMatrixOptions, ScalarFeedbackMatrixOptions, MultichannelFirOptions, MultichannelControllableFullWaveRectifierOptions, MultichannelSignalDependentFractionalDelayOptions, MultichannelRingModulatorOptions > multi_channel_processor_variant_t
Variant type for holding different multi-channel processor options.
Definition types.h:568
std::variant< SchroederAllpassSectionOptions, TimeVaryingSchroederAllpassSectionOptions, AllpassFilterOptions, CascadedBiquadsOptions, FirOptions, DelayOptions, GraphicEQOptions, DattorroDelayOptions, ControllableFullWaveRectifierOptions, SignalDependentFractionalDelayOptions, RingModulatorOptions > single_channel_processor_variant_t
Variant type for holding different single-channel processor options.
Definition types.h:562
DattorroEffectType
Classic delay-line effects, as described in Table 1 of Jon Dattorro, "Effect Design Part 2: Delay-Lin...
Definition types.h:354
ParallelGainsMode
Enumeration for parallel gain processing modes.
Definition types.h:111
DelayInterpolationType
Types of interpolation for fractional delay lengths.
Definition types.h:67
ScalarMatrixType
Represents the type of a scalar matrix.
Definition types.h:52
DelayLengthType
Types of delay length distributions.
Definition types.h:86
std::variant< HomogenousFilterOptions, TwoBandFilterOptions, ThreeBandFilterOptions, TenBandFilterOptions > attenuation_filter_variant_t
Variant type for holding different attenuation filter options.
Definition types.h:534
@ RealSchur
Uses V * blockdiag(R(theta)) * V^T.
@ Hadamard
Uses H^T * blockdiag(R(theta)) * H.
@ Count
Number of time-varying matrix modes.
@ Flanger
Short modulated delay with negative feedback.
@ Vibrato
Fully wet, modulated delay.
@ WhiteChorus
Medium modulated delay with positive feedback.
@ Doubling
Long modulated delay without feedback.
@ Echo
Long unmodulated delay with feedback.
@ Merge
Process each input channel separately and output to one channel.
@ Split
Process input as a single channel and output to multiple channels.
@ Parallel
Process each input channel separately and output to the same number of channels.
@ Lagrange
Third-order Lagrange interpolation.
@ Linear
Linear interpolation.
@ None
No interpolation. The delay length will be rounded to the nearest integer value.
@ Allpass
Allpass interpolation.
@ NestedAllpass
Nested Allpass matrix.
@ Householder
Householder matrix.
@ Random
Random orthogonal matrix.
@ VariableDiffusion
Variable diffusion matrix as described in [3].
@ Circulant
Circulant matrix as described in [1].
@ RandomHouseholder
Random Householder matrix.
@ Hadamard
Hadamard matrix.
@ Identity
Identity matrix.
@ Allpass
Allpass matrix.
@ Random
Delay lengths are generated randomly within the specified range based on a uniform distribution.
@ SteamAudio
Delay lengths are generated using the algorithm from the SteamAudio library.
@ PrimePower
Delay lengths are generated as powers of prime numbers within the specified range....
@ Uniform
Delay lengths are uniformly distributed within the specified range.
@ Primes
Delay lengths are selected randomly from a list of prime numbers within the specified range.
@ Gaussian
Delay lengths are generated based on a Gaussian distribution within the specified range.
Options for configuring an allpass filter.
Definition types.h:285
Options for configuring an attenuation filter bank.
Definition types.h:539
Options for configuring cascaded biquad filters.
Definition types.h:298
Information structure for constructing a cascaded feedback matrix (also known as a filter feedback ma...
Definition types.h:168
Options for configuring a controllable full-wave rectifier.
Definition types.h:401
Options for configuring a Dattorro delay-line effect.
Definition types.h:368
Options for configuring a delay bank.
Definition types.h:232
Options for configuring a time-varying delay bank.
Definition types.h:244
Options for configuring delays.
Definition types.h:219
Options for configuring a FIR filter.
Definition types.h:304
Options for configuring a graphic equalizer.
Definition types.h:546
Options for configuring a homogenous filter.
Definition types.h:472
Options for configuring signal modulation.
Definition types.h:180
Options for configuring a multichannel bank of controllable full-wave rectifiers.
Definition types.h:419
Options for configuring a multichannel bank of Dattorro delay-line effects.
Definition types.h:391
Definition types.h:309
Options for configuring a multichannel bank of ring modulators.
Definition types.h:465
Options for configuring a multichannel bank of Schroeder allpass sections.
Definition types.h:327
Options for configuring a multichannel bank of signal-dependent fractional delays.
Definition types.h:439
Options for configuring a multichannel bank of time-varying Schroeder allpass sections.
Definition types.h:347
Options for configuring parallel gain processing.
Definition types.h:208
Options for configuring a ring modulator.
Definition types.h:450
Options for configuring a scalar feedback matrix.
Definition types.h:140
Options for configuring a Schroeder allpass section consisting of N Schroeder allpass in series or in...
Definition types.h:316
Options for configuring a signal-dependent fractional delay.
Definition types.h:429
Options for configuring a sparse FIR filter.
Definition types.h:292
Options for configuring a ten-band filter.
Definition types.h:518
Options for configuring a three-band filter.
Definition types.h:499
Options for configuring a TimeVaryingFeedbackMatrix.
Definition types.h:197
Options for configuring an energy-preserving time-varying Schroeder allpass section.
Definition types.h:337
Options for configuring a two-band filter.
Definition types.h:487
Coefficients for a digital IIR filter.
Definition types.h:257
float b1
Feedforward coefficients.
Definition types.h:262
float a1
Feedback coefficient.
Definition types.h:271
float a2
Feedback coefficient.
Definition types.h:274
float b2
Feedforward coefficients.
Definition types.h:265
float b0
Feedforward coefficients.
Definition types.h:259
FilterCoefficients Normalize() const
Returns the filter coefficients normalized so that a0 is equal to 1.
Definition types.h:277
float a0
Feedback coefficient.
Definition types.h:268
Definition types.h:21