OpenShot Audio Library | OpenShotAudio
0.4.0
Loading...
Searching...
No Matches
juce_BallisticsFilter.cpp
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
//==============================================================================
30
template
<
typename
SampleType>
31
BallisticsFilter<SampleType>::BallisticsFilter
()
32
{
33
setAttackTime (attackTime);
34
setReleaseTime (releaseTime);
35
}
36
37
template
<
typename
SampleType>
38
void
BallisticsFilter<SampleType>::setAttackTime
(SampleType
attackTimeMs
)
39
{
40
attackTime =
attackTimeMs
;
41
cteAT = calculateLimitedCte (
static_cast<
SampleType
>
(attackTime));
42
}
43
44
template
<
typename
SampleType>
45
void
BallisticsFilter<SampleType>::setReleaseTime
(SampleType
releaseTimeMs
)
46
{
47
releaseTime =
releaseTimeMs
;
48
cteRL = calculateLimitedCte (
static_cast<
SampleType
>
(releaseTime));
49
}
50
51
template
<
typename
SampleType>
52
void
BallisticsFilter<SampleType>::setLevelCalculationType
(LevelCalculationType
newLevelType
)
53
{
54
levelType =
newLevelType
;
55
reset();
56
}
57
58
template
<
typename
SampleType>
59
void
BallisticsFilter<SampleType>::prepare
(
const
ProcessSpec
&
spec
)
60
{
61
jassert (
spec
.sampleRate > 0);
62
jassert (
spec
.numChannels > 0);
63
64
sampleRate =
spec
.sampleRate;
65
expFactor = -2.0 *
MathConstants<double>::pi
* 1000.0 / sampleRate;
66
67
setAttackTime (attackTime);
68
setReleaseTime (releaseTime);
69
70
yold.resize (
spec
.numChannels);
71
72
reset();
73
}
74
75
template
<
typename
SampleType>
76
void
BallisticsFilter<SampleType>::reset
()
77
{
78
reset (0);
79
}
80
81
template
<
typename
SampleType>
82
void
BallisticsFilter<SampleType>::reset
(SampleType
initialValue
)
83
{
84
for
(
auto
&
old
: yold)
85
old
=
initialValue
;
86
}
87
88
template
<
typename
SampleType>
89
SampleType
BallisticsFilter<SampleType>::processSample
(
int
channel, SampleType
inputValue
)
90
{
91
jassert (isPositiveAndBelow (channel, yold.size()));
92
93
if
(levelType == LevelCalculationType::RMS)
94
inputValue
*=
inputValue
;
95
else
96
inputValue
= std::abs (
inputValue
);
97
98
SampleType
cte
= (
inputValue
> yold[(
size_t
) channel] ? cteAT : cteRL);
99
100
SampleType result =
inputValue
+
cte
* (yold[(
size_t
) channel] -
inputValue
);
101
yold[(
size_t
) channel] = result;
102
103
if
(levelType == LevelCalculationType::RMS)
104
return
std::sqrt (result);
105
106
return
result;
107
}
108
109
template
<
typename
SampleType>
110
void
BallisticsFilter<SampleType>::snapToZero
()
noexcept
111
{
112
for
(
auto
&
old
: yold)
113
util::snapToZero (
old
);
114
}
115
116
template
<
typename
SampleType>
117
SampleType
BallisticsFilter<SampleType>::calculateLimitedCte
(SampleType
timeMs
)
const
noexcept
118
{
119
return
timeMs < static_cast<SampleType>
(1.0e-3) ? 0
120
:
static_cast<
SampleType
>
(std::exp (expFactor /
timeMs
));
121
}
122
123
//==============================================================================
124
template
class
BallisticsFilter<float>
;
125
template
class
BallisticsFilter<double>
;
126
127
}
// namespace juce::dsp
juce::Optional
Definition
juce_Optional.h:57
juce::dsp::BallisticsFilter
Definition
juce_BallisticsFilter.h:44
juce::dsp::BallisticsFilter::processSample
SampleType processSample(int channel, SampleType inputValue)
Definition
juce_BallisticsFilter.cpp:89
juce::dsp::BallisticsFilter::reset
void reset()
Definition
juce_BallisticsFilter.cpp:76
juce::dsp::BallisticsFilter::BallisticsFilter
BallisticsFilter()
Definition
juce_BallisticsFilter.cpp:31
juce::dsp::BallisticsFilter::setAttackTime
void setAttackTime(SampleType attackTimeMs)
Definition
juce_BallisticsFilter.cpp:38
juce::dsp::BallisticsFilter::prepare
void prepare(const ProcessSpec &spec)
Definition
juce_BallisticsFilter.cpp:59
juce::dsp::BallisticsFilter::setReleaseTime
void setReleaseTime(SampleType releaseTimeMs)
Definition
juce_BallisticsFilter.cpp:45
juce::dsp::BallisticsFilter::snapToZero
void snapToZero() noexcept
Definition
juce_BallisticsFilter.cpp:110
juce::dsp::BallisticsFilter::setLevelCalculationType
void setLevelCalculationType(LevelCalculationType newCalculationType)
Definition
juce_BallisticsFilter.cpp:52
juce::MathConstants
Definition
juce_MathsFunctions.h:139
juce::dsp::ProcessSpec
Definition
juce_ProcessContext.h:36
JuceLibraryCode
modules
juce_dsp
processors
juce_BallisticsFilter.cpp
Generated by
1.9.8