OpenShot Audio Library | OpenShotAudio: juce_dsp.h Source File

OpenShot Audio Library | OpenShotAudio 1.0.0

Loading...
Searching...
No Matches
juce_dsp.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
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.10
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
191namespace juce::dsp
192{
193
194template <typename Type>
195using Complex = std::complex<Type>;
196
197template <size_t len, typename T>
198using FixedSizeFunction = juce::FixedSizeFunction<len, T>;
199
200//==============================================================================
201namespace 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"