LMMS
Loading...
Searching...
No Matches
juce_BallisticsFilter.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
27{
28namespace dsp
29{
30
36
44template <typename SampleType>
46{
47public:
48 //==============================================================================
50
51 //==============================================================================
54
55 //==============================================================================
61 void setAttackTime (SampleType attackTimeMs);
62
69 void setReleaseTime (SampleType releaseTimeMs);
70
83 void setLevelCalculationType (LevelCalculationType newCalculationType);
84
85 //==============================================================================
87 void prepare (const ProcessSpec& spec);
88
90 void reset();
91
93 void reset (SampleType initialValue);
94
95 //==============================================================================
97 template <typename ProcessContext>
98 void process (const ProcessContext& context) noexcept
99 {
100 const auto& inputBlock = context.getInputBlock();
101 auto& outputBlock = context.getOutputBlock();
102 const auto numChannels = outputBlock.getNumChannels();
103 const auto numSamples = outputBlock.getNumSamples();
104
105 jassert (inputBlock.getNumChannels() <= yold.size());
106 jassert (inputBlock.getNumChannels() == numChannels);
107 jassert (inputBlock.getNumSamples() == numSamples);
108
109 if (context.isBypassed)
110 {
111 outputBlock.copyFrom (inputBlock);
112 return;
113 }
114
115 for (size_t channel = 0; channel < numChannels; ++channel)
116 {
117 auto* inputSamples = inputBlock .getChannelPointer (channel);
118 auto* outputSamples = outputBlock.getChannelPointer (channel);
119
120 for (size_t i = 0; i < numSamples; ++i)
121 outputSamples[i] = processSample ((int) channel, inputSamples[i]);
122 }
123
124 #if JUCE_DSP_ENABLE_SNAP_TO_ZERO
125 snapToZero();
126 #endif
127 }
128
130 SampleType processSample (int channel, SampleType inputValue);
131
136 void snapToZero() noexcept;
137
138private:
139 //==============================================================================
140 SampleType calculateLimitedCte (SampleType) const noexcept;
141
142 //==============================================================================
143 std::vector<SampleType> yold;
144 double sampleRate = 44100.0, expFactor = -0.142;
145 SampleType attackTime = 1.0, releaseTime = 100.0, cteAT = 0.0, cteRL = 0.0;
147};
148
149} // namespace dsp
150} // namespace juce
#define noexcept
Definition DistrhoDefines.h:72
std::vector< SampleType > yold
Definition juce_BallisticsFilter.h:143
SampleType processSample(int channel, SampleType inputValue)
Definition juce_BallisticsFilter.cpp:91
void reset()
Definition juce_BallisticsFilter.cpp:78
SampleType cteRL
Definition juce_BallisticsFilter.h:145
double expFactor
Definition juce_BallisticsFilter.h:144
BallisticsFilter()
Definition juce_BallisticsFilter.cpp:33
void setAttackTime(SampleType attackTimeMs)
Definition juce_BallisticsFilter.cpp:40
void prepare(const ProcessSpec &spec)
Definition juce_BallisticsFilter.cpp:61
SampleType cteAT
Definition juce_BallisticsFilter.h:145
BallisticsFilterLevelCalculationType LevelCalculationType
Definition juce_BallisticsFilter.h:49
SampleType releaseTime
Definition juce_BallisticsFilter.h:145
double sampleRate
Definition juce_BallisticsFilter.h:144
void setReleaseTime(SampleType releaseTimeMs)
Definition juce_BallisticsFilter.cpp:47
SampleType attackTime
Definition juce_BallisticsFilter.h:145
void process(const ProcessContext &context) noexcept
Definition juce_BallisticsFilter.h:98
void snapToZero() noexcept
Definition juce_BallisticsFilter.cpp:112
LevelCalculationType levelType
Definition juce_BallisticsFilter.h:146
void setLevelCalculationType(LevelCalculationType newCalculationType)
Definition juce_BallisticsFilter.cpp:54
register unsigned i
Definition inflate.c:1575
#define jassert(expression)
Definition juce_AudioBlock.h:29
BallisticsFilterLevelCalculationType
Definition juce_BallisticsFilter.h:32
@ peak
Definition juce_BallisticsFilter.h:33
@ RMS
Definition juce_BallisticsFilter.h:34
Definition carla_juce.cpp:31
Definition juce_Uuid.h:141
Definition juce_ProcessContext.h:38
#define const
Definition zconf.h:137