JUCE-7.0.12-0-g4f43011b96
JUCE-7.0.12-0-g4f43011b96
JUCE — C++ application framework with suport for VST, VST3, LV2 audio plug-ins
« « « Anklang Documentation
Loading...
Searching...
No Matches
juce_dsp
juce_dsp.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
26
27
/*******************************************************************************
28
The block below describes the properties of this module, and is read by
29
the Projucer to automatically generate project code that uses it.
30
For details about the syntax and how to create or use a module, see the
31
JUCE Module Format.md file.
32
33
34
BEGIN_JUCE_MODULE_DECLARATION
35
36
ID: juce_dsp
37
vendor: juce
38
version: 7.0.12
39
name: JUCE DSP classes
40
description: Classes for audio buffer manipulation, digital audio processing, filtering, oversampling, fast math functions etc.
41
website: http://www.juce.com/juce
42
license: GPL/Commercial
43
minimumCppStandard: 17
44
45
dependencies: juce_audio_formats
46
OSXFrameworks: Accelerate
47
iOSFrameworks: Accelerate
48
49
END_JUCE_MODULE_DECLARATION
50
51
*******************************************************************************/
52
53
54
#pragma once
55
56
#define JUCE_DSP_H_INCLUDED
57
58
#include <
juce_audio_basics/juce_audio_basics.h
>
59
#include <
juce_audio_formats/juce_audio_formats.h
>
60
61
#if defined (_M_X64) || defined (__amd64__) || defined (__SSE2__) || (defined (_M_IX86_FP) && _M_IX86_FP == 2)
62
63
#if defined (_M_X64) || defined (__amd64__)
64
#ifndef __SSE2__
65
#define __SSE2__
66
#endif
67
#endif
68
69
#ifndef JUCE_USE_SIMD
70
#define JUCE_USE_SIMD 1
71
#endif
72
73
#if JUCE_USE_SIMD
74
#include <immintrin.h>
75
#endif
76
77
// it's ok to check for _M_ARM below as this is only defined on Windows for Arm 32-bit
78
// which has a minimum requirement of armv7, which supports neon.
79
#elif defined (__ARM_NEON__) || defined (__ARM_NEON) || defined (__arm64__) || defined (__aarch64__) || defined (_M_ARM) || defined (_M_ARM64)
80
81
#ifndef JUCE_USE_SIMD
82
#define JUCE_USE_SIMD 1
83
#endif
84
85
#include <arm_neon.h>
86
87
#else
88
89
// No SIMD Support
90
#ifndef JUCE_USE_SIMD
91
#define JUCE_USE_SIMD 0
92
#endif
93
94
#endif
95
96
#ifndef JUCE_VECTOR_CALLTYPE
97
// __vectorcall does not work on 64-bit due to internal compiler error in
98
// release mode VS2017. Re-enable when Microsoft fixes this
99
#if _MSC_VER && JUCE_USE_SIMD && ! (defined (_M_X64) || defined (__amd64__))
100
#define JUCE_VECTOR_CALLTYPE __vectorcall
101
#else
102
#define JUCE_VECTOR_CALLTYPE
103
#endif
104
#endif
105
106
#include <
complex
>
107
108
109
//==============================================================================
119
#ifndef JUCE_ASSERTION_FIRFILTER
120
#define JUCE_ASSERTION_FIRFILTER 1
121
#endif
122
134
#ifndef JUCE_DSP_USE_INTEL_MKL
135
#define JUCE_DSP_USE_INTEL_MKL 0
136
#endif
137
150
#ifndef JUCE_DSP_USE_SHARED_FFTW
151
#define JUCE_DSP_USE_SHARED_FFTW 0
152
#endif
153
165
#ifndef JUCE_DSP_USE_STATIC_FFTW
166
#define JUCE_DSP_USE_STATIC_FFTW 0
167
#endif
168
181
#ifndef JUCE_DSP_ENABLE_SNAP_TO_ZERO
182
#define JUCE_DSP_ENABLE_SNAP_TO_ZERO 1
183
#endif
184
185
186
//==============================================================================
187
#undef Complex
// apparently some C libraries actually define these symbols (!)
188
#undef Factor
189
#undef check
190
191
namespace
juce::dsp
192
{
193
194
template
<
typename
Type>
195
using
Complex =
std::complex<Type>
;
196
197
template
<
size_t
len,
typename
T>
198
using
FixedSizeFunction =
juce::FixedSizeFunction<len, T>
;
199
200
//==============================================================================
201
namespace
util
202
{
206
#if JUCE_DSP_ENABLE_SNAP_TO_ZERO
207
inline
void
snapToZero (
float
& x)
noexcept
{ JUCE_SNAP_TO_ZERO (x); }
208
#ifndef DOXYGEN
209
inline
void
snapToZero (
double
& x)
noexcept
{ JUCE_SNAP_TO_ZERO (x); }
210
inline
void
snapToZero (
long
double
& x)
noexcept
{ JUCE_SNAP_TO_ZERO (x); }
211
#endif
212
#else
213
inline
void
snapToZero ([[
maybe_unused
]]
float
& x)
noexcept
{}
214
#ifndef DOXYGEN
215
inline
void
snapToZero ([[
maybe_unused
]]
double
& x)
noexcept
{}
216
inline
void
snapToZero ([[
maybe_unused
]]
long
double
& x)
noexcept
{}
217
#endif
218
#endif
219
}
220
221
}
222
223
//==============================================================================
224
#if JUCE_USE_SIMD
225
#include "
native/juce_SIMDNativeOps_fallback.h
"
226
227
// include the correct native file for this build target CPU
228
#if defined (__i386__) || defined (__amd64__) || defined (_M_X64) || defined (_X86_) || defined (_M_IX86)
229
#ifdef __AVX2__
230
#include "
native/juce_SIMDNativeOps_avx.h
"
231
#else
232
#include "
native/juce_SIMDNativeOps_sse.h
"
233
#endif
234
#elif JUCE_ARM
235
#include "
native/juce_SIMDNativeOps_neon.h
"
236
#else
237
#error "SIMD register support not implemented for this platform"
238
#endif
239
240
#include "
containers/juce_SIMDRegister.h
"
241
#include "
containers/juce_SIMDRegister_Impl.h
"
242
#endif
243
244
#include "
maths/juce_SpecialFunctions.h
"
245
#include "
maths/juce_Matrix.h
"
246
#include "
maths/juce_Phase.h
"
247
#include "
maths/juce_Polynomial.h
"
248
#include "
maths/juce_FastMathApproximations.h
"
249
#include "
maths/juce_LookupTable.h
"
250
#include "
maths/juce_LogRampedValue.h
"
251
#include "
containers/juce_AudioBlock.h
"
252
#include "
processors/juce_ProcessContext.h
"
253
#include "
processors/juce_ProcessorWrapper.h
"
254
#include "
processors/juce_ProcessorChain.h
"
255
#include "
processors/juce_ProcessorDuplicator.h
"
256
#include "
processors/juce_IIRFilter.h
"
257
#include "
processors/juce_IIRFilter_Impl.h
"
258
#include "
processors/juce_FIRFilter.h
"
259
#include "
processors/juce_StateVariableFilter.h
"
260
#include "
processors/juce_FirstOrderTPTFilter.h
"
261
#include "
processors/juce_Panner.h
"
262
#include "
processors/juce_DelayLine.h
"
263
#include "
processors/juce_Oversampling.h
"
264
#include "
processors/juce_BallisticsFilter.h
"
265
#include "
processors/juce_LinkwitzRileyFilter.h
"
266
#include "
processors/juce_DryWetMixer.h
"
267
#include "
processors/juce_StateVariableTPTFilter.h
"
268
#include "
frequency/juce_FFT.h
"
269
#include "
frequency/juce_Convolution.h
"
270
#include "
frequency/juce_Windowing.h
"
271
#include "
filter_design/juce_FilterDesign.h
"
272
#include "
widgets/juce_Reverb.h
"
273
#include "
widgets/juce_Bias.h
"
274
#include "
widgets/juce_Gain.h
"
275
#include "
widgets/juce_WaveShaper.h
"
276
#include "
widgets/juce_Oscillator.h
"
277
#include "
widgets/juce_LadderFilter.h
"
278
#include "
widgets/juce_Compressor.h
"
279
#include "
widgets/juce_NoiseGate.h
"
280
#include "
widgets/juce_Limiter.h
"
281
#include "
widgets/juce_Phaser.h
"
282
#include "
widgets/juce_Chorus.h
"
complex
juce_AudioBlock.h
juce_BallisticsFilter.h
juce_Bias.h
juce_Chorus.h
juce_Compressor.h
juce_Convolution.h
juce_DelayLine.h
juce_DryWetMixer.h
juce_FFT.h
juce_FIRFilter.h
juce_FastMathApproximations.h
juce_FilterDesign.h
juce_FirstOrderTPTFilter.h
juce_Gain.h
juce_IIRFilter_Impl.h
juce_LadderFilter.h
juce_Limiter.h
juce_LinkwitzRileyFilter.h
juce_LogRampedValue.h
juce_LookupTable.h
juce_Matrix.h
juce_NoiseGate.h
juce_Oscillator.h
juce_Oversampling.h
juce_Panner.h
juce_Phase.h
juce_Phaser.h
juce_Polynomial.h
juce_ProcessContext.h
juce_ProcessorChain.h
juce_ProcessorDuplicator.h
juce_ProcessorWrapper.h
juce_SIMDNativeOps_avx.h
juce_SIMDNativeOps_fallback.h
juce_SIMDNativeOps_neon.h
juce_SIMDNativeOps_sse.h
juce_SIMDRegister.h
juce_SIMDRegister_Impl.h
juce_SpecialFunctions.h
juce_StateVariableFilter.h
juce_StateVariableTPTFilter.h
juce_WaveShaper.h
juce_Windowing.h
juce_audio_basics.h
juce_audio_formats.h
juce_IIRFilter.h
juce_Reverb.h
juce::unalignedPointerCast
Type unalignedPointerCast(void *ptr) noexcept
Casts a pointer to another type via void*, which suppresses the cast-align warning which sometimes ar...
Definition
juce_Memory.h:88
« « « Anklang Documentation