LMMS
Loading...
Searching...
No Matches
juce_Convolution.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
71
105{
106public:
107 //==============================================================================
109 Convolution();
110
116 explicit Convolution (ConvolutionMessageQueue& queue);
117
119 struct Latency { int latencyInSamples; };
120
131 explicit Convolution (const Latency& requiredLatency);
132
135
146 explicit Convolution (const NonUniform& requiredHeadSize);
147
155
163
165
166 //==============================================================================
178 void prepare (const ProcessSpec&);
179
181 void reset() noexcept;
182
186 template <typename ProcessContext,
187 std::enable_if_t<std::is_same<typename ProcessContext::SampleType, float>::value, int> = 0>
188 void process (const ProcessContext& context) noexcept
189 {
190 processSamples (context.getInputBlock(), context.getOutputBlock(), context.isBypassed);
191 }
192
193 //==============================================================================
194 enum class Stereo { no, yes };
195 enum class Trim { no, yes };
196 enum class Normalise { no, yes };
197
198 //==============================================================================
218 void loadImpulseResponse (const void* sourceData, size_t sourceDataSize,
219 Stereo isStereo, Trim requiresTrimming, size_t size,
220 Normalise requiresNormalisation = Normalise::yes);
221
233 void loadImpulseResponse (const File& fileImpulseResponse,
234 Stereo isStereo, Trim requiresTrimming, size_t size,
235 Normalise requiresNormalisation = Normalise::yes);
236
254 void loadImpulseResponse (AudioBuffer<float>&& buffer, double bufferSampleRate,
255 Stereo isStereo, Trim requiresTrimming, Normalise requiresNormalisation);
256
258 int getCurrentIRSize() const;
259
266 int getLatency() const;
267
268private:
269 //==============================================================================
271 const NonUniform&,
273
275
276 class Mixer
277 {
278 public:
279 void prepare (const ProcessSpec&);
280
281 template <typename ProcessWet>
284 bool isBypassed,
285 ProcessWet&&) noexcept;
286
287 void reset();
288
289 private:
290 std::array<SmoothedValue<float>, 2> volumeDry, volumeWet;
293 double sampleRate = 0;
294 bool currentIsBypassed = false;
295 };
296
297 //==============================================================================
298 class Impl;
299 std::unique_ptr<Impl> pimpl;
300
301 //==============================================================================
303 bool isActive = false;
304
305 //==============================================================================
307};
308
309} // namespace dsp
310} // namespace juce
#define noexcept
Definition DistrhoDefines.h:72
Definition juce_AudioSampleBuffer.h:34
Definition juce_File.h:45
Definition juce_HeapBlock.h:87
Definition juce_OptionalScopedPointer.h:38
Definition juce_AudioBlock.h:70
Definition juce_Convolution.cpp:1014
Definition juce_Convolution.h:277
std::array< SmoothedValue< float >, 2 > volumeDry
Definition juce_Convolution.h:290
double sampleRate
Definition juce_Convolution.h:293
void reset()
Definition juce_Convolution.cpp:1196
HeapBlock< char > dryBlockStorage
Definition juce_Convolution.h:292
void processSamples(const AudioBlock< const float > &, AudioBlock< float > &, bool isBypassed, ProcessWet &&) noexcept
Definition juce_Convolution.cpp:1149
void prepare(const ProcessSpec &)
Definition juce_Convolution.cpp:1132
AudioBlock< float > dryBlock
Definition juce_Convolution.h:291
bool currentIsBypassed
Definition juce_Convolution.h:294
std::array< SmoothedValue< float >, 2 > volumeWet
Definition juce_Convolution.h:290
Trim
Definition juce_Convolution.h:195
Convolution()
Definition juce_Convolution.cpp:1199
void prepare(const ProcessSpec &)
Definition juce_Convolution.cpp:1263
std::unique_ptr< Impl > pimpl
Definition juce_Convolution.h:299
bool isActive
Definition juce_Convolution.h:303
Mixer mixer
Definition juce_Convolution.h:302
void process(const ProcessContext &context) noexcept
Definition juce_Convolution.h:188
Stereo
Definition juce_Convolution.h:194
void reset() noexcept
Definition juce_Convolution.cpp:1270
void processSamples(const AudioBlock< const float > &, AudioBlock< float > &, bool isBypassed) noexcept
Definition juce_Convolution.cpp:1276
Convolution(const Latency &, const NonUniform &, OptionalScopedPointer< ConvolutionMessageQueue > &&)
Normalise
Definition juce_Convolution.h:196
Definition juce_Convolution.h:40
friend class Convolution
Definition juce_Convolution.h:69
ConvolutionMessageQueue(ConvolutionMessageQueue &&) noexcept
std::unique_ptr< Impl > pimpl
Definition juce_Convolution.h:67
ConvolutionMessageQueue()
Definition juce_Convolution.cpp:130
static PuglViewHint int value
Definition pugl.h:1708
#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)
#define JUCE_API
Definition juce_StandardHeader.h:152
Definition juce_AudioBlock.h:29
bool isBypassed(const ProcessorChain< Processors... > &chain) noexcept
Definition juce_ProcessorChain.h:160
Definition carla_juce.cpp:31
@ no
Definition juce_AlertWindow.cpp:567
@ yes
Definition juce_AlertWindow.cpp:567
Definition juce_Uuid.h:141
Definition Stereo.h:25
Definition juce_Convolution.h:119
int latencyInSamples
Definition juce_Convolution.h:119
Definition juce_Convolution.h:134
int headSizeInSamples
Definition juce_Convolution.h:134
Definition juce_Convolution.cpp:126
Definition juce_ProcessContext.h:38
ulg size
Definition extract.c:2350
#define const
Definition zconf.h:137