OpenShot Audio Library | OpenShotAudio
1.0.0
Toggle main menu visibility
Loading...
Searching...
No Matches
juce_LogRampedValue.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
26
namespace
juce::dsp
27
{
28
29
//==============================================================================
44
template
<
typename
FloatType>
45
class
LogRampedValue
:
public
SmoothedValueBase
<LogRampedValue <FloatType>>
46
{
47
public
:
48
//==============================================================================
50
LogRampedValue
() =
default
;
51
53
LogRampedValue
(FloatType initialValue)
noexcept
54
{
55
// Visual Studio can't handle base class initialisation with CRTP
56
this->currentValue = initialValue;
57
this->target = initialValue;
58
}
59
60
//==============================================================================
71
void
setLogParameters
(FloatType midPointAmplitudedB,
bool
rateOfChangeShouldIncrease)
noexcept
72
{
73
jassert (midPointAmplitudedB < (FloatType) 0.0);
74
B =
Decibels::decibelsToGain
(midPointAmplitudedB);
75
76
increasingRateOfChange = rateOfChangeShouldIncrease;
77
}
78
79
//==============================================================================
84
void
reset
(
double
sampleRate,
double
rampLengthInSeconds)
noexcept
85
{
86
jassert (sampleRate > 0 && rampLengthInSeconds >= 0);
87
reset
((
int
) std::floor (rampLengthInSeconds * sampleRate));
88
}
89
93
void
reset
(
int
numSteps)
noexcept
94
{
95
stepsToTarget = numSteps;
96
97
this->
setCurrentAndTargetValue
(this->target);
98
99
updateRampParameters();
100
}
101
102
//==============================================================================
107
void
setTargetValue
(FloatType newValue)
noexcept
108
{
109
if
(approximatelyEqual (newValue, this->target))
110
return
;
111
112
if
(stepsToTarget <= 0)
113
{
114
this->
setCurrentAndTargetValue
(newValue);
115
return
;
116
}
117
118
this->target = newValue;
119
this->countdown = stepsToTarget;
120
source = this->currentValue;
121
122
updateRampParameters();
123
}
124
125
//==============================================================================
129
FloatType
getNextValue
() noexcept
130
{
131
if
(! this->
isSmoothing
())
132
return
this->target;
133
134
--(this->countdown);
135
136
temp *= r; temp += d;
137
this->currentValue = jmap (temp, source, this->target);
138
139
return
this->currentValue;
140
}
141
142
//==============================================================================
148
FloatType
skip
(
int
numSamples)
noexcept
149
{
150
if
(numSamples >= this->countdown)
151
{
152
this->
setCurrentAndTargetValue
(this->target);
153
return
this->target;
154
}
155
156
this->countdown -= numSamples;
157
158
auto
rN = (FloatType) std::pow (r, numSamples);
159
temp *= rN;
160
temp += d * (rN - (FloatType) 1) / (r - (FloatType) 1);
161
162
this->currentValue = jmap (temp, source, this->target);
163
return
this->currentValue;
164
}
165
166
private
:
167
//==============================================================================
168
void
updateRampParameters()
169
{
170
auto
D = increasingRateOfChange ? B : (FloatType) 1 - B;
171
auto
base = ((FloatType) 1 / D) - (FloatType) 1;
172
r = std::pow (base, (FloatType) 2 / (FloatType) stepsToTarget);
173
auto
rN = std::pow (r, (FloatType) stepsToTarget);
174
d = (r - (FloatType) 1) / (rN - (FloatType) 1);
175
temp = 0;
176
}
177
178
//==============================================================================
179
bool
increasingRateOfChange =
true
;
180
FloatType B =
Decibels::decibelsToGain
((FloatType) -40);
181
182
int
stepsToTarget = 0;
183
FloatType temp = 0, source = 0, r = 0, d = 1;
184
};
185
186
}
// namespace juce::dsp
juce::Decibels::decibelsToGain
static Type decibelsToGain(Type decibels, Type minusInfinityDb=Type(defaultMinusInfinitydB))
Definition
juce_Decibels.h:42
juce::SmoothedValueBase< LogRampedValue< FloatType > >::isSmoothing
bool isSmoothing() const noexcept
Definition
juce_SmoothedValue.h:63
juce::SmoothedValueBase< LogRampedValue< FloatType > >::SmoothedValueBase
SmoothedValueBase()=default
juce::SmoothedValueBase< LogRampedValue< FloatType > >::setCurrentAndTargetValue
void setCurrentAndTargetValue(FloatType newValue)
Definition
juce_SmoothedValue.h:75
juce::dsp::LogRampedValue::LogRampedValue
LogRampedValue()=default
juce::dsp::LogRampedValue::getNextValue
FloatType getNextValue() noexcept
Definition
juce_LogRampedValue.h:129
juce::dsp::LogRampedValue::reset
void reset(double sampleRate, double rampLengthInSeconds) noexcept
Definition
juce_LogRampedValue.h:84
juce::dsp::LogRampedValue::setLogParameters
void setLogParameters(FloatType midPointAmplitudedB, bool rateOfChangeShouldIncrease) noexcept
Definition
juce_LogRampedValue.h:71
juce::dsp::LogRampedValue::skip
FloatType skip(int numSamples) noexcept
Definition
juce_LogRampedValue.h:148
juce::dsp::LogRampedValue::LogRampedValue
LogRampedValue(FloatType initialValue) noexcept
Definition
juce_LogRampedValue.h:53
juce::dsp::LogRampedValue::reset
void reset(int numSteps) noexcept
Definition
juce_LogRampedValue.h:93
juce::dsp::LogRampedValue::setTargetValue
void setTargetValue(FloatType newValue) noexcept
Definition
juce_LogRampedValue.h:107
libopenshot-audio
JuceLibraryCode
modules
juce_dsp
maths
juce_LogRampedValue.h
Generated by
1.18.0