OpenShot Audio Library | OpenShotAudio
1.0.0
Toggle main menu visibility
Loading...
Searching...
No Matches
juce_Convolution.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
37
class
JUCE_API
ConvolutionMessageQueue
38
{
39
public
:
46
ConvolutionMessageQueue
();
47
~ConvolutionMessageQueue
()
noexcept
;
48
55
explicit
ConvolutionMessageQueue
(
int
numEntries);
56
57
ConvolutionMessageQueue
(
ConvolutionMessageQueue
&&)
noexcept
;
58
ConvolutionMessageQueue
& operator= (
ConvolutionMessageQueue
&&)
noexcept
;
59
60
ConvolutionMessageQueue
(
const
ConvolutionMessageQueue
&) =
delete
;
61
ConvolutionMessageQueue
& operator= (
const
ConvolutionMessageQueue
&) =
delete
;
62
63
private
:
64
struct
Impl;
65
std::unique_ptr<Impl> pimpl;
66
67
friend
class
Convolution;
68
};
69
102
class
JUCE_API
Convolution
103
{
104
public
:
105
//==============================================================================
107
Convolution
();
108
114
explicit
Convolution
(
ConvolutionMessageQueue
& queue);
115
117
struct
Latency
{
int
latencyInSamples; };
118
129
explicit
Convolution
(
const
Latency
& requiredLatency);
130
132
struct
NonUniform
{
int
headSizeInSamples; };
133
144
explicit
Convolution
(
const
NonUniform
& requiredHeadSize);
145
152
Convolution
(
const
Latency
&,
ConvolutionMessageQueue
&);
153
160
Convolution
(
const
NonUniform
&,
ConvolutionMessageQueue
&);
161
162
~Convolution
() noexcept;
163
164
//==============================================================================
176
void
prepare
(const
ProcessSpec
&);
177
179
void
reset
() noexcept;
180
184
template <typename ProcessContext,
185
std::enable_if_t<std::is_same_v<typename ProcessContext::SampleType,
float
>,
int
> = 0>
186
void
process
(const ProcessContext& context) noexcept
187
{
188
processSamples (context.getInputBlock(), context.getOutputBlock(), context.isBypassed);
189
}
190
191
//==============================================================================
192
enum class
Stereo { no, yes };
193
enum class
Trim { no, yes };
194
enum class
Normalise { no, yes };
195
196
//==============================================================================
216
void
loadImpulseResponse (
const
void
* sourceData,
size_t
sourceDataSize,
217
Stereo isStereo, Trim requiresTrimming,
size_t
size,
218
Normalise requiresNormalisation = Normalise::yes);
219
231
void
loadImpulseResponse (
const
File& fileImpulseResponse,
232
Stereo isStereo, Trim requiresTrimming,
size_t
size,
233
Normalise requiresNormalisation = Normalise::yes);
234
252
void
loadImpulseResponse (AudioBuffer<float>&& buffer,
double
bufferSampleRate,
253
Stereo isStereo, Trim requiresTrimming, Normalise requiresNormalisation);
254
256
int
getCurrentIRSize()
const
;
257
264
int
getLatency()
const
;
265
266
private
:
267
//==============================================================================
268
Convolution (
const
Latency&,
269
const
NonUniform&,
270
OptionalScopedPointer<ConvolutionMessageQueue>&&);
271
272
void
processSamples (
const
AudioBlock<const float>&, AudioBlock<float>&,
bool
isBypassed)
noexcept
;
273
274
class
Mixer
275
{
276
public
:
277
void
prepare (
const
ProcessSpec&);
278
279
template
<
typename
ProcessWet>
280
void
processSamples (
const
AudioBlock<const float>&,
281
AudioBlock<float>&,
282
bool
isBypassed,
283
ProcessWet&&) noexcept;
284
285
void
reset();
286
287
private:
288
std::array<SmoothedValue<
float
>, 2> volumeDry, volumeWet;
289
AudioBlock<
float
> dryBlock;
290
HeapBlock<
char
> dryBlockStorage;
291
double
sampleRate = 0;
292
bool
currentIsBypassed = false;
293
};
294
295
//==============================================================================
296
class Impl;
297
std::unique_ptr<Impl> pimpl;
298
299
//==============================================================================
300
Mixer mixer;
301
bool
isActive = false;
302
303
//==============================================================================
304
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Convolution)
305
};
306
307
}
// namespace juce::dsp
juce::dsp::ConvolutionMessageQueue
Definition
juce_Convolution.h:38
juce::dsp::ConvolutionMessageQueue::ConvolutionMessageQueue
ConvolutionMessageQueue()
Definition
juce_Convolution.cpp:128
juce::dsp::Convolution::Convolution
Convolution()
Definition
juce_Convolution.cpp:1197
juce::dsp::Convolution::prepare
void prepare(const ProcessSpec &)
Definition
juce_Convolution.cpp:1261
juce::dsp::Convolution::process
void process(const ProcessContext &context) noexcept
Definition
juce_Convolution.h:186
juce::dsp::Convolution::reset
void reset() noexcept
Definition
juce_Convolution.cpp:1268
juce::dsp::Convolution::Latency
Definition
juce_Convolution.h:117
juce::dsp::Convolution::NonUniform
Definition
juce_Convolution.h:132
juce::dsp::ProcessSpec
Definition
juce_ProcessContext.h:36
libopenshot-audio
JuceLibraryCode
modules
juce_dsp
frequency
juce_Convolution.h
Generated by
1.18.0