JUCE-7.0.12-0-g4f43011b96 JUCE-7.0.12-0-g4f43011b96
JUCE — C++ application framework with suport for VST, VST3, LV2 audio plug-ins

« « « Anklang Documentation
Loading...
Searching...
No Matches
juce_LinkwitzRileyFilter.h
Go to the documentation of this file.
1 /*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 By using JUCE, you agree to the terms of both the JUCE 7 End-User License
11 Agreement and JUCE Privacy Policy.
12
13 End User License Agreement: www.juce.com/juce-7-licence
14 Privacy Policy: www.juce.com/juce-privacy-policy
15
16 Or: You may also use this code under the terms of the GPL v3 (see
17 www.gnu.org/licenses).
18
19 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21 DISCLAIMED.
22
23 ==============================================================================
24*/
25
26namespace juce::dsp
27{
28
29enum class LinkwitzRileyFilterType
30{
31 lowpass,
32 highpass,
33 allpass
34};
35
47template <typename SampleType>
49{
50public:
51 //==============================================================================
52 using Type = LinkwitzRileyFilterType;
53
54 //==============================================================================
57
58 //==============================================================================
60 void setType (Type newType);
61
64
65 //==============================================================================
67 Type getType() const noexcept { return filterType; }
68
70 SampleType getCutoffFrequency() const noexcept { return cutoffFrequency; }
71
72 //==============================================================================
74 void prepare (const ProcessSpec& spec);
75
77 void reset();
78
79 //==============================================================================
81 template <typename ProcessContext>
82 void process (const ProcessContext& context) noexcept
83 {
84 const auto& inputBlock = context.getInputBlock();
85 auto& outputBlock = context.getOutputBlock();
86 const auto numChannels = outputBlock.getNumChannels();
87 const auto numSamples = outputBlock.getNumSamples();
88
89 jassert (inputBlock.getNumChannels() <= s1.size());
90 jassert (inputBlock.getNumChannels() == numChannels);
91 jassert (inputBlock.getNumSamples() == numSamples);
92
93 if (context.isBypassed)
94 {
95 outputBlock.copyFrom (inputBlock);
96 return;
97 }
98
99 for (size_t channel = 0; channel < numChannels; ++channel)
100 {
101 auto* inputSamples = inputBlock.getChannelPointer (channel);
102 auto* outputSamples = outputBlock.getChannelPointer (channel);
103
104 for (size_t i = 0; i < numSamples; ++i)
105 outputSamples[i] = processSample ((int) channel, inputSamples[i]);
106 }
107
108 #if JUCE_DSP_ENABLE_SNAP_TO_ZERO
109 snapToZero();
110 #endif
111 }
112
114 SampleType processSample (int channel, SampleType inputValue);
115
119 void processSample (int channel, SampleType inputValue, SampleType &outputLow, SampleType &outputHigh);
120
125 void snapToZero() noexcept;
126
127private:
128 //==============================================================================
129 void update();
130
131 //==============================================================================
132 SampleType g, R2, h;
133 std::vector<SampleType> s1, s2, s3, s4;
134
135 double sampleRate = 44100.0;
136 SampleType cutoffFrequency = 2000.0;
137 Type filterType = Type::lowpass;
138};
139
140} // namespace juce::dsp
A filter class designed to perform multi-band separation using the TPT (Topology-Preserving Transform...
void prepare(const ProcessSpec &spec)
Initialises the filter.
void setType(Type newType)
Sets the filter type.
void process(const ProcessContext &context) noexcept
Processes the input and output samples supplied in the processing context.
void reset()
Resets the internal state variables of the filter.
SampleType getCutoffFrequency() const noexcept
Returns the cutoff frequency of the filter.
SampleType processSample(int channel, SampleType inputValue)
Performs the filter operation on a single sample at a time.
void setCutoffFrequency(SampleType newCutoffFrequencyHz)
Sets the cutoff frequency of the filter in Hz.
Type getType() const noexcept
Returns the type of the filter.
void snapToZero() noexcept
Ensure that the state variables are rounded to zero if the state variables are denormals.
#define jassert(expression)
Platform-independent assertion macro.
Type unalignedPointerCast(void *ptr) noexcept
Casts a pointer to another type via void*, which suppresses the cast-align warning which sometimes ar...
Definition juce_Memory.h:88
T size(T... args)
This structure is passed into a DSP algorithm's prepare() method, and contains information about vari...