OpenShot Audio Library | OpenShotAudio 0.4.0
Loading...
Searching...
No Matches
juce_StateVariableTPTFilter.h
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 StateVariableTPTFilterType
30{
31 lowpass,
32 bandpass,
33 highpass
34};
35
36//==============================================================================
56template <typename SampleType>
58{
59public:
60 //==============================================================================
61 using Type = StateVariableTPTFilterType;
62
63 //==============================================================================
66
67 //==============================================================================
69 void setType (Type newType);
70
75 void setCutoffFrequency (SampleType newFrequencyHz);
76
83 void setResonance (SampleType newResonance);
84
85 //==============================================================================
87 Type getType() const noexcept { return filterType; }
88
90 SampleType getCutoffFrequency() const noexcept { return cutoffFrequency; }
91
93 SampleType getResonance() const noexcept { return resonance; }
94
95 //==============================================================================
97 void prepare (const ProcessSpec& spec);
98
100 void reset();
101
103 void reset (SampleType newValue);
104
109 void snapToZero() noexcept;
110
111 //==============================================================================
113 template <typename ProcessContext>
114 void process (const ProcessContext& context) noexcept
115 {
116 const auto& inputBlock = context.getInputBlock();
117 auto& outputBlock = context.getOutputBlock();
118 const auto numChannels = outputBlock.getNumChannels();
119 const auto numSamples = outputBlock.getNumSamples();
120
121 jassert (inputBlock.getNumChannels() <= s1.size());
122 jassert (inputBlock.getNumChannels() == numChannels);
123 jassert (inputBlock.getNumSamples() == numSamples);
124
125 if (context.isBypassed)
126 {
127 outputBlock.copyFrom (inputBlock);
128 return;
129 }
130
131 for (size_t channel = 0; channel < numChannels; ++channel)
132 {
133 auto* inputSamples = inputBlock .getChannelPointer (channel);
134 auto* outputSamples = outputBlock.getChannelPointer (channel);
135
136 for (size_t i = 0; i < numSamples; ++i)
137 outputSamples[i] = processSample ((int) channel, inputSamples[i]);
138 }
139
140 #if JUCE_DSP_ENABLE_SNAP_TO_ZERO
141 snapToZero();
142 #endif
143 }
144
145 //==============================================================================
147 SampleType processSample (int channel, SampleType inputValue);
148
149private:
150 //==============================================================================
151 void update();
152
153 //==============================================================================
154 SampleType g, h, R2;
155 std::vector<SampleType> s1 { 2 }, s2 { 2 };
156
157 double sampleRate = 44100.0;
158 Type filterType = Type::lowpass;
159 SampleType cutoffFrequency = static_cast<SampleType> (1000.0),
160 resonance = static_cast<SampleType> (1.0 / std::sqrt (2.0));
161};
162
163} // namespace juce::dsp
void process(const ProcessContext &context) noexcept
SampleType getCutoffFrequency() const noexcept
SampleType processSample(int channel, SampleType inputValue)
void setCutoffFrequency(SampleType newFrequencyHz)