diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100755
index 0000000..6228f7e
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,10 @@
+cmake_minimum_required(VERSION 2.8)
+project(1mCore)
+
+option(BUILD_PXCORE "BUILD_WITH_DSPFILTERS" ON)
+option(BUILD_PXSCENE "BUILD_1MCORE" ON)
+
+if (BUILD_1MCORE)
+ message("Building 1mCore")
+ add_subdirectory(src/)
+endif (BUILD_1MCORE)
diff --git a/external/DSPFilters/README.md b/external/DSPFilters/README.md
new file mode 100644
index 0000000..6a1e4b8
--- /dev/null
+++ b/external/DSPFilters/README.md
@@ -0,0 +1,99 @@
+## A Collection of Useful C++ Classes for Digital Signal Processing
+
+> "Techniques for digital signal processing are well guarded and held
+> close to the chest, as they have valuable applications for multimedia
+> content. The black art of Infinite Impulse Response ("IIR") filtering
+> has remained veiled in secrecy with little publicly available source
+> code...until now."
+
+
+
+
+
+### What is this?
+
+Building on the work of cherished luminaries such as Sophocles Orfanidis,
+Andreas Antoniou, Martin Holters, and Udo Zolzer, this library harnesses
+the power of C++ templates to solve a useful problem in Digital Signal
+Processing: the realization of multichannel IIR filters of arbitrary order
+and prescribed specifications with various properties such as Butterworth,
+Chebyshev, Elliptic, and Optimum-L (Legendre) responses. The library is
+provided under the MIT license and is therefore fully compatible with
+proprietary usage.
+
+Classes are designed as independent re-usable building blocks. Use some or
+all of the provided features, or extend the functionality by writing your
+own objects that plug into the robust framework. Only the code that you
+need will get linked into your application. Here's a list of features:
+
+- Exclusive focus on IIR filters instead of boring FIR filters
+- Complete implementation of all "RBJ Biquad" Cookbook filter formulas
+- Butterworth, Chebyshev, Elliptic, Bessel, Legendre designs
+- Low Pass, High Pass, Band Pass, Band Stop transformations
+- Low, High, and Band Shelf filter implementations for most types
+- Smooth interpolation of filter settings, pole/zeros, and biquad
+ coefficients to achieve seamless parameter changes
+- Representation of digital filters using poles and zeros
+- Realization using Direct Form I, Direct Form II, or user provided class
+- Fully factored to minimize template instantiations
+- "Design" layer provides runtime introspection into a filter
+- Utility template functions for manipulating buffers of sample data
+- No calls to malloc or new, great for embedded systems
+- No external dependencies, just the standard C++ library!
+
+Using these filters is easy:
+
+ // Create a Chebyshev type I Band Stop filter of order 3
+ // with state for processing 2 channels of audio.
+ Dsp::SimpleFilter , 2> f;
+ f.setup (3, // order
+ 44100,// sample rate
+ 4000, // center frequency
+ 880, // band width
+ 1); // ripple dB
+ f.process (numSamples, arrayOfChannels);
+
+An accompanying demonstration program that works on most popular
+platforms by using the separately licensed Juce application framework
+(included), exercises all the functionality of the library, including
+these features:
+
+- Dynamic interface creates itself using filter introspection capabilities
+- Audio playback with real time application of a selected filter
+- Live time stretching and amplitude modulation without clicks or popping
+- Charts to show magnitude, phase response and pole/zero placement
+- Thread safety "best practices" for audio applications
+
+This is the provided DSP Filters Demo application, which demonstrates the
+features of the library and uses the Juce application framework to run on
+all popular platforms:
+
+
+
+If you've been searching in futility on the Internet for some source code
+for implementing high order filters, then look no further because this is
+it! Whether you are a student of C++ or digital signal processing, a writer
+of audio plugins, or even a VST synthesizer coder, "A Collection of Useful
+C++ Classes for Digital Signal Processing" might have something for you!
+
+### DSP Filters on the Web
+
+DSP Filters Official Discussion Forum
+http://www.kvraudio.com/forum/viewtopic.php?t=249926
+
+DSP and Audio Plugin Discussion Forum
+http://www.kvraudio.com/forum/viewforum.php?f=33
+
+Juce Official Discussion Forum
+http://www.rawmaterialsoftware.com/index.php
+
+Juce Official Site
+http://www.rawmaterialsoftware.com
+
+### Terms and Conditions
+DSP Filters Library and DSP Demo Application Copyright (c) 2009 by
+[Vinnie Falco](http://github.com/vinniefalco)
+Source code is provided under the
+[MIT License](http://www.opensource.org/licenses/mit-license.php)
+The [Juce Library](http://www.rawmaterialsoftware.com) is licensed
+separately, from [Raw Material Software](http://rawmaterialsoftware.com).
diff --git a/external/DSPFilters/Research Papers/EllipticFilterDesign.pdf b/external/DSPFilters/Research Papers/EllipticFilterDesign.pdf
new file mode 100644
index 0000000..9a639ef
Binary files /dev/null and b/external/DSPFilters/Research Papers/EllipticFilterDesign.pdf differ
diff --git a/external/DSPFilters/Research Papers/LegendreFilterDesign.pdf b/external/DSPFilters/Research Papers/LegendreFilterDesign.pdf
new file mode 100644
index 0000000..924e33f
Binary files /dev/null and b/external/DSPFilters/Research Papers/LegendreFilterDesign.pdf differ
diff --git a/external/DSPFilters/Research Papers/ParametricEqDesign.pdf b/external/DSPFilters/Research Papers/ParametricEqDesign.pdf
new file mode 100644
index 0000000..8aca986
Binary files /dev/null and b/external/DSPFilters/Research Papers/ParametricEqDesign.pdf differ
diff --git a/external/DSPFilters/shared/CMakeLists.txt b/external/DSPFilters/shared/CMakeLists.txt
new file mode 100644
index 0000000..5b37b30
--- /dev/null
+++ b/external/DSPFilters/shared/CMakeLists.txt
@@ -0,0 +1,25 @@
+cmake_minimum_required(VERSION 3.0)
+
+project (DSPFilters_Solution)
+
+set (CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+set(CMAKE_BUILD_TYPE Release)
+
+if((${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC))
+ set(MYFLAGS "/O2 /WX- /MT")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MYFLAGS}")
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${MYFLAGS}")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MYFLAGS}")
+ set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${MYFLAGS}")
+ include(CheckSymbolExists)
+ check_symbol_exists(snprintf "stdio.h" HAVE_SNPRINTF)
+ if(NOT HAVE_SNPRINTF)
+ add_definitions(-Dsnprintf=_snprintf)
+ endif()
+endif()
+
+add_subdirectory(DSPFilters)
+#add_subdirectory(JuceAmalgam)
+#add_subdirectory(DSPFiltersDemo)
diff --git a/external/DSPFilters/shared/DSPFilters/Builds/VisualStudio2008/DSPFilters.vcproj b/external/DSPFilters/shared/DSPFilters/Builds/VisualStudio2008/DSPFilters.vcproj
new file mode 100644
index 0000000..b62bd32
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/Builds/VisualStudio2008/DSPFilters.vcproj
@@ -0,0 +1,322 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/external/DSPFilters/shared/DSPFilters/Builds/VisualStudio2010/DSPFilters.vcxproj b/external/DSPFilters/shared/DSPFilters/Builds/VisualStudio2010/DSPFilters.vcxproj
new file mode 100644
index 0000000..4ddeca7
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/Builds/VisualStudio2010/DSPFilters.vcxproj
@@ -0,0 +1,189 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ {A34C661C-A167-4B61-8086-54957C90E800}
+ Win32Proj
+ DSPFilters
+
+
+
+ StaticLibrary
+ true
+
+
+ StaticLibrary
+ true
+
+
+ StaticLibrary
+ false
+
+
+ StaticLibrary
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Level3
+ WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)
+ ../../include
+
+
+ Windows
+ true
+
+
+
+
+
+
+ WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)
+ ../../include
+
+
+ Windows
+ true
+
+
+
+
+ Level3
+
+
+ WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)
+ ../../include
+
+
+ Windows
+ true
+ true
+ true
+
+
+
+
+ Level3
+
+
+ WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)
+ ../../include
+
+
+ Windows
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Document
+
+
+ Document
+
+
+ Document
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/external/DSPFilters/shared/DSPFilters/Builds/VisualStudio2010/DSPFilters.vcxproj.filters b/external/DSPFilters/shared/DSPFilters/Builds/VisualStudio2010/DSPFilters.vcxproj.filters
new file mode 100644
index 0000000..a727a80
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/Builds/VisualStudio2010/DSPFilters.vcxproj.filters
@@ -0,0 +1,152 @@
+
+
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {105d5716-f279-4189-824d-7b8c653b1502}
+
+
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+
+
+ _props %28shared project settings%29
+
+
+ _props %28shared project settings%29
+
+
+ _props %28shared project settings%29
+
+
+
+
\ No newline at end of file
diff --git a/external/DSPFilters/shared/DSPFilters/Builds/XCode4/DSPFilters.xcodeproj/project.pbxproj b/external/DSPFilters/shared/DSPFilters/Builds/XCode4/DSPFilters.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..fd9a2bc
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/Builds/XCode4/DSPFilters.xcodeproj/project.pbxproj
@@ -0,0 +1,513 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 2E7DB565140DFCA9009FE107 /* Bessel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB53D140DFCA9009FE107 /* Bessel.cpp */; };
+ 2E7DB566140DFCA9009FE107 /* Bessel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB53D140DFCA9009FE107 /* Bessel.cpp */; };
+ 2E7DB567140DFCA9009FE107 /* Biquad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB53E140DFCA9009FE107 /* Biquad.cpp */; };
+ 2E7DB568140DFCA9009FE107 /* Biquad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB53E140DFCA9009FE107 /* Biquad.cpp */; };
+ 2E7DB569140DFCA9009FE107 /* Butterworth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB53F140DFCA9009FE107 /* Butterworth.cpp */; };
+ 2E7DB56A140DFCA9009FE107 /* Butterworth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB53F140DFCA9009FE107 /* Butterworth.cpp */; };
+ 2E7DB56B140DFCA9009FE107 /* Cascade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB540140DFCA9009FE107 /* Cascade.cpp */; };
+ 2E7DB56C140DFCA9009FE107 /* Cascade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB540140DFCA9009FE107 /* Cascade.cpp */; };
+ 2E7DB56D140DFCA9009FE107 /* ChebyshevI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB541140DFCA9009FE107 /* ChebyshevI.cpp */; };
+ 2E7DB56E140DFCA9009FE107 /* ChebyshevI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB541140DFCA9009FE107 /* ChebyshevI.cpp */; };
+ 2E7DB56F140DFCA9009FE107 /* ChebyshevII.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB542140DFCA9009FE107 /* ChebyshevII.cpp */; };
+ 2E7DB570140DFCA9009FE107 /* ChebyshevII.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB542140DFCA9009FE107 /* ChebyshevII.cpp */; };
+ 2E7DB571140DFCA9009FE107 /* Custom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB543140DFCA9009FE107 /* Custom.cpp */; };
+ 2E7DB572140DFCA9009FE107 /* Custom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB543140DFCA9009FE107 /* Custom.cpp */; };
+ 2E7DB573140DFCA9009FE107 /* Design.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB544140DFCA9009FE107 /* Design.cpp */; };
+ 2E7DB574140DFCA9009FE107 /* Design.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB544140DFCA9009FE107 /* Design.cpp */; };
+ 2E7DB575140DFCA9009FE107 /* Documentation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB545140DFCA9009FE107 /* Documentation.cpp */; };
+ 2E7DB576140DFCA9009FE107 /* Documentation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB545140DFCA9009FE107 /* Documentation.cpp */; };
+ 2E7DB577140DFCA9009FE107 /* Elliptic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB546140DFCA9009FE107 /* Elliptic.cpp */; };
+ 2E7DB578140DFCA9009FE107 /* Elliptic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB546140DFCA9009FE107 /* Elliptic.cpp */; };
+ 2E7DB579140DFCA9009FE107 /* Filter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB547140DFCA9009FE107 /* Filter.cpp */; };
+ 2E7DB57A140DFCA9009FE107 /* Filter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB547140DFCA9009FE107 /* Filter.cpp */; };
+ 2E7DB57B140DFCA9009FE107 /* Legendre.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB548140DFCA9009FE107 /* Legendre.cpp */; };
+ 2E7DB57C140DFCA9009FE107 /* Legendre.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB548140DFCA9009FE107 /* Legendre.cpp */; };
+ 2E7DB57D140DFCA9009FE107 /* Param.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB549140DFCA9009FE107 /* Param.cpp */; };
+ 2E7DB57E140DFCA9009FE107 /* Param.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB549140DFCA9009FE107 /* Param.cpp */; };
+ 2E7DB57F140DFCA9009FE107 /* PoleFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB54A140DFCA9009FE107 /* PoleFilter.cpp */; };
+ 2E7DB580140DFCA9009FE107 /* PoleFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB54A140DFCA9009FE107 /* PoleFilter.cpp */; };
+ 2E7DB581140DFCA9009FE107 /* RBJ.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB54B140DFCA9009FE107 /* RBJ.cpp */; };
+ 2E7DB582140DFCA9009FE107 /* RBJ.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB54B140DFCA9009FE107 /* RBJ.cpp */; };
+ 2E7DB583140DFCA9009FE107 /* RootFinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB54C140DFCA9009FE107 /* RootFinder.cpp */; };
+ 2E7DB584140DFCA9009FE107 /* RootFinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB54C140DFCA9009FE107 /* RootFinder.cpp */; };
+ 2E7DB585140DFCA9009FE107 /* State.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB54D140DFCA9009FE107 /* State.cpp */; };
+ 2E7DB586140DFCA9009FE107 /* State.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E7DB54D140DFCA9009FE107 /* State.cpp */; };
+ 2E7DB587140DFCA9009FE107 /* Bessel.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB54E140DFCA9009FE107 /* Bessel.h */; };
+ 2E7DB588140DFCA9009FE107 /* Bessel.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB54E140DFCA9009FE107 /* Bessel.h */; };
+ 2E7DB589140DFCA9009FE107 /* Biquad.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB54F140DFCA9009FE107 /* Biquad.h */; };
+ 2E7DB58A140DFCA9009FE107 /* Biquad.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB54F140DFCA9009FE107 /* Biquad.h */; };
+ 2E7DB58B140DFCA9009FE107 /* Butterworth.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB550140DFCA9009FE107 /* Butterworth.h */; };
+ 2E7DB58C140DFCA9009FE107 /* Butterworth.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB550140DFCA9009FE107 /* Butterworth.h */; };
+ 2E7DB58D140DFCA9009FE107 /* Cascade.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB551140DFCA9009FE107 /* Cascade.h */; };
+ 2E7DB58E140DFCA9009FE107 /* Cascade.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB551140DFCA9009FE107 /* Cascade.h */; };
+ 2E7DB58F140DFCA9009FE107 /* ChebyshevI.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB552140DFCA9009FE107 /* ChebyshevI.h */; };
+ 2E7DB590140DFCA9009FE107 /* ChebyshevI.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB552140DFCA9009FE107 /* ChebyshevI.h */; };
+ 2E7DB591140DFCA9009FE107 /* ChebyshevII.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB553140DFCA9009FE107 /* ChebyshevII.h */; };
+ 2E7DB592140DFCA9009FE107 /* ChebyshevII.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB553140DFCA9009FE107 /* ChebyshevII.h */; };
+ 2E7DB593140DFCA9009FE107 /* Common.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB554140DFCA9009FE107 /* Common.h */; };
+ 2E7DB594140DFCA9009FE107 /* Common.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB554140DFCA9009FE107 /* Common.h */; };
+ 2E7DB595140DFCA9009FE107 /* Custom.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB555140DFCA9009FE107 /* Custom.h */; };
+ 2E7DB596140DFCA9009FE107 /* Custom.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB555140DFCA9009FE107 /* Custom.h */; };
+ 2E7DB597140DFCA9009FE107 /* Design.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB556140DFCA9009FE107 /* Design.h */; };
+ 2E7DB598140DFCA9009FE107 /* Design.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB556140DFCA9009FE107 /* Design.h */; };
+ 2E7DB599140DFCA9009FE107 /* Dsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB557140DFCA9009FE107 /* Dsp.h */; };
+ 2E7DB59A140DFCA9009FE107 /* Dsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB557140DFCA9009FE107 /* Dsp.h */; };
+ 2E7DB59B140DFCA9009FE107 /* Elliptic.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB558140DFCA9009FE107 /* Elliptic.h */; };
+ 2E7DB59C140DFCA9009FE107 /* Elliptic.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB558140DFCA9009FE107 /* Elliptic.h */; };
+ 2E7DB59D140DFCA9009FE107 /* Filter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB559140DFCA9009FE107 /* Filter.h */; };
+ 2E7DB59E140DFCA9009FE107 /* Filter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB559140DFCA9009FE107 /* Filter.h */; };
+ 2E7DB59F140DFCA9009FE107 /* Layout.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB55A140DFCA9009FE107 /* Layout.h */; };
+ 2E7DB5A0140DFCA9009FE107 /* Layout.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB55A140DFCA9009FE107 /* Layout.h */; };
+ 2E7DB5A1140DFCA9009FE107 /* Legendre.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB55B140DFCA9009FE107 /* Legendre.h */; };
+ 2E7DB5A2140DFCA9009FE107 /* Legendre.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB55B140DFCA9009FE107 /* Legendre.h */; };
+ 2E7DB5A3140DFCA9009FE107 /* MathSupplement.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB55C140DFCA9009FE107 /* MathSupplement.h */; };
+ 2E7DB5A4140DFCA9009FE107 /* MathSupplement.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB55C140DFCA9009FE107 /* MathSupplement.h */; };
+ 2E7DB5A5140DFCA9009FE107 /* Params.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB55D140DFCA9009FE107 /* Params.h */; };
+ 2E7DB5A6140DFCA9009FE107 /* Params.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB55D140DFCA9009FE107 /* Params.h */; };
+ 2E7DB5A7140DFCA9009FE107 /* PoleFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB55E140DFCA9009FE107 /* PoleFilter.h */; };
+ 2E7DB5A8140DFCA9009FE107 /* PoleFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB55E140DFCA9009FE107 /* PoleFilter.h */; };
+ 2E7DB5A9140DFCA9009FE107 /* RBJ.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB55F140DFCA9009FE107 /* RBJ.h */; };
+ 2E7DB5AA140DFCA9009FE107 /* RBJ.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB55F140DFCA9009FE107 /* RBJ.h */; };
+ 2E7DB5AB140DFCA9009FE107 /* RootFinder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB560140DFCA9009FE107 /* RootFinder.h */; };
+ 2E7DB5AC140DFCA9009FE107 /* RootFinder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB560140DFCA9009FE107 /* RootFinder.h */; };
+ 2E7DB5AD140DFCA9009FE107 /* SmoothedFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB561140DFCA9009FE107 /* SmoothedFilter.h */; };
+ 2E7DB5AE140DFCA9009FE107 /* SmoothedFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB561140DFCA9009FE107 /* SmoothedFilter.h */; };
+ 2E7DB5AF140DFCA9009FE107 /* State.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB562140DFCA9009FE107 /* State.h */; };
+ 2E7DB5B0140DFCA9009FE107 /* State.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB562140DFCA9009FE107 /* State.h */; };
+ 2E7DB5B1140DFCA9009FE107 /* Types.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB563140DFCA9009FE107 /* Types.h */; };
+ 2E7DB5B2140DFCA9009FE107 /* Types.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB563140DFCA9009FE107 /* Types.h */; };
+ 2E7DB5B3140DFCA9009FE107 /* Utilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB564140DFCA9009FE107 /* Utilities.h */; };
+ 2E7DB5B4140DFCA9009FE107 /* Utilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7DB564140DFCA9009FE107 /* Utilities.h */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 2E7DB503140DFBDF009FE107 /* libDSPFiltersMacOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libDSPFiltersMacOS.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2E7DB526140DFC22009FE107 /* libDSPFiltersiOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libDSPFiltersiOS.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2E7DB53D140DFCA9009FE107 /* Bessel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Bessel.cpp; path = ../../DSPFilters/source/Bessel.cpp; sourceTree = ""; };
+ 2E7DB53E140DFCA9009FE107 /* Biquad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Biquad.cpp; sourceTree = ""; };
+ 2E7DB53F140DFCA9009FE107 /* Butterworth.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Butterworth.cpp; sourceTree = ""; };
+ 2E7DB540140DFCA9009FE107 /* Cascade.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Cascade.cpp; sourceTree = ""; };
+ 2E7DB541140DFCA9009FE107 /* ChebyshevI.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ChebyshevI.cpp; sourceTree = ""; };
+ 2E7DB542140DFCA9009FE107 /* ChebyshevII.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ChebyshevII.cpp; sourceTree = ""; };
+ 2E7DB543140DFCA9009FE107 /* Custom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Custom.cpp; sourceTree = ""; };
+ 2E7DB544140DFCA9009FE107 /* Design.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Design.cpp; sourceTree = ""; };
+ 2E7DB545140DFCA9009FE107 /* Documentation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Documentation.cpp; sourceTree = ""; };
+ 2E7DB546140DFCA9009FE107 /* Elliptic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Elliptic.cpp; sourceTree = ""; };
+ 2E7DB547140DFCA9009FE107 /* Filter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Filter.cpp; sourceTree = ""; };
+ 2E7DB548140DFCA9009FE107 /* Legendre.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Legendre.cpp; sourceTree = ""; };
+ 2E7DB549140DFCA9009FE107 /* Param.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Param.cpp; sourceTree = ""; };
+ 2E7DB54A140DFCA9009FE107 /* PoleFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PoleFilter.cpp; sourceTree = ""; };
+ 2E7DB54B140DFCA9009FE107 /* RBJ.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RBJ.cpp; sourceTree = ""; };
+ 2E7DB54C140DFCA9009FE107 /* RootFinder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RootFinder.cpp; sourceTree = ""; };
+ 2E7DB54D140DFCA9009FE107 /* State.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = State.cpp; sourceTree = ""; };
+ 2E7DB54E140DFCA9009FE107 /* Bessel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Bessel.h; path = ../../include/DspFilters/Bessel.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB54F140DFCA9009FE107 /* Biquad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Biquad.h; path = ../../include/DspFilters/Biquad.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB550140DFCA9009FE107 /* Butterworth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Butterworth.h; path = ../../include/DspFilters/Butterworth.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB551140DFCA9009FE107 /* Cascade.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Cascade.h; path = ../../include/DspFilters/Cascade.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB552140DFCA9009FE107 /* ChebyshevI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChebyshevI.h; path = ../../include/DspFilters/ChebyshevI.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB553140DFCA9009FE107 /* ChebyshevII.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChebyshevII.h; path = ../../include/DspFilters/ChebyshevII.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB554140DFCA9009FE107 /* Common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Common.h; path = ../../include/DspFilters/Common.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB555140DFCA9009FE107 /* Custom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Custom.h; path = ../../include/DspFilters/Custom.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB556140DFCA9009FE107 /* Design.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Design.h; path = ../../include/DspFilters/Design.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB557140DFCA9009FE107 /* Dsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Dsp.h; path = ../../include/DspFilters/Dsp.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB558140DFCA9009FE107 /* Elliptic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Elliptic.h; path = ../../include/DspFilters/Elliptic.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB559140DFCA9009FE107 /* Filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Filter.h; path = ../../include/DspFilters/Filter.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB55A140DFCA9009FE107 /* Layout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Layout.h; path = ../../include/DspFilters/Layout.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB55B140DFCA9009FE107 /* Legendre.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Legendre.h; path = ../../include/DspFilters/Legendre.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB55C140DFCA9009FE107 /* MathSupplement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MathSupplement.h; path = ../../include/DspFilters/MathSupplement.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB55D140DFCA9009FE107 /* Params.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Params.h; path = ../../include/DspFilters/Params.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB55E140DFCA9009FE107 /* PoleFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PoleFilter.h; path = ../../include/DspFilters/PoleFilter.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB55F140DFCA9009FE107 /* RBJ.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RBJ.h; path = ../../include/DspFilters/RBJ.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB560140DFCA9009FE107 /* RootFinder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RootFinder.h; path = ../../include/DspFilters/RootFinder.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB561140DFCA9009FE107 /* SmoothedFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SmoothedFilter.h; path = ../../include/DspFilters/SmoothedFilter.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB562140DFCA9009FE107 /* State.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = State.h; path = ../../include/DspFilters/State.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB563140DFCA9009FE107 /* Types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Types.h; path = ../../include/DspFilters/Types.h; sourceTree = SOURCE_ROOT; };
+ 2E7DB564140DFCA9009FE107 /* Utilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utilities.h; path = ../../include/DspFilters/Utilities.h; sourceTree = SOURCE_ROOT; };
+ 2EF3B476140F5059002CE947 /* Shared.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Shared.xcconfig; path = ../../../../user/settings/XCode4/Shared.xcconfig; sourceTree = SOURCE_ROOT; };
+ 2EF3B477140F5059002CE947 /* SharedDebug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = SharedDebug.xcconfig; path = ../../../../user/settings/XCode4/SharedDebug.xcconfig; sourceTree = SOURCE_ROOT; };
+ 2EF3B478140F5059002CE947 /* SharediOS.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = SharediOS.xcconfig; path = ../../../../user/settings/XCode4/SharediOS.xcconfig; sourceTree = SOURCE_ROOT; };
+ 2EF3B479140F5059002CE947 /* SharedMacOS.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = SharedMacOS.xcconfig; path = ../../../../user/settings/XCode4/SharedMacOS.xcconfig; sourceTree = SOURCE_ROOT; };
+ 2EF3B47A140F5059002CE947 /* SharedRelease.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = SharedRelease.xcconfig; path = ../../../../user/settings/XCode4/SharedRelease.xcconfig; sourceTree = SOURCE_ROOT; };
+ 2EF3B47B140F5059002CE947 /* SharedReleaseApp.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = SharedReleaseApp.xcconfig; path = ../../../../user/settings/XCode4/SharedReleaseApp.xcconfig; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 2E7DB500140DFBDF009FE107 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2E7DB523140DFC22009FE107 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 2E7DB4F8140DFBDF009FE107 = {
+ isa = PBXGroup;
+ children = (
+ 2E7DB53C140DFCA9009FE107 /* include */,
+ 2E7DB53B140DFCA9009FE107 /* source */,
+ 2EF3B475140F5059002CE947 /* xcconfigs (shared build settings) */,
+ 2E7DB504140DFBDF009FE107 /* Products */,
+ );
+ sourceTree = "";
+ };
+ 2E7DB504140DFBDF009FE107 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 2E7DB503140DFBDF009FE107 /* libDSPFiltersMacOS.a */,
+ 2E7DB526140DFC22009FE107 /* libDSPFiltersiOS.a */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 2E7DB53B140DFCA9009FE107 /* source */ = {
+ isa = PBXGroup;
+ children = (
+ 2E7DB53D140DFCA9009FE107 /* Bessel.cpp */,
+ 2E7DB53E140DFCA9009FE107 /* Biquad.cpp */,
+ 2E7DB53F140DFCA9009FE107 /* Butterworth.cpp */,
+ 2E7DB540140DFCA9009FE107 /* Cascade.cpp */,
+ 2E7DB541140DFCA9009FE107 /* ChebyshevI.cpp */,
+ 2E7DB542140DFCA9009FE107 /* ChebyshevII.cpp */,
+ 2E7DB543140DFCA9009FE107 /* Custom.cpp */,
+ 2E7DB544140DFCA9009FE107 /* Design.cpp */,
+ 2E7DB545140DFCA9009FE107 /* Documentation.cpp */,
+ 2E7DB546140DFCA9009FE107 /* Elliptic.cpp */,
+ 2E7DB547140DFCA9009FE107 /* Filter.cpp */,
+ 2E7DB548140DFCA9009FE107 /* Legendre.cpp */,
+ 2E7DB549140DFCA9009FE107 /* Param.cpp */,
+ 2E7DB54A140DFCA9009FE107 /* PoleFilter.cpp */,
+ 2E7DB54B140DFCA9009FE107 /* RBJ.cpp */,
+ 2E7DB54C140DFCA9009FE107 /* RootFinder.cpp */,
+ 2E7DB54D140DFCA9009FE107 /* State.cpp */,
+ );
+ name = source;
+ path = ../../source;
+ sourceTree = "";
+ };
+ 2E7DB53C140DFCA9009FE107 /* include */ = {
+ isa = PBXGroup;
+ children = (
+ 2E7DB54E140DFCA9009FE107 /* Bessel.h */,
+ 2E7DB54F140DFCA9009FE107 /* Biquad.h */,
+ 2E7DB550140DFCA9009FE107 /* Butterworth.h */,
+ 2E7DB551140DFCA9009FE107 /* Cascade.h */,
+ 2E7DB552140DFCA9009FE107 /* ChebyshevI.h */,
+ 2E7DB553140DFCA9009FE107 /* ChebyshevII.h */,
+ 2E7DB554140DFCA9009FE107 /* Common.h */,
+ 2E7DB555140DFCA9009FE107 /* Custom.h */,
+ 2E7DB556140DFCA9009FE107 /* Design.h */,
+ 2E7DB557140DFCA9009FE107 /* Dsp.h */,
+ 2E7DB558140DFCA9009FE107 /* Elliptic.h */,
+ 2E7DB559140DFCA9009FE107 /* Filter.h */,
+ 2E7DB55A140DFCA9009FE107 /* Layout.h */,
+ 2E7DB55B140DFCA9009FE107 /* Legendre.h */,
+ 2E7DB55C140DFCA9009FE107 /* MathSupplement.h */,
+ 2E7DB55D140DFCA9009FE107 /* Params.h */,
+ 2E7DB55E140DFCA9009FE107 /* PoleFilter.h */,
+ 2E7DB55F140DFCA9009FE107 /* RBJ.h */,
+ 2E7DB560140DFCA9009FE107 /* RootFinder.h */,
+ 2E7DB561140DFCA9009FE107 /* SmoothedFilter.h */,
+ 2E7DB562140DFCA9009FE107 /* State.h */,
+ 2E7DB563140DFCA9009FE107 /* Types.h */,
+ 2E7DB564140DFCA9009FE107 /* Utilities.h */,
+ );
+ name = include;
+ path = ../../../Builds/XCode4;
+ sourceTree = "";
+ };
+ 2EF3B475140F5059002CE947 /* xcconfigs (shared build settings) */ = {
+ isa = PBXGroup;
+ children = (
+ 2EF3B476140F5059002CE947 /* Shared.xcconfig */,
+ 2EF3B477140F5059002CE947 /* SharedDebug.xcconfig */,
+ 2EF3B478140F5059002CE947 /* SharediOS.xcconfig */,
+ 2EF3B479140F5059002CE947 /* SharedMacOS.xcconfig */,
+ 2EF3B47A140F5059002CE947 /* SharedRelease.xcconfig */,
+ 2EF3B47B140F5059002CE947 /* SharedReleaseApp.xcconfig */,
+ );
+ name = "xcconfigs (shared build settings)";
+ path = ../../../Builds/XCode4/xcconfigs;
+ sourceTree = SOURCE_ROOT;
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ 2E7DB501140DFBDF009FE107 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2E7DB587140DFCA9009FE107 /* Bessel.h in Headers */,
+ 2E7DB589140DFCA9009FE107 /* Biquad.h in Headers */,
+ 2E7DB58B140DFCA9009FE107 /* Butterworth.h in Headers */,
+ 2E7DB58D140DFCA9009FE107 /* Cascade.h in Headers */,
+ 2E7DB58F140DFCA9009FE107 /* ChebyshevI.h in Headers */,
+ 2E7DB591140DFCA9009FE107 /* ChebyshevII.h in Headers */,
+ 2E7DB593140DFCA9009FE107 /* Common.h in Headers */,
+ 2E7DB595140DFCA9009FE107 /* Custom.h in Headers */,
+ 2E7DB597140DFCA9009FE107 /* Design.h in Headers */,
+ 2E7DB599140DFCA9009FE107 /* Dsp.h in Headers */,
+ 2E7DB59B140DFCA9009FE107 /* Elliptic.h in Headers */,
+ 2E7DB59D140DFCA9009FE107 /* Filter.h in Headers */,
+ 2E7DB59F140DFCA9009FE107 /* Layout.h in Headers */,
+ 2E7DB5A1140DFCA9009FE107 /* Legendre.h in Headers */,
+ 2E7DB5A3140DFCA9009FE107 /* MathSupplement.h in Headers */,
+ 2E7DB5A5140DFCA9009FE107 /* Params.h in Headers */,
+ 2E7DB5A7140DFCA9009FE107 /* PoleFilter.h in Headers */,
+ 2E7DB5A9140DFCA9009FE107 /* RBJ.h in Headers */,
+ 2E7DB5AB140DFCA9009FE107 /* RootFinder.h in Headers */,
+ 2E7DB5AD140DFCA9009FE107 /* SmoothedFilter.h in Headers */,
+ 2E7DB5AF140DFCA9009FE107 /* State.h in Headers */,
+ 2E7DB5B1140DFCA9009FE107 /* Types.h in Headers */,
+ 2E7DB5B3140DFCA9009FE107 /* Utilities.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2E7DB524140DFC22009FE107 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2E7DB588140DFCA9009FE107 /* Bessel.h in Headers */,
+ 2E7DB58A140DFCA9009FE107 /* Biquad.h in Headers */,
+ 2E7DB58C140DFCA9009FE107 /* Butterworth.h in Headers */,
+ 2E7DB58E140DFCA9009FE107 /* Cascade.h in Headers */,
+ 2E7DB590140DFCA9009FE107 /* ChebyshevI.h in Headers */,
+ 2E7DB592140DFCA9009FE107 /* ChebyshevII.h in Headers */,
+ 2E7DB594140DFCA9009FE107 /* Common.h in Headers */,
+ 2E7DB596140DFCA9009FE107 /* Custom.h in Headers */,
+ 2E7DB598140DFCA9009FE107 /* Design.h in Headers */,
+ 2E7DB59A140DFCA9009FE107 /* Dsp.h in Headers */,
+ 2E7DB59C140DFCA9009FE107 /* Elliptic.h in Headers */,
+ 2E7DB59E140DFCA9009FE107 /* Filter.h in Headers */,
+ 2E7DB5A0140DFCA9009FE107 /* Layout.h in Headers */,
+ 2E7DB5A2140DFCA9009FE107 /* Legendre.h in Headers */,
+ 2E7DB5A4140DFCA9009FE107 /* MathSupplement.h in Headers */,
+ 2E7DB5A6140DFCA9009FE107 /* Params.h in Headers */,
+ 2E7DB5A8140DFCA9009FE107 /* PoleFilter.h in Headers */,
+ 2E7DB5AA140DFCA9009FE107 /* RBJ.h in Headers */,
+ 2E7DB5AC140DFCA9009FE107 /* RootFinder.h in Headers */,
+ 2E7DB5AE140DFCA9009FE107 /* SmoothedFilter.h in Headers */,
+ 2E7DB5B0140DFCA9009FE107 /* State.h in Headers */,
+ 2E7DB5B2140DFCA9009FE107 /* Types.h in Headers */,
+ 2E7DB5B4140DFCA9009FE107 /* Utilities.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ 2E7DB502140DFBDF009FE107 /* DSPFiltersMacOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2E7DB507140DFBDF009FE107 /* Build configuration list for PBXNativeTarget "DSPFiltersMacOS" */;
+ buildPhases = (
+ 2E7DB4FF140DFBDF009FE107 /* Sources */,
+ 2E7DB500140DFBDF009FE107 /* Frameworks */,
+ 2E7DB501140DFBDF009FE107 /* Headers */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = DSPFiltersMacOS;
+ productName = DSPFilters;
+ productReference = 2E7DB503140DFBDF009FE107 /* libDSPFiltersMacOS.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+ 2E7DB525140DFC22009FE107 /* DSPFiltersiOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2E7DB532140DFC22009FE107 /* Build configuration list for PBXNativeTarget "DSPFiltersiOS" */;
+ buildPhases = (
+ 2E7DB522140DFC22009FE107 /* Sources */,
+ 2E7DB523140DFC22009FE107 /* Frameworks */,
+ 2E7DB524140DFC22009FE107 /* Headers */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = DSPFiltersiOS;
+ productName = DSPFiltersiOS;
+ productReference = 2E7DB526140DFC22009FE107 /* libDSPFiltersiOS.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 2E7DB4FA140DFBDF009FE107 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ ORGANIZATIONNAME = "One Guy Group, Inc.";
+ };
+ buildConfigurationList = 2E7DB4FD140DFBDF009FE107 /* Build configuration list for PBXProject "DSPFilters" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = 2E7DB4F8140DFBDF009FE107;
+ productRefGroup = 2E7DB504140DFBDF009FE107 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 2E7DB502140DFBDF009FE107 /* DSPFiltersMacOS */,
+ 2E7DB525140DFC22009FE107 /* DSPFiltersiOS */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 2E7DB4FF140DFBDF009FE107 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2E7DB565140DFCA9009FE107 /* Bessel.cpp in Sources */,
+ 2E7DB567140DFCA9009FE107 /* Biquad.cpp in Sources */,
+ 2E7DB569140DFCA9009FE107 /* Butterworth.cpp in Sources */,
+ 2E7DB56B140DFCA9009FE107 /* Cascade.cpp in Sources */,
+ 2E7DB56D140DFCA9009FE107 /* ChebyshevI.cpp in Sources */,
+ 2E7DB56F140DFCA9009FE107 /* ChebyshevII.cpp in Sources */,
+ 2E7DB571140DFCA9009FE107 /* Custom.cpp in Sources */,
+ 2E7DB573140DFCA9009FE107 /* Design.cpp in Sources */,
+ 2E7DB575140DFCA9009FE107 /* Documentation.cpp in Sources */,
+ 2E7DB577140DFCA9009FE107 /* Elliptic.cpp in Sources */,
+ 2E7DB579140DFCA9009FE107 /* Filter.cpp in Sources */,
+ 2E7DB57B140DFCA9009FE107 /* Legendre.cpp in Sources */,
+ 2E7DB57D140DFCA9009FE107 /* Param.cpp in Sources */,
+ 2E7DB57F140DFCA9009FE107 /* PoleFilter.cpp in Sources */,
+ 2E7DB581140DFCA9009FE107 /* RBJ.cpp in Sources */,
+ 2E7DB583140DFCA9009FE107 /* RootFinder.cpp in Sources */,
+ 2E7DB585140DFCA9009FE107 /* State.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2E7DB522140DFC22009FE107 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2E7DB566140DFCA9009FE107 /* Bessel.cpp in Sources */,
+ 2E7DB568140DFCA9009FE107 /* Biquad.cpp in Sources */,
+ 2E7DB56A140DFCA9009FE107 /* Butterworth.cpp in Sources */,
+ 2E7DB56C140DFCA9009FE107 /* Cascade.cpp in Sources */,
+ 2E7DB56E140DFCA9009FE107 /* ChebyshevI.cpp in Sources */,
+ 2E7DB570140DFCA9009FE107 /* ChebyshevII.cpp in Sources */,
+ 2E7DB572140DFCA9009FE107 /* Custom.cpp in Sources */,
+ 2E7DB574140DFCA9009FE107 /* Design.cpp in Sources */,
+ 2E7DB576140DFCA9009FE107 /* Documentation.cpp in Sources */,
+ 2E7DB578140DFCA9009FE107 /* Elliptic.cpp in Sources */,
+ 2E7DB57A140DFCA9009FE107 /* Filter.cpp in Sources */,
+ 2E7DB57C140DFCA9009FE107 /* Legendre.cpp in Sources */,
+ 2E7DB57E140DFCA9009FE107 /* Param.cpp in Sources */,
+ 2E7DB580140DFCA9009FE107 /* PoleFilter.cpp in Sources */,
+ 2E7DB582140DFCA9009FE107 /* RBJ.cpp in Sources */,
+ 2E7DB584140DFCA9009FE107 /* RootFinder.cpp in Sources */,
+ 2E7DB586140DFCA9009FE107 /* State.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 2E7DB505140DFBDF009FE107 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 2EF3B477140F5059002CE947 /* SharedDebug.xcconfig */;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = ../../include;
+ };
+ name = Debug;
+ };
+ 2E7DB506140DFBDF009FE107 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 2EF3B47A140F5059002CE947 /* SharedRelease.xcconfig */;
+ buildSettings = {
+ HEADER_SEARCH_PATHS = ../../include;
+ };
+ name = Release;
+ };
+ 2E7DB508140DFBDF009FE107 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 2EF3B479140F5059002CE947 /* SharedMacOS.xcconfig */;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ 2E7DB509140DFBDF009FE107 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 2EF3B479140F5059002CE947 /* SharedMacOS.xcconfig */;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Release;
+ };
+ 2E7DB530140DFC22009FE107 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 2EF3B478140F5059002CE947 /* SharediOS.xcconfig */;
+ buildSettings = {
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = iphoneos;
+ };
+ name = Debug;
+ };
+ 2E7DB531140DFC22009FE107 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 2EF3B478140F5059002CE947 /* SharediOS.xcconfig */;
+ buildSettings = {
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = iphoneos;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 2E7DB4FD140DFBDF009FE107 /* Build configuration list for PBXProject "DSPFilters" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2E7DB505140DFBDF009FE107 /* Debug */,
+ 2E7DB506140DFBDF009FE107 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2E7DB507140DFBDF009FE107 /* Build configuration list for PBXNativeTarget "DSPFiltersMacOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2E7DB508140DFBDF009FE107 /* Debug */,
+ 2E7DB509140DFBDF009FE107 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2E7DB532140DFC22009FE107 /* Build configuration list for PBXNativeTarget "DSPFiltersiOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2E7DB530140DFC22009FE107 /* Debug */,
+ 2E7DB531140DFC22009FE107 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 2E7DB4FA140DFBDF009FE107 /* Project object */;
+}
diff --git a/external/DSPFilters/shared/DSPFilters/Builds/XCode4/DSPFilters.xcodeproj/xcshareddata/xcschemes/DSPFiltersMacOS.xcscheme b/external/DSPFilters/shared/DSPFilters/Builds/XCode4/DSPFilters.xcodeproj/xcshareddata/xcschemes/DSPFiltersMacOS.xcscheme
new file mode 100644
index 0000000..0d91140
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/Builds/XCode4/DSPFilters.xcodeproj/xcshareddata/xcschemes/DSPFiltersMacOS.xcscheme
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/external/DSPFilters/shared/DSPFilters/Builds/XCode4/DSPFilters.xcodeproj/xcshareddata/xcschemes/DSPFiltersiOS.xcscheme b/external/DSPFilters/shared/DSPFilters/Builds/XCode4/DSPFilters.xcodeproj/xcshareddata/xcschemes/DSPFiltersiOS.xcscheme
new file mode 100644
index 0000000..afade27
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/Builds/XCode4/DSPFilters.xcodeproj/xcshareddata/xcschemes/DSPFiltersiOS.xcscheme
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/external/DSPFilters/shared/DSPFilters/CMakeLists.txt b/external/DSPFilters/shared/DSPFilters/CMakeLists.txt
new file mode 100644
index 0000000..29f1f2d
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/CMakeLists.txt
@@ -0,0 +1,13 @@
+cmake_minimum_required(VERSION 3.0)
+
+project (DSPFilters CXX)
+
+aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/source SOURCE_LIB)
+
+add_library(${PROJECT_NAME} STATIC ${SOURCE_LIB})
+
+target_include_directories(${PROJECT_NAME}
+PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+set_property(TARGET ${PROJECT_NAME} PROPERTY POSITION_INDEPENDENT_CODE ON)
+
diff --git a/external/DSPFilters/shared/DSPFilters/ProductInfo.txt b/external/DSPFilters/shared/DSPFilters/ProductInfo.txt
new file mode 100644
index 0000000..27c28f4
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/ProductInfo.txt
@@ -0,0 +1,2 @@
+This product provides the DSPFilters library and class templates, a
+collection of classes that implement digital signal filters.
diff --git a/external/DSPFilters/shared/DSPFilters/ProductWebsite.html b/external/DSPFilters/shared/DSPFilters/ProductWebsite.html
new file mode 100644
index 0000000..edd2604
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/ProductWebsite.html
@@ -0,0 +1,8 @@
+
+
+
+Home
+
+
+
+
diff --git a/external/DSPFilters/shared/DSPFilters/include/DspFilters/Bessel.h b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Bessel.h
new file mode 100644
index 0000000..4ea3fb0
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Bessel.h
@@ -0,0 +1,485 @@
+/*******************************************************************************
+
+"A Collection of Useful C++ Classes for Digital Signal Processing"
+ By Vinnie Falco
+
+Official project location:
+https://github.com/vinniefalco/DSPFilters
+
+See Documentation.cpp for contact information, notes, and bibliography.
+
+--------------------------------------------------------------------------------
+
+License: MIT License (http://www.opensource.org/licenses/mit-license.php)
+Copyright (c) 2009 by Vinnie Falco
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*******************************************************************************/
+
+#ifndef DSPFILTERS_BESSEL_H
+#define DSPFILTERS_BESSEL_H
+
+#include "DspFilters/Common.h"
+#include "DspFilters/Cascade.h"
+#include "DspFilters/Design.h"
+#include "DspFilters/Filter.h"
+#include "DspFilters/PoleFilter.h"
+#include "DspFilters/RootFinder.h"
+
+namespace Dsp {
+
+/*
+ * Filters with Bessel response characteristics
+ *
+ */
+
+namespace Bessel {
+
+// A Workspace is necessary to find roots
+
+struct WorkspaceBase
+{
+ WorkspaceBase (RootFinderBase* rootsBase)
+ : roots (*rootsBase)
+ {
+ }
+
+ RootFinderBase& roots;
+
+private:
+ WorkspaceBase (WorkspaceBase&);
+ WorkspaceBase& operator= (WorkspaceBase&);
+};
+
+template
+struct Workspace : WorkspaceBase
+{
+ Workspace ()
+ : WorkspaceBase (&m_roots)
+ {
+ }
+
+private:
+ RootFinder m_roots;
+};
+
+//------------------------------------------------------------------------------
+
+// Half-band analog prototypes (s-plane)
+
+class AnalogLowPass : public LayoutBase
+{
+public:
+ AnalogLowPass ();
+
+ void design (const int numPoles,
+ WorkspaceBase* w);
+
+private:
+ int m_numPoles;
+};
+
+//------------------------------------------------------------------------------
+
+class AnalogLowShelf : public LayoutBase
+{
+public:
+ AnalogLowShelf ();
+
+ void design (int numPoles,
+ double gainDb,
+ WorkspaceBase* w);
+
+private:
+ int m_numPoles;
+ double m_gainDb;
+};
+
+//------------------------------------------------------------------------------
+
+// Factored implementations to reduce template instantiations
+
+struct LowPassBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency,
+ WorkspaceBase* w);
+};
+
+struct HighPassBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency,
+ WorkspaceBase* w);
+};
+
+struct BandPassBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double centerFrequency,
+ double widthFrequency,
+ WorkspaceBase* w);
+};
+
+struct BandStopBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double centerFrequency,
+ double widthFrequency,
+ WorkspaceBase* w);
+};
+
+struct LowShelfBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency,
+ double gainDb,
+ WorkspaceBase* w);
+};
+
+//------------------------------------------------------------------------------
+
+//
+// Raw filters
+//
+
+template
+struct LowPass : PoleFilter
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency)
+ {
+ Workspace w;
+ LowPassBase::setup (order,
+ sampleRate,
+ cutoffFrequency,
+ &w);
+ }
+};
+
+template
+struct HighPass : PoleFilter
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency)
+ {
+ Workspace w;
+ HighPassBase::setup (order,
+ sampleRate,
+ cutoffFrequency,
+ &w);
+ }
+};
+
+template
+struct BandPass : PoleFilter
+{
+ void setup (int order,
+ double sampleRate,
+ double centerFrequency,
+ double widthFrequency)
+ {
+ Workspace w;
+ BandPassBase::setup (order,
+ sampleRate,
+ centerFrequency,
+ widthFrequency,
+ &w);
+ }
+};
+
+template
+struct BandStop : PoleFilter
+{
+ void setup (int order,
+ double sampleRate,
+ double centerFrequency,
+ double widthFrequency)
+ {
+ Workspace w;
+ BandStopBase::setup (order,
+ sampleRate,
+ centerFrequency,
+ widthFrequency,
+ &w);
+ }
+};
+
+template
+struct LowShelf : PoleFilter
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency,
+ double gainDb)
+ {
+ Workspace w;
+ LowShelfBase::setup (order,
+ sampleRate,
+ cutoffFrequency,
+ gainDb,
+ &w);
+ }
+};
+
+//------------------------------------------------------------------------------
+
+//
+// Gui-friendly Design layer
+//
+
+namespace Design {
+
+struct TypeIBase : DesignBase
+{
+ enum
+ {
+ NumParams = 3
+ };
+
+ static int getNumParams ()
+ {
+ return 3;
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultCutoffFrequencyParam ();
+ }
+};
+
+template
+struct TypeI : TypeIBase, FilterClass
+{
+ void setParams (const Params& params)
+ {
+ FilterClass::setup (int(params[1]), params[0], params[2]);
+ }
+};
+
+struct TypeIIBase : DesignBase
+{
+ enum
+ {
+ NumParams = 4
+ };
+
+ static int getNumParams ()
+ {
+ return 4;
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultCenterFrequencyParam ();
+ }
+
+ static const ParamInfo getParamInfo_3 ()
+ {
+ return ParamInfo::defaultBandwidthHzParam ();
+ }
+};
+
+template
+struct TypeII : TypeIIBase, FilterClass
+{
+ void setParams (const Params& params)
+ {
+ FilterClass::setup (int(params[1]), params[0], params[2], params[3]);
+ }
+};
+
+struct TypeIIIBase : DesignBase
+{
+ enum
+ {
+ NumParams = 4
+ };
+
+ static int getNumParams ()
+ {
+ return 4;
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultCutoffFrequencyParam ();
+ }
+
+ static const ParamInfo getParamInfo_3 ()
+ {
+ return ParamInfo::defaultGainParam ();
+ }
+};
+
+template
+struct TypeIII : TypeIIIBase, FilterClass
+{
+ void setParams (const Params& params)
+ {
+ FilterClass::setup (int(params[1]),
+ params[0],
+ params[2],
+ params[3]);
+ }
+};
+
+struct TypeIVBase : DesignBase
+{
+ enum
+ {
+ NumParams = 5
+ };
+
+ static int getNumParams ()
+ {
+ return 5;
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultCenterFrequencyParam ();
+ }
+
+ static const ParamInfo getParamInfo_3 ()
+ {
+ return ParamInfo::defaultBandwidthHzParam ();
+ }
+
+ static const ParamInfo getParamInfo_4 ()
+ {
+ return ParamInfo::defaultGainParam ();
+ }
+};
+
+template
+struct TypeIV : TypeIVBase, FilterClass
+{
+ void setParams (const Params& params)
+ {
+ FilterClass::setup (int(params[1]), params[0], params[2], params[3], params[4]);
+ }
+};
+
+// Factored kind and name
+
+struct LowPassDescription
+{
+ static Kind getKind () { return kindLowPass; }
+ static const char* getName() { return "Bessel Low Pass"; }
+};
+
+struct HighPassDescription
+{
+ static Kind getKind () { return kindHighPass; }
+ static const char* getName() { return "Bessel High Pass"; }
+};
+
+struct BandPassDescription
+{
+ static Kind getKind () { return kindHighPass; }
+ static const char* getName() { return "Bessel Band Pass"; }
+};
+
+struct BandStopDescription
+{
+ static Kind getKind () { return kindHighPass; }
+ static const char* getName() { return "Bessel Band Stop"; }
+};
+
+struct LowShelfDescription
+{
+ static Kind getKind () { return kindLowShelf; }
+ static const char* getName() { return "Bessel Low Shelf"; }
+};
+
+// This glues on the Order parameter
+template class TypeClass,
+ template class FilterClass>
+struct OrderBase : TypeClass >
+{
+ const ParamInfo getParamInfo_1 () const
+ {
+ return ParamInfo (idOrder, "Order", "Order",
+ 1, MaxOrder, 2,
+ &ParamInfo::Int_toControlValue,
+ &ParamInfo::Int_toNativeValue,
+ &ParamInfo::Int_toString);
+
+ }
+};
+
+//------------------------------------------------------------------------------
+
+//
+// Gui-friendly Design layer
+//
+
+template
+struct LowPass : OrderBase ,
+ LowPassDescription
+{
+};
+
+template
+struct HighPass : OrderBase ,
+ HighPassDescription
+{
+};
+
+template
+struct BandPass : OrderBase ,
+ BandPassDescription
+{
+};
+
+template
+struct BandStop : OrderBase ,
+ BandStopDescription
+{
+};
+
+/*
+ * NOT IMPLEMENTED
+ *
+ */
+template
+struct LowShelf : OrderBase ,
+ LowShelfDescription
+{
+};
+
+}
+
+}
+
+}
+
+#endif
+
+/* This is a test of svn:external */
diff --git a/external/DSPFilters/shared/DSPFilters/include/DspFilters/Biquad.h b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Biquad.h
new file mode 100644
index 0000000..eef069f
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Biquad.h
@@ -0,0 +1,236 @@
+/*******************************************************************************
+
+"A Collection of Useful C++ Classes for Digital Signal Processing"
+ By Vinnie Falco
+
+Official project location:
+https://github.com/vinniefalco/DSPFilters
+
+See Documentation.cpp for contact information, notes, and bibliography.
+
+--------------------------------------------------------------------------------
+
+License: MIT License (http://www.opensource.org/licenses/mit-license.php)
+Copyright (c) 2009 by Vinnie Falco
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*******************************************************************************/
+
+#ifndef DSPFILTERS_BIQUAD_H
+#define DSPFILTERS_BIQUAD_H
+
+#include "DspFilters/Common.h"
+#include "DspFilters/MathSupplement.h"
+#include "DspFilters/Types.h"
+
+namespace Dsp {
+
+struct BiquadPoleState;
+
+/*
+ * Holds coefficients for a second order Infinite Impulse Response
+ * digital filter. This is the building block for all IIR filters.
+ *
+ */
+
+// Factored interface to prevent outsiders from fiddling
+class BiquadBase
+{
+public:
+ template
+ struct State : StateType, private DenormalPrevention
+ {
+ template
+ inline Sample process (const Sample in, const BiquadBase& b)
+ {
+ return static_cast (StateType::process1 (in, b, ac()));
+ }
+ };
+
+public:
+ // Calculate filter response at the given normalized frequency.
+ complex_t response (double normalizedFrequency) const;
+
+ std::vector getPoleZeros () const;
+
+ double getA0 () const { return m_a0; }
+ double getA1 () const { return m_a1*m_a0; }
+ double getA2 () const { return m_a2*m_a0; }
+ double getB0 () const { return m_b0*m_a0; }
+ double getB1 () const { return m_b1*m_a0; }
+ double getB2 () const { return m_b2*m_a0; }
+
+ // Process a block of samples in the given form
+ template
+ void process (int numSamples, Sample* dest, StateType& state) const
+ {
+ while (--numSamples >= 0) {
+ *dest = state.process (*dest, *this);
+ dest++;
+ }
+ }
+
+protected:
+ //
+ // These are protected so you can't mess with RBJ biquads
+ //
+
+ void setCoefficients (double a0, double a1, double a2,
+ double b0, double b1, double b2);
+
+ void setOnePole (complex_t pole, complex_t zero);
+
+ void setTwoPole (complex_t pole1, complex_t zero1,
+ complex_t pole2, complex_t zero2);
+
+ void setPoleZeroPair (const PoleZeroPair& pair)
+ {
+ if (pair.isSinglePole ())
+ setOnePole (pair.poles.first, pair.zeros.first);
+ else
+ setTwoPole (pair.poles.first, pair.zeros.first,
+ pair.poles.second, pair.zeros.second);
+ }
+
+ void setPoleZeroForm (const BiquadPoleState& bps);
+
+ void setIdentity ();
+
+ void applyScale (double scale);
+
+public:
+ double m_a0;
+ double m_a1;
+ double m_a2;
+ double m_b1;
+ double m_b2;
+ double m_b0;
+};
+
+//------------------------------------------------------------------------------
+
+// Expresses a biquad as a pair of pole/zeros, with gain
+// values so that the coefficients can be reconstructed precisely.
+struct BiquadPoleState : PoleZeroPair
+{
+ BiquadPoleState () { }
+
+ explicit BiquadPoleState (const BiquadBase& s);
+
+ double gain;
+};
+
+// More permissive interface for fooling around
+class Biquad : public BiquadBase
+{
+public:
+ Biquad ();
+
+ explicit Biquad (const BiquadPoleState& bps);
+
+public:
+ // Process a block of samples, interpolating from the old section's coefficients
+ // to this section's coefficients, over numSamples. This implements smooth
+ // parameter changes.
+
+ template
+ void smoothProcess1 (int numSamples,
+ Sample* dest,
+ StateType& state,
+ Biquad sectionPrev) const
+ {
+ double t = 1. / numSamples;
+ double da1 = (m_a1 - sectionPrev.m_a1) * t;
+ double da2 = (m_a2 - sectionPrev.m_a2) * t;
+ double db0 = (m_b0 - sectionPrev.m_b0) * t;
+ double db1 = (m_b1 - sectionPrev.m_b1) * t;
+ double db2 = (m_b2 - sectionPrev.m_b2) * t;
+
+ while (--numSamples >= 0)
+ {
+ sectionPrev.m_a1 += da1;
+ sectionPrev.m_a2 += da2;
+ sectionPrev.m_b0 += db0;
+ sectionPrev.m_b1 += db1;
+ sectionPrev.m_b2 += db2;
+
+ *dest = state.process (*dest, sectionPrev);
+ dest++;
+ }
+ }
+
+ // Process a block of samples, interpolating from the old section's pole/zeros
+ // to this section's pole/zeros, over numSamples. The interpolation is done
+ // in the z-plane using polar coordinates.
+ template
+ void smoothProcess2 (int numSamples,
+ Sample* dest,
+ StateType& state,
+ BiquadPoleState zPrev) const
+ {
+ BiquadPoleState z (*this);
+ double t = 1. / numSamples;
+ complex_t dp0 = (z.poles.first - zPrev.poles.first) * t;
+ complex_t dp1 = (z.poles.second - zPrev.poles.second) * t;
+ complex_t dz0 = (z.zeros.first - zPrev.zeros.first) * t;
+ complex_t dz1 = (z.zeros.second - zPrev.zeros.second) * t;
+ double dg = (z.gain - zPrev.gain) * t;
+
+ while (--numSamples >= 0)
+ {
+ zPrev.poles.first += dp0;
+ zPrev.poles.second += dp1;
+ zPrev.zeros.first += dz0;
+ zPrev.zeros.second += dz1;
+ zPrev.gain += dg;
+
+ *dest = state.process (*dest, Biquad (zPrev));
+ dest++;
+ }
+ }
+
+public:
+ // Export these as public
+
+ void setOnePole (complex_t pole, complex_t zero)
+ {
+ BiquadBase::setOnePole (pole, zero);
+ }
+
+ void setTwoPole (complex_t pole1, complex_t zero1,
+ complex_t pole2, complex_t zero2)
+ {
+ BiquadBase::setTwoPole (pole1, zero1, pole2, zero2);
+ }
+
+ void setPoleZeroPair (const PoleZeroPair& pair)
+ {
+ BiquadBase::setPoleZeroPair (pair);
+ }
+
+ void applyScale (double scale)
+ {
+ BiquadBase::applyScale (scale);
+ }
+};
+
+}
+
+#endif
diff --git a/external/DSPFilters/shared/DSPFilters/include/DspFilters/Butterworth.h b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Butterworth.h
new file mode 100644
index 0000000..8ce1663
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Butterworth.h
@@ -0,0 +1,436 @@
+/*******************************************************************************
+
+"A Collection of Useful C++ Classes for Digital Signal Processing"
+ By Vinnie Falco
+
+Official project location:
+https://github.com/vinniefalco/DSPFilters
+
+See Documentation.cpp for contact information, notes, and bibliography.
+
+--------------------------------------------------------------------------------
+
+License: MIT License (http://www.opensource.org/licenses/mit-license.php)
+Copyright (c) 2009 by Vinnie Falco
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*******************************************************************************/
+
+#ifndef DSPFILTERS_BUTTERWORTH_H
+#define DSPFILTERS_BUTTERWORTH_H
+
+#include "DspFilters/Common.h"
+#include "DspFilters/Cascade.h"
+#include "DspFilters/Design.h"
+#include "DspFilters/Filter.h"
+#include "DspFilters/PoleFilter.h"
+
+namespace Dsp {
+
+/*
+ * Filters with Butterworth response characteristics
+ *
+ */
+
+namespace Butterworth {
+
+// Half-band analog prototypes (s-plane)
+
+class AnalogLowPass : public LayoutBase
+{
+public:
+ AnalogLowPass ();
+
+ void design (const int numPoles);
+
+private:
+ int m_numPoles;
+};
+
+//------------------------------------------------------------------------------
+
+class AnalogLowShelf : public LayoutBase
+{
+public:
+ AnalogLowShelf ();
+
+ void design (int numPoles, double gainDb);
+
+private:
+ int m_numPoles;
+ double m_gainDb;
+};
+
+//------------------------------------------------------------------------------
+
+// Factored implementations to reduce template instantiations
+
+struct LowPassBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency);
+};
+
+struct HighPassBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency);
+};
+
+struct BandPassBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double centerFrequency,
+ double widthFrequency);
+};
+
+struct BandStopBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double centerFrequency,
+ double widthFrequency);
+};
+
+struct LowShelfBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency,
+ double gainDb);
+};
+
+struct HighShelfBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency,
+ double gainDb);
+};
+
+struct BandShelfBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double centerFrequency,
+ double widthFrequency,
+ double gainDb);
+};
+
+//------------------------------------------------------------------------------
+
+//
+// Raw filters
+//
+
+template
+struct LowPass : PoleFilter
+{
+};
+
+template
+struct HighPass : PoleFilter
+{
+};
+
+template
+struct BandPass : PoleFilter
+{
+};
+
+template
+struct BandStop : PoleFilter
+{
+};
+
+template
+struct LowShelf : PoleFilter
+{
+};
+
+template
+struct HighShelf : PoleFilter
+{
+};
+
+template
+struct BandShelf : PoleFilter
+{
+};
+
+//------------------------------------------------------------------------------
+
+//
+// Gui-friendly Design layer
+//
+
+namespace Design {
+
+struct TypeIBase : DesignBase
+{
+ enum
+ {
+ NumParams = 3
+ };
+
+ static int getNumParams ()
+ {
+ return 3;
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultCutoffFrequencyParam ();
+ }
+};
+
+template
+struct TypeI : TypeIBase, FilterClass
+{
+ void setParams (const Params& params)
+ {
+ FilterClass::setup (int(params[1]), params[0], params[2]);
+ }
+};
+
+struct TypeIIBase : DesignBase
+{
+ enum
+ {
+ NumParams = 4
+ };
+
+ static int getNumParams ()
+ {
+ return 4;
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultCenterFrequencyParam ();
+ }
+
+ static const ParamInfo getParamInfo_3 ()
+ {
+ return ParamInfo::defaultBandwidthHzParam ();
+ }
+};
+
+template
+struct TypeII : TypeIIBase, FilterClass
+{
+ void setParams (const Params& params)
+ {
+ FilterClass::setup (int(params[1]), params[0], params[2], params[3]);
+ }
+};
+
+struct TypeIIIBase : DesignBase
+{
+ enum
+ {
+ NumParams = 4
+ };
+
+ static int getNumParams ()
+ {
+ return 4;
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultCutoffFrequencyParam ();
+ }
+
+ static const ParamInfo getParamInfo_3 ()
+ {
+ return ParamInfo::defaultGainParam ();
+ }
+};
+
+template
+struct TypeIII : TypeIIIBase, FilterClass
+{
+ void setParams (const Params& params)
+ {
+ FilterClass::setup (int(params[1]),
+ params[0],
+ params[2],
+ params[3]);
+ }
+};
+
+struct TypeIVBase : DesignBase
+{
+ enum
+ {
+ NumParams = 5
+ };
+
+ static int getNumParams ()
+ {
+ return 5;
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultCenterFrequencyParam ();
+ }
+
+ static const ParamInfo getParamInfo_3 ()
+ {
+ return ParamInfo::defaultBandwidthHzParam ();
+ }
+
+ static const ParamInfo getParamInfo_4 ()
+ {
+ return ParamInfo::defaultGainParam ();
+ }
+};
+
+template
+struct TypeIV : TypeIVBase, FilterClass
+{
+ void setParams (const Params& params)
+ {
+ FilterClass::setup (int(params[1]), params[0], params[2], params[3], params[4]);
+ }
+};
+
+// Factored kind and name
+
+struct LowPassDescription
+{
+ static Kind getKind () { return kindLowPass; }
+ static const char* getName() { return "Butterworth Low Pass"; }
+};
+
+struct HighPassDescription
+{
+ static Kind getKind () { return kindHighPass; }
+ static const char* getName() { return "Butterworth High Pass"; }
+};
+
+struct BandPassDescription
+{
+ static Kind getKind () { return kindHighPass; }
+ static const char* getName() { return "Butterworth Band Pass"; }
+};
+
+struct BandStopDescription
+{
+ static Kind getKind () { return kindHighPass; }
+ static const char* getName() { return "Butterworth Band Stop"; }
+};
+
+struct LowShelfDescription
+{
+ static Kind getKind () { return kindLowShelf; }
+ static const char* getName() { return "Butterworth Low Shelf"; }
+};
+
+struct HighShelfDescription
+{
+ static Kind getKind () { return kindHighShelf; }
+ static const char* getName() { return "Butterworth High Shelf"; }
+};
+
+struct BandShelfDescription
+{
+ static Kind getKind () { return kindBandShelf; }
+ static const char* getName() { return "Butterworth Band Shelf"; }
+};
+
+// This glues on the Order parameter
+template class TypeClass,
+ template class FilterClass>
+struct OrderBase : TypeClass >
+{
+ const ParamInfo getParamInfo_1 () const
+ {
+ return ParamInfo (idOrder, "Order", "Order",
+ 1, MaxOrder, 2,
+ &ParamInfo::Int_toControlValue,
+ &ParamInfo::Int_toNativeValue,
+ &ParamInfo::Int_toString);
+
+ }
+};
+
+//------------------------------------------------------------------------------
+
+//
+// Design filters
+//
+
+template
+struct LowPass : OrderBase ,
+ LowPassDescription
+{
+};
+
+template
+struct HighPass : OrderBase ,
+ HighPassDescription
+{
+};
+
+template
+struct BandPass : OrderBase ,
+ BandPassDescription
+{
+};
+
+template
+struct BandStop : OrderBase ,
+ BandStopDescription
+{
+};
+
+template
+struct LowShelf : OrderBase ,
+ LowShelfDescription
+{
+};
+
+template
+struct HighShelf : OrderBase ,
+ HighShelfDescription
+{
+};
+
+template
+struct BandShelf : OrderBase ,
+ BandShelfDescription
+{
+};
+
+}
+
+}
+
+}
+
+#endif
+
diff --git a/external/DSPFilters/shared/DSPFilters/include/DspFilters/Cascade.h b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Cascade.h
new file mode 100644
index 0000000..13eac3f
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Cascade.h
@@ -0,0 +1,183 @@
+/*******************************************************************************
+
+"A Collection of Useful C++ Classes for Digital Signal Processing"
+ By Vinnie Falco
+
+Official project location:
+https://github.com/vinniefalco/DSPFilters
+
+See Documentation.cpp for contact information, notes, and bibliography.
+
+--------------------------------------------------------------------------------
+
+License: MIT License (http://www.opensource.org/licenses/mit-license.php)
+Copyright (c) 2009 by Vinnie Falco
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*******************************************************************************/
+
+#ifndef DSPFILTERS_CASCADE_H
+#define DSPFILTERS_CASCADE_H
+
+#include "DspFilters/Common.h"
+#include "DspFilters/Biquad.h"
+#include "DspFilters/Filter.h"
+#include "DspFilters/Layout.h"
+#include "DspFilters/MathSupplement.h"
+
+namespace Dsp {
+
+/*
+ * Holds coefficients for a cascade of second order sections.
+ *
+ */
+
+// Factored implementation to reduce template instantiations
+class Cascade
+{
+public:
+ template
+ class StateBase : private DenormalPrevention
+ {
+ public:
+ template
+ inline Sample process (const Sample in, const Cascade& c)
+ {
+ double out = in;
+ StateType* state = m_stateArray;
+ Biquad const* stage = c.m_stageArray;
+ const double vsa = ac();
+ int i = c.m_numStages - 1;
+ out = (state++)->process1 (out, *stage++, vsa);
+ for (; --i >= 0;)
+ out = (state++)->process1 (out, *stage++, 0);
+ //for (int i = c.m_numStages; --i >= 0; ++state, ++stage)
+ // out = state->process1 (out, *stage, vsa);
+ return static_cast (out);
+ }
+
+ protected:
+ StateBase (StateType* stateArray)
+ : m_stateArray (stateArray)
+ {
+ }
+
+ protected:
+ StateType* m_stateArray;
+ };
+
+ struct Stage : Biquad
+ {
+ };
+
+ struct Storage
+ {
+ Storage (int maxStages_, Stage* stageArray_)
+ : maxStages (maxStages_)
+ , stageArray (stageArray_)
+ {
+ }
+
+ int maxStages;
+ Stage* stageArray;
+ };
+
+ int getNumStages () const
+ {
+ return m_numStages;
+ }
+
+ const Stage& operator[] (int index)
+ {
+ assert (index >= 0 && index <= m_numStages);
+ return m_stageArray[index];
+ }
+
+public:
+ // Calculate filter response at the given normalized frequency.
+ complex_t response (double normalizedFrequency) const;
+
+ std::vector getPoleZeros () const;
+
+ // Process a block of samples in the given form
+ template
+ void process (int numSamples, Sample* dest, StateType& state) const
+ {
+ while (--numSamples >= 0) {
+ *dest = state.process (*dest, *this);
+ dest++;
+ }
+ }
+
+protected:
+ Cascade ();
+
+ void setCascadeStorage (const Storage& storage);
+
+ void applyScale (double scale);
+ void setLayout (const LayoutBase& proto);
+
+private:
+ int m_numStages;
+ int m_maxStages;
+ Stage* m_stageArray;
+};
+
+//------------------------------------------------------------------------------
+
+// Storage for Cascade
+template
+class CascadeStages
+{
+public:
+ template
+ class State : public Cascade::StateBase
+ {
+ public:
+ State() : Cascade::StateBase (m_states)
+ {
+ Cascade::StateBase ::m_stateArray = m_states;
+ reset ();
+ }
+
+ void reset ()
+ {
+ StateType* state = m_states;
+ for (int i = MaxStages; --i >= 0; ++state)
+ state->reset();
+ }
+
+ private:
+ StateType m_states[MaxStages];
+ };
+
+ /*@Internal*/
+ Cascade::Storage getCascadeStorage()
+ {
+ return Cascade::Storage (MaxStages, m_stages);
+ }
+
+private:
+ Cascade::Stage m_stages[MaxStages];
+};
+
+}
+
+#endif
diff --git a/external/DSPFilters/shared/DSPFilters/include/DspFilters/ChebyshevI.h b/external/DSPFilters/shared/DSPFilters/include/DspFilters/ChebyshevI.h
new file mode 100644
index 0000000..d97a3a1
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/include/DspFilters/ChebyshevI.h
@@ -0,0 +1,465 @@
+/*******************************************************************************
+
+"A Collection of Useful C++ Classes for Digital Signal Processing"
+ By Vinnie Falco
+
+Official project location:
+https://github.com/vinniefalco/DSPFilters
+
+See Documentation.cpp for contact information, notes, and bibliography.
+
+--------------------------------------------------------------------------------
+
+License: MIT License (http://www.opensource.org/licenses/mit-license.php)
+Copyright (c) 2009 by Vinnie Falco
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*******************************************************************************/
+
+#ifndef DSPFILTERS_CHEBYSHEVI_H
+#define DSPFILTERS_CHEBYSHEVI_H
+
+#include "DspFilters/Common.h"
+#include "DspFilters/Cascade.h"
+#include "DspFilters/Design.h"
+#include "DspFilters/Filter.h"
+#include "DspFilters/PoleFilter.h"
+
+namespace Dsp {
+
+/*
+ * Filters with Chebyshev response characteristics
+ *
+ */
+
+namespace ChebyshevI {
+
+// Half-band analog prototypes (s-plane)
+
+class AnalogLowPass : public LayoutBase
+{
+public:
+ AnalogLowPass ();
+
+ void design (const int numPoles,
+ double rippleDb);
+
+private:
+ int m_numPoles;
+ double m_rippleDb;
+};
+
+//------------------------------------------------------------------------------
+
+class AnalogLowShelf : public LayoutBase
+{
+public:
+ AnalogLowShelf ();
+
+ void design (int numPoles,
+ double gainDb,
+ double rippleDb);
+
+private:
+ int m_numPoles;
+ double m_rippleDb;
+ double m_gainDb;
+};
+
+//------------------------------------------------------------------------------
+
+// Factored implementations to reduce template instantiations
+
+struct LowPassBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency,
+ double rippleDb);
+};
+
+struct HighPassBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency,
+ double rippleDb);
+};
+
+struct BandPassBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double centerFrequency,
+ double widthFrequency,
+ double rippleDb);
+};
+
+struct BandStopBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double centerFrequency,
+ double widthFrequency,
+ double rippleDb);
+};
+
+struct LowShelfBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency,
+ double gainDb,
+ double rippleDb);
+};
+
+struct HighShelfBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency,
+ double gainDb,
+ double rippleDb);
+};
+
+struct BandShelfBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double centerFrequency,
+ double widthFrequency,
+ double gainDb,
+ double rippleDb);
+};
+
+//------------------------------------------------------------------------------
+
+//
+// Raw filters
+//
+
+template
+struct LowPass : PoleFilter
+{
+};
+
+template
+struct HighPass : PoleFilter
+{
+};
+
+template
+struct BandPass : PoleFilter
+{
+};
+
+template
+struct BandStop : PoleFilter
+{
+};
+
+template
+struct LowShelf : PoleFilter
+{
+};
+
+template
+struct HighShelf : PoleFilter
+{
+};
+
+template
+struct BandShelf : PoleFilter
+{
+};
+
+//------------------------------------------------------------------------------
+
+//
+// Gui-friendly Design layer
+//
+
+namespace Design {
+
+struct TypeIBase : DesignBase
+{
+ enum
+ {
+ NumParams = 4
+ };
+
+ static int getNumParams ()
+ {
+ return 4;
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultCutoffFrequencyParam ();
+ }
+
+ static const ParamInfo getParamInfo_3 ()
+ {
+ return ParamInfo::defaultRippleDbParam ();
+ }
+};
+
+template
+struct TypeI : TypeIBase, FilterClass
+{
+ void setParams (const Params& params)
+ {
+ FilterClass::setup (int(params[1]), params[0], params[2], params[3]);
+ }
+};
+
+struct TypeIIBase : DesignBase
+{
+ enum
+ {
+ NumParams = 5
+ };
+
+ static int getNumParams ()
+ {
+ return 5;
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultCenterFrequencyParam ();
+ }
+
+ static const ParamInfo getParamInfo_3 ()
+ {
+ return ParamInfo::defaultBandwidthHzParam ();
+ }
+
+ static const ParamInfo getParamInfo_4 ()
+ {
+ return ParamInfo::defaultRippleDbParam ();
+ }
+};
+
+template
+struct TypeII : TypeIIBase, FilterClass
+{
+ void setParams (const Params& params)
+ {
+ FilterClass::setup (int(params[1]), params[0], params[2], params[3], params[4]);
+ }
+};
+
+struct TypeIIIBase : DesignBase
+{
+ enum
+ {
+ NumParams = 5
+ };
+
+ static int getNumParams ()
+ {
+ return 5;
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultCutoffFrequencyParam ();
+ }
+
+ static const ParamInfo getParamInfo_3 ()
+ {
+ return ParamInfo::defaultGainParam ();
+ }
+
+ static const ParamInfo getParamInfo_4 ()
+ {
+ return ParamInfo::defaultRippleDbParam ();
+ }
+};
+
+template
+struct TypeIII : TypeIIIBase, FilterClass
+{
+ void setParams (const Params& params)
+ {
+ FilterClass::setup (int(params[1]), params[0], params[2], params[3], params[4]);
+ }
+};
+
+struct TypeIVBase : DesignBase
+{
+ enum
+ {
+ NumParams = 6
+ };
+
+ static int getNumParams ()
+ {
+ return 6;
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultCenterFrequencyParam ();
+ }
+
+ static const ParamInfo getParamInfo_3 ()
+ {
+ return ParamInfo::defaultBandwidthHzParam ();
+ }
+
+ static const ParamInfo getParamInfo_4 ()
+ {
+ return ParamInfo::defaultGainParam ();
+ }
+
+ static const ParamInfo getParamInfo_5 ()
+ {
+ return ParamInfo::defaultRippleDbParam ();
+ }
+};
+
+template
+struct TypeIV : TypeIVBase, FilterClass
+{
+ void setParams (const Params& params)
+ {
+ FilterClass::setup (int(params[1]), params[0], params[2], params[3], params[4], params[5]);
+ }
+};
+
+// Factored kind and name
+
+struct LowPassDescription
+{
+ static Kind getKind () { return kindLowPass; }
+ static const char* getName() { return "Chebyshev I Low Pass"; }
+};
+
+struct HighPassDescription
+{
+ static Kind getKind () { return kindHighPass; }
+ static const char* getName() { return "Chebyshev I High Pass"; }
+};
+
+struct BandPassDescription
+{
+ static Kind getKind () { return kindHighPass; }
+ static const char* getName() { return "Chebyshev I Band Pass"; }
+};
+
+struct BandStopDescription
+{
+ static Kind getKind () { return kindHighPass; }
+ static const char* getName() { return "Chebyshev I Band Stop"; }
+};
+
+struct LowShelfDescription
+{
+ static Kind getKind () { return kindLowShelf; }
+ static const char* getName() { return "Chebyshev I Low Shelf"; }
+};
+
+struct HighShelfDescription
+{
+ static Kind getKind () { return kindHighShelf; }
+ static const char* getName() { return "Chebyshev I High Shelf"; }
+};
+
+struct BandShelfDescription
+{
+ static Kind getKind () { return kindBandShelf; }
+ static const char* getName() { return "Chebyshev I Band Shelf"; }
+};
+
+// This glues on the Order parameter
+template class TypeClass,
+ template class FilterClass>
+struct OrderBase : TypeClass >
+{
+ const ParamInfo getParamInfo_1 () const
+ {
+ return ParamInfo (idOrder, "Order", "Order",
+ 1, MaxOrder, 2,
+ &ParamInfo::Int_toControlValue,
+ &ParamInfo::Int_toNativeValue,
+ &ParamInfo::Int_toString);
+
+ }
+};
+
+//------------------------------------------------------------------------------
+
+//
+// Design filters
+//
+
+template
+struct LowPass : OrderBase ,
+ LowPassDescription
+{
+};
+
+template
+struct HighPass : OrderBase ,
+ HighPassDescription
+{
+};
+
+template
+struct BandPass : OrderBase ,
+ BandPassDescription
+{
+};
+
+template
+struct BandStop : OrderBase ,
+ BandStopDescription
+{
+};
+
+template
+struct LowShelf : OrderBase ,
+ LowShelfDescription
+{
+};
+
+template
+struct HighShelf : OrderBase ,
+ HighShelfDescription
+{
+};
+
+template
+struct BandShelf : OrderBase ,
+ BandShelfDescription
+{
+};
+
+}
+
+}
+
+}
+
+#endif
+
diff --git a/external/DSPFilters/shared/DSPFilters/include/DspFilters/ChebyshevII.h b/external/DSPFilters/shared/DSPFilters/include/DspFilters/ChebyshevII.h
new file mode 100644
index 0000000..9d0b467
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/include/DspFilters/ChebyshevII.h
@@ -0,0 +1,466 @@
+/*******************************************************************************
+
+"A Collection of Useful C++ Classes for Digital Signal Processing"
+ By Vinnie Falco
+
+Official project location:
+https://github.com/vinniefalco/DSPFilters
+
+See Documentation.cpp for contact information, notes, and bibliography.
+
+--------------------------------------------------------------------------------
+
+License: MIT License (http://www.opensource.org/licenses/mit-license.php)
+Copyright (c) 2009 by Vinnie Falco
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*******************************************************************************/
+
+#ifndef DSPFILTERS_CHEBYSHEVII_H
+#define DSPFILTERS_CHEBYSHEVII_H
+
+#include "DspFilters/Common.h"
+#include "DspFilters/Cascade.h"
+#include "DspFilters/Design.h"
+#include "DspFilters/Filter.h"
+#include "DspFilters/PoleFilter.h"
+
+namespace Dsp {
+
+/*
+ * Filters with Inverse Chebyshev response characteristics
+ *
+ */
+
+namespace ChebyshevII {
+
+// Half-band analog prototypes (s-plane)
+
+class AnalogLowPass : public LayoutBase
+{
+public:
+ AnalogLowPass ();
+
+ void design (const int numPoles,
+ double stopBandDb);
+
+private:
+ int m_numPoles;
+ double m_stopBandDb;
+};
+
+//------------------------------------------------------------------------------
+
+class AnalogLowShelf : public LayoutBase
+{
+public:
+ AnalogLowShelf ();
+
+ void design (int numPoles,
+ double gainDb,
+ double stopBandDb);
+
+private:
+ int m_numPoles;
+ double m_stopBandDb;
+ double m_gainDb;
+};
+
+//------------------------------------------------------------------------------
+
+// Factored implementations to reduce template instantiations
+
+struct LowPassBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency,
+ double stopBandDb);
+};
+
+struct HighPassBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency,
+ double stopBandDb);
+};
+
+struct BandPassBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double centerFrequency,
+ double widthFrequency,
+ double stopBandDb);
+};
+
+struct BandStopBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double centerFrequency,
+ double widthFrequency,
+ double stopBandDb);
+};
+
+struct LowShelfBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency,
+ double gainDb,
+ double stopBandDb);
+};
+
+struct HighShelfBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency,
+ double gainDb,
+ double stopBandDb);
+};
+
+struct BandShelfBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double centerFrequency,
+ double widthFrequency,
+ double gainDb,
+ double stopBandDb);
+};
+
+//------------------------------------------------------------------------------
+
+//
+// Raw filters
+//
+
+template
+struct LowPass : PoleFilter
+{
+};
+
+template
+struct HighPass : PoleFilter
+{
+};
+
+template
+struct BandPass : PoleFilter
+{
+};
+
+template
+struct BandStop : PoleFilter
+{
+};
+
+template
+struct LowShelf : PoleFilter
+{
+};
+
+template
+struct HighShelf : PoleFilter
+{
+};
+
+template
+struct BandShelf : PoleFilter
+{
+};
+
+//------------------------------------------------------------------------------
+
+//
+// Gui-friendly Design layer
+//
+
+namespace Design {
+
+struct TypeIBase : DesignBase
+{
+ enum
+ {
+ NumParams = 4
+ };
+
+ static int getNumParams ()
+ {
+ return 4;
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultCutoffFrequencyParam ();
+ }
+
+ static const ParamInfo getParamInfo_3 ()
+ {
+ return ParamInfo::defaultStopDbParam ();
+ }
+};
+
+template
+struct TypeI : TypeIBase, FilterClass
+{
+ void setParams (const Params& params)
+ {
+ FilterClass::setup (int(params[1]), params[0], params[2], params[3]);
+ }
+};
+
+struct TypeIIBase : DesignBase
+{
+ enum
+ {
+ NumParams = 5
+ };
+
+ static int getNumParams ()
+ {
+ return 5;
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultCenterFrequencyParam ();
+ }
+
+ static const ParamInfo getParamInfo_3 ()
+ {
+ return ParamInfo::defaultBandwidthHzParam ();
+ }
+
+ static const ParamInfo getParamInfo_4 ()
+ {
+ return ParamInfo::defaultStopDbParam ();
+ }
+};
+
+template
+struct TypeII : TypeIIBase, FilterClass
+{
+ void setParams (const Params& params)
+ {
+ FilterClass::setup (int(params[1]), params[0], params[2], params[3], params[4]);
+ }
+};
+
+struct TypeIIIBase : DesignBase
+{
+ enum
+ {
+ NumParams = 5
+ };
+
+ static int getNumParams ()
+ {
+ return 5;
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultCutoffFrequencyParam ();
+ }
+
+ static const ParamInfo getParamInfo_3 ()
+ {
+ return ParamInfo::defaultGainParam ();
+ }
+
+ static const ParamInfo getParamInfo_4 ()
+ {
+ return ParamInfo::defaultStopDbParam ();
+ }
+};
+
+template
+struct TypeIII : TypeIIIBase, FilterClass
+{
+ void setParams (const Params& params)
+ {
+ FilterClass::setup (int(params[1]), params[0], params[2], params[3], params[4]);
+ }
+};
+
+struct TypeIVBase : DesignBase
+{
+ enum
+ {
+ NumParams = 6
+ };
+
+ static int getNumParams ()
+ {
+ return 6;
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultCenterFrequencyParam ();
+ }
+
+ static const ParamInfo getParamInfo_3 ()
+ {
+ return ParamInfo::defaultBandwidthHzParam ();
+ }
+
+ static const ParamInfo getParamInfo_4 ()
+ {
+ return ParamInfo::defaultGainParam ();
+ }
+
+ static const ParamInfo getParamInfo_5 ()
+ {
+ return ParamInfo::defaultStopDbParam ();
+ }
+};
+
+template
+struct TypeIV : TypeIVBase, FilterClass
+{
+ void setParams (const Params& params)
+ {
+ FilterClass::setup (int(params[1]), params[0], params[2], params[3], params[4], params[5]);
+ }
+};
+
+// Factored kind and name
+
+struct LowPassDescription
+{
+ static Kind getKind () { return kindLowPass; }
+ static const char* getName() { return "Chebyshev II Low Pass"; }
+};
+
+struct HighPassDescription
+{
+ static Kind getKind () { return kindHighPass; }
+ static const char* getName() { return "Chebyshev II High Pass"; }
+};
+
+struct BandPassDescription
+{
+ static Kind getKind () { return kindHighPass; }
+ static const char* getName() { return "Chebyshev II Band Pass"; }
+};
+
+struct BandStopDescription
+{
+ static Kind getKind () { return kindHighPass; }
+ static const char* getName() { return "Chebyshev II Band Stop"; }
+};
+
+struct LowShelfDescription
+{
+ static Kind getKind () { return kindLowShelf; }
+ static const char* getName() { return "Chebyshev II Low Shelf"; }
+};
+
+struct HighShelfDescription
+{
+ static Kind getKind () { return kindHighShelf; }
+ static const char* getName() { return "Chebyshev II High Shelf"; }
+};
+
+struct BandShelfDescription
+{
+ static Kind getKind () { return kindBandShelf; }
+ static const char* getName() { return "Chebyshev II Band Shelf"; }
+};
+
+// This glues on the Order parameter
+template class TypeClass,
+ template class FilterClass>
+struct OrderBase : TypeClass >
+{
+ const ParamInfo getParamInfo_1 () const
+ {
+ return ParamInfo (idOrder, "Order", "Order",
+ 1, MaxOrder, 2,
+ &ParamInfo::Int_toControlValue,
+ &ParamInfo::Int_toNativeValue,
+ &ParamInfo::Int_toString);
+
+ }
+};
+
+//------------------------------------------------------------------------------
+
+//
+// Design Filters
+//
+
+template
+struct LowPass : OrderBase ,
+ LowPassDescription
+{
+};
+
+template
+struct HighPass : OrderBase ,
+ HighPassDescription
+{
+};
+
+template
+struct BandPass : OrderBase ,
+ BandPassDescription
+{
+};
+
+template
+struct BandStop : OrderBase ,
+ BandStopDescription
+{
+};
+
+template
+struct LowShelf : OrderBase ,
+ LowShelfDescription
+{
+};
+
+template
+struct HighShelf : OrderBase ,
+ HighShelfDescription
+{
+};
+
+template
+struct BandShelf : OrderBase ,
+ BandShelfDescription
+{
+};
+
+
+}
+
+}
+
+}
+
+#endif
+
diff --git a/external/DSPFilters/shared/DSPFilters/include/DspFilters/Common.h b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Common.h
new file mode 100644
index 0000000..7955b93
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Common.h
@@ -0,0 +1,67 @@
+/*******************************************************************************
+
+"A Collection of Useful C++ Classes for Digital Signal Processing"
+ By Vinnie Falco
+
+Official project location:
+https://github.com/vinniefalco/DSPFilters
+
+See Documentation.cpp for contact information, notes, and bibliography.
+
+--------------------------------------------------------------------------------
+
+License: MIT License (http://www.opensource.org/licenses/mit-license.php)
+Copyright (c) 2009 by Vinnie Falco
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*******************************************************************************/
+
+#ifndef DSPFILTERS_COMMON_H
+#define DSPFILTERS_COMMON_H
+
+//
+// This must be the first file included in every DspFilters header and source
+//
+
+#ifdef _MSC_VER
+# pragma warning (disable: 4100)
+#endif
+
+//#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifdef _MSC_VER
+namespace tr1 = std::tr1;
+#else
+namespace tr1 = std;
+#endif
+
+
+#endif
diff --git a/external/DSPFilters/shared/DSPFilters/include/DspFilters/Custom.h b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Custom.h
new file mode 100644
index 0000000..615c1a7
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Custom.h
@@ -0,0 +1,177 @@
+/*******************************************************************************
+
+"A Collection of Useful C++ Classes for Digital Signal Processing"
+ By Vinnie Falco
+
+Official project location:
+https://github.com/vinniefalco/DSPFilters
+
+See Documentation.cpp for contact information, notes, and bibliography.
+
+--------------------------------------------------------------------------------
+
+License: MIT License (http://www.opensource.org/licenses/mit-license.php)
+Copyright (c) 2009 by Vinnie Falco
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*******************************************************************************/
+
+#ifndef DSPFILTERS_CUSTOM_H
+#define DSPFILTERS_CUSTOM_H
+
+#include "DspFilters/Common.h"
+#include "DspFilters/Biquad.h"
+#include "DspFilters/Design.h"
+#include "DspFilters/Filter.h"
+
+namespace Dsp {
+
+/*
+ * Single pole and Biquad with parameters allowing
+ * for directly setting the poles and zeros
+ *
+ */
+
+namespace Custom {
+
+//
+// Raw filters
+//
+
+struct OnePole : Biquad
+{
+ void setup (double scale,
+ double pole,
+ double zero);
+};
+
+struct TwoPole : Biquad
+{
+ void setup (double scale,
+ double poleRho,
+ double poleTheta,
+ double zeroRho,
+ double zeroTheta);
+};
+
+//------------------------------------------------------------------------------
+
+//
+// Gui-friendly Design layer
+//
+
+namespace Design {
+
+struct OnePole : DesignBase, Custom::OnePole
+{
+ enum
+ {
+ NumParams = 4
+ };
+
+ static int getNumParams ()
+ {
+ return 4;
+ }
+
+ static const ParamInfo getParamInfo_1 ()
+ {
+ return ParamInfo::defaultGainParam ();
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultPoleRealParam ();
+ }
+
+ static const ParamInfo getParamInfo_3 ()
+ {
+ return ParamInfo::defaultZeroRealParam ();
+ }
+
+ static Kind getKind () { return kindOther; }
+ static const char* getName() { return "Custom One-Pole"; }
+
+ void setParams (const Params& params)
+ {
+ setup (pow (10., params[1]/20),
+ params[2],
+ params[3]);
+ }
+};
+
+struct TwoPole : DesignBase, Custom::TwoPole
+{
+ enum
+ {
+ NumParams = 6
+ };
+
+ static int getNumParams ()
+ {
+ return 6;
+ }
+
+ static const ParamInfo getParamInfo_1 ()
+ {
+ return ParamInfo::defaultGainParam ();
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultPoleRhoParam ();
+ }
+
+ static const ParamInfo getParamInfo_3 ()
+ {
+ return ParamInfo::defaultPoleThetaParam ();
+ }
+
+ static const ParamInfo getParamInfo_4 ()
+ {
+ return ParamInfo::defaultZeroRhoParam ();
+ }
+
+ static const ParamInfo getParamInfo_5 ()
+ {
+ return ParamInfo::defaultZeroThetaParam ();
+ }
+
+
+ static Kind getKind () { return kindOther; }
+ static const char* getName() { return "Custom Two-Pole"; }
+
+ void setParams (const Params& params)
+ {
+ setup (pow (10., params[1]/20),
+ params[2],
+ params[3],
+ params[4],
+ params[5]);
+ }
+};
+
+}
+
+}
+
+}
+
+#endif
diff --git a/external/DSPFilters/shared/DSPFilters/include/DspFilters/Design.h b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Design.h
new file mode 100644
index 0000000..9ac54e0
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Design.h
@@ -0,0 +1,64 @@
+/*******************************************************************************
+
+"A Collection of Useful C++ Classes for Digital Signal Processing"
+ By Vinnie Falco
+
+Official project location:
+https://github.com/vinniefalco/DSPFilters
+
+See Documentation.cpp for contact information, notes, and bibliography.
+
+--------------------------------------------------------------------------------
+
+License: MIT License (http://www.opensource.org/licenses/mit-license.php)
+Copyright (c) 2009 by Vinnie Falco
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*******************************************************************************/
+
+#ifndef DSPFILTERS_DESIGN_H
+#define DSPFILTERS_DESIGN_H
+
+#include "DspFilters/Common.h"
+#include "DspFilters/Params.h"
+
+namespace Dsp {
+
+struct DesignBase
+{
+ // Sampling rate is the first param for every Design filter
+ static const ParamInfo getParamInfo_0 ()
+ {
+ return ParamInfo::defaultSampleRateParam ();
+ }
+
+ // These should never get called
+ static const ParamInfo getParamInfo_1 () { return ParamInfo(); }
+ static const ParamInfo getParamInfo_2 () { return ParamInfo(); }
+ static const ParamInfo getParamInfo_3 () { return ParamInfo(); }
+ static const ParamInfo getParamInfo_4 () { return ParamInfo(); }
+ static const ParamInfo getParamInfo_5 () { return ParamInfo(); }
+ static const ParamInfo getParamInfo_6 () { return ParamInfo(); }
+ static const ParamInfo getParamInfo_7 () { return ParamInfo(); }
+};
+
+}
+
+#endif
diff --git a/external/DSPFilters/shared/DSPFilters/include/DspFilters/Dsp.h b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Dsp.h
new file mode 100644
index 0000000..bc084e4
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Dsp.h
@@ -0,0 +1,62 @@
+/*******************************************************************************
+
+"A Collection of Useful C++ Classes for Digital Signal Processing"
+ By Vinnie Falco
+
+Official project location:
+https://github.com/vinniefalco/DSPFilters
+
+See Documentation.cpp for contact information, notes, and bibliography.
+
+--------------------------------------------------------------------------------
+
+License: MIT License (http://www.opensource.org/licenses/mit-license.php)
+Copyright (c) 2009 by Vinnie Falco
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*******************************************************************************/
+
+#ifndef DSPFILTERS_DSP_H
+#define DSPFILTERS_DSP_H
+
+//
+// Include this file in your application to get everything
+//
+
+#include "DspFilters/Common.h"
+
+#include "DspFilters/Biquad.h"
+#include "DspFilters/Cascade.h"
+#include "DspFilters/Filter.h"
+#include "DspFilters/PoleFilter.h"
+#include "DspFilters/SmoothedFilter.h"
+#include "DspFilters/State.h"
+#include "DspFilters/Utilities.h"
+
+#include "DspFilters/Bessel.h"
+#include "DspFilters/Butterworth.h"
+#include "DspFilters/ChebyshevI.h"
+#include "DspFilters/ChebyshevII.h"
+#include "DspFilters/Custom.h"
+#include "DspFilters/Elliptic.h"
+#include "DspFilters/Legendre.h"
+#include "DspFilters/RBJ.h"
+
+#endif
diff --git a/external/DSPFilters/shared/DSPFilters/include/DspFilters/Elliptic.h b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Elliptic.h
new file mode 100644
index 0000000..341f0a6
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Elliptic.h
@@ -0,0 +1,359 @@
+/*******************************************************************************
+
+"A Collection of Useful C++ Classes for Digital Signal Processing"
+ By Vinnie Falco
+
+Official project location:
+https://github.com/vinniefalco/DSPFilters
+
+See Documentation.cpp for contact information, notes, and bibliography.
+
+--------------------------------------------------------------------------------
+
+License: MIT License (http://www.opensource.org/licenses/mit-license.php)
+Copyright (c) 2009 by Vinnie Falco
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*******************************************************************************/
+
+#ifndef DSPFILTERS_ELLIPTIC_H
+#define DSPFILTERS_ELLIPTIC_H
+
+#include "DspFilters/Common.h"
+#include "DspFilters/Cascade.h"
+#include "DspFilters/Design.h"
+#include "DspFilters/Filter.h"
+#include "DspFilters/PoleFilter.h"
+
+namespace Dsp {
+
+/*
+ * Filters with Elliptic response characteristics
+ *
+ */
+
+namespace Elliptic {
+
+// Solves for Jacobi elliptics
+class Solver
+{
+public:
+ static double ellipticK (double k);
+};
+
+// Half-band analog prototype (s-plane)
+
+class AnalogLowPass : public LayoutBase
+{
+public:
+ AnalogLowPass ();
+
+ void design (const int numPoles,
+ double rippleDb,
+ double rolloff);
+
+private:
+ void prodpoly (int sn);
+ void calcfz2 (int i);
+ void calcfz ();
+ void calcqz ();
+ double findfact (int t);
+ double calcsn (double u);
+
+#if 0
+ template
+ struct CalcArray
+ {
+ double& operator[](size_t index)
+ {
+ assert( index
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency,
+ double rippleDb,
+ double rolloff);
+};
+
+struct HighPassBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double cutoffFrequency,
+ double rippleDb,
+ double rolloff);
+};
+
+struct BandPassBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double centerFrequency,
+ double widthFrequency,
+ double rippleDb,
+ double rolloff);
+};
+
+struct BandStopBase : PoleFilterBase
+{
+ void setup (int order,
+ double sampleRate,
+ double centerFrequency,
+ double widthFrequency,
+ double rippleDb,
+ double rolloff);
+};
+
+//------------------------------------------------------------------------------
+
+//
+// Raw filters
+//
+
+template
+struct LowPass : PoleFilter
+{
+};
+
+template
+struct HighPass : PoleFilter
+{
+};
+
+template
+struct BandPass : PoleFilter
+{
+};
+
+template
+struct BandStop : PoleFilter
+{
+};
+
+//------------------------------------------------------------------------------
+
+//
+// Gui-friendly Design layer
+//
+
+namespace Design {
+
+struct TypeIBase : DesignBase
+{
+ enum
+ {
+ NumParams = 5
+ };
+
+ static int getNumParams ()
+ {
+ return 5;
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultCutoffFrequencyParam ();
+ }
+
+ static const ParamInfo getParamInfo_3 ()
+ {
+ return ParamInfo::defaultRippleDbParam ();
+ }
+
+ static const ParamInfo getParamInfo_4 ()
+ {
+ return ParamInfo::defaultRolloffParam ();
+ }
+};
+
+template
+struct TypeI : TypeIBase, FilterClass
+{
+ void setParams (const Params& params)
+ {
+ FilterClass::setup (int(params[1]), params[0], params[2], params[3], params[4]);
+ }
+};
+
+struct TypeIIBase : DesignBase
+{
+ enum
+ {
+ NumParams = 6
+ };
+
+ static int getNumParams ()
+ {
+ return 6;
+ }
+
+ static const ParamInfo getParamInfo_2 ()
+ {
+ return ParamInfo::defaultCenterFrequencyParam ();
+ }
+
+ static const ParamInfo getParamInfo_3 ()
+ {
+ return ParamInfo::defaultBandwidthHzParam ();
+ }
+
+ static const ParamInfo getParamInfo_4 ()
+ {
+ return ParamInfo::defaultRippleDbParam ();
+ }
+
+ static const ParamInfo getParamInfo_5 ()
+ {
+ return ParamInfo::defaultRolloffParam ();
+ }
+};
+
+template
+struct TypeII : TypeIIBase, FilterClass
+{
+ void setParams (const Params& params)
+ {
+ FilterClass::setup (int(params[1]), params[0], params[2], params[3], params[4], params[5]);
+ }
+};
+
+// Factored kind and name
+
+struct LowPassDescription
+{
+ static Kind getKind () { return kindLowPass; }
+ static const char* getName() { return "Elliptic Low Pass"; }
+};
+
+struct HighPassDescription
+{
+ static Kind getKind () { return kindHighPass; }
+ static const char* getName() { return "Elliptic High Pass"; }
+};
+
+struct BandPassDescription
+{
+ static Kind getKind () { return kindHighPass; }
+ static const char* getName() { return "Elliptic Band Pass"; }
+};
+
+struct BandStopDescription
+{
+ static Kind getKind () { return kindHighPass; }
+ static const char* getName() { return "Elliptic Band Stop"; }
+};
+
+// This glues on the Order parameter
+template class TypeClass,
+ template class FilterClass>
+struct OrderBase : TypeClass >
+{
+ const ParamInfo getParamInfo_1 () const
+ {
+ return ParamInfo (idOrder, "Order", "Order",
+ 1, MaxOrder, 2,
+ &ParamInfo::Int_toControlValue,
+ &ParamInfo::Int_toNativeValue,
+ &ParamInfo::Int_toString);
+
+ }
+};
+//------------------------------------------------------------------------------
+
+//
+// Design filters
+//
+
+template
+struct LowPass : OrderBase ,
+ LowPassDescription
+{
+};
+
+template
+struct HighPass : OrderBase ,
+ HighPassDescription
+{
+};
+
+template
+struct BandPass : OrderBase ,
+ BandPassDescription
+{
+};
+
+template
+struct BandStop : OrderBase ,
+ BandStopDescription
+{
+};
+
+}
+
+}
+
+}
+
+#endif
+
diff --git a/external/DSPFilters/shared/DSPFilters/include/DspFilters/Filter.h b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Filter.h
new file mode 100644
index 0000000..f110db2
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Filter.h
@@ -0,0 +1,269 @@
+/*******************************************************************************
+
+"A Collection of Useful C++ Classes for Digital Signal Processing"
+ By Vinnie Falco
+
+Official project location:
+https://github.com/vinniefalco/DSPFilters
+
+See Documentation.cpp for contact information, notes, and bibliography.
+
+--------------------------------------------------------------------------------
+
+License: MIT License (http://www.opensource.org/licenses/mit-license.php)
+Copyright (c) 2009 by Vinnie Falco
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*******************************************************************************/
+
+#ifndef DSPFILTERS_FILTER_H
+#define DSPFILTERS_FILTER_H
+
+#include "DspFilters/Common.h"
+#include "DspFilters/MathSupplement.h"
+#include "DspFilters/Params.h"
+#include "DspFilters/State.h"
+#include "DspFilters/Types.h"
+
+namespace Dsp {
+
+/*
+ * Filter
+ *
+ * Full abstraction of a digital IIR filter.
+ * Supports run-time introspection and modulation of filter
+ * parameters.
+ *
+ */
+class Filter
+{
+public:
+ virtual ~Filter();
+
+ virtual Kind getKind () const = 0;
+
+ virtual const std::string getName () const = 0;
+
+ virtual int getNumParams () const = 0;
+
+ virtual ParamInfo getParamInfo (int index) const = 0;
+
+ Params getDefaultParams() const;
+
+ const Params& getParams() const
+ {
+ return m_params;
+ }
+
+ double getParam (int paramIndex) const
+ {
+ assert (paramIndex >= 0 && paramIndex <= getNumParams());
+ return m_params[paramIndex];
+ }
+
+ void setParam (int paramIndex, double nativeValue)
+ {
+ assert (paramIndex >= 0 && paramIndex <= getNumParams());
+ m_params[paramIndex] = nativeValue;
+ doSetParams (m_params);
+ }
+
+ int findParamId (int paramId);
+
+ void setParamById (int paramId, double nativeValue);
+
+ void setParams (const Params& parameters)
+ {
+ m_params = parameters;
+ doSetParams (parameters);
+ }
+
+ // This makes a best-effort to pick up the values
+ // of matching parameters from another set. It uses
+ // the ParamID information to make the match.
+ void copyParamsFrom (Dsp::Filter const* other);
+
+ virtual std::vector getPoleZeros() const = 0;
+
+ virtual complex_t response (double normalizedFrequency) const = 0;
+
+ virtual int getNumChannels() = 0;
+ virtual void reset () = 0;
+ virtual void process (int numSamples, float* const* arrayOfChannels) = 0;
+ virtual void process (int numSamples, double* const* arrayOfChannels) = 0;
+
+protected:
+ virtual void doSetParams (const Params& parameters) = 0;
+
+private:
+ Params m_params;
+};
+
+//------------------------------------------------------------------------------
+
+/*
+ * FilterDesign
+ *
+ * This container holds a filter Design (Gui-friendly layer) and
+ * optionally combines it with the necessary state information to
+ * process channel data.
+ *
+ */
+
+// Factored to reduce template instantiations
+template
+class FilterDesignBase : public Filter
+{
+public:
+ Kind getKind () const
+ {
+ return m_design.getKind ();
+ }
+
+ const std::string getName () const
+ {
+ return m_design.getName ();
+ }
+
+ int getNumParams () const
+ {
+ return DesignClass::NumParams;
+ }
+
+ Params getDefaultParams() const
+ {
+ return m_design.getDefaultParams();
+ }
+
+ ParamInfo getParamInfo (int index) const
+ {
+ switch (index)
+ {
+ case 0: return m_design.getParamInfo_0 ();
+ case 1: return m_design.getParamInfo_1 ();
+ case 2: return m_design.getParamInfo_2 ();
+ case 3: return m_design.getParamInfo_3 ();
+ case 4: return m_design.getParamInfo_4 ();
+ case 5: return m_design.getParamInfo_5 ();
+ case 6: return m_design.getParamInfo_6 ();
+ case 7: return m_design.getParamInfo_7 ();
+ };
+
+ return ParamInfo();
+ }
+
+ std::vector getPoleZeros() const
+ {
+ return m_design.getPoleZeros();
+ }
+
+ complex_t response (double normalizedFrequency) const
+ {
+ return m_design.response (normalizedFrequency);
+ }
+
+protected:
+ void doSetParams (const Params& parameters)
+ {
+ m_design.setParams (parameters);
+ }
+
+protected:
+ DesignClass m_design;
+};
+
+
+
+template
+class FilterDesign : public FilterDesignBase
+{
+public:
+ FilterDesign ()
+ {
+ }
+
+ int getNumChannels()
+ {
+ return Channels;
+ }
+
+ void reset ()
+ {
+ m_state.reset();
+ }
+
+ void process (int numSamples, float* const* arrayOfChannels)
+ {
+ m_state.process (numSamples, arrayOfChannels,
+ FilterDesignBase::m_design);
+ }
+
+ void process (int numSamples, double* const* arrayOfChannels)
+ {
+ m_state.process (numSamples, arrayOfChannels,
+ FilterDesignBase::m_design);
+ }
+
+protected:
+ ChannelsState > m_state;
+};
+
+//------------------------------------------------------------------------------
+
+/*
+ * This container combines a raw filter with state information
+ * so it can process channels. In order to set up the filter you
+ * must call a setup function directly. Smooth changes are
+ * not supported, but this class has a smaller footprint.
+ *
+ */
+template
+class SimpleFilter : public FilterClass
+{
+public:
+ int getNumChannels()
+ {
+ return Channels;
+ }
+
+ void reset ()
+ {
+ m_state.reset();
+ }
+
+ template
+ void process (int numSamples, Sample* const* arrayOfChannels)
+ {
+ m_state.process (numSamples, arrayOfChannels, *((FilterClass*)this));
+ }
+
+protected:
+ ChannelsState > m_state;
+};
+
+}
+
+#endif
diff --git a/external/DSPFilters/shared/DSPFilters/include/DspFilters/Layout.h b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Layout.h
new file mode 100644
index 0000000..9d8aab3
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Layout.h
@@ -0,0 +1,170 @@
+/*******************************************************************************
+
+"A Collection of Useful C++ Classes for Digital Signal Processing"
+ By Vinnie Falco
+
+Official project location:
+https://github.com/vinniefalco/DSPFilters
+
+See Documentation.cpp for contact information, notes, and bibliography.
+
+--------------------------------------------------------------------------------
+
+License: MIT License (http://www.opensource.org/licenses/mit-license.php)
+Copyright (c) 2009 by Vinnie Falco
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*******************************************************************************/
+
+#ifndef DSPFILTERS_LAYOUT_H
+#define DSPFILTERS_LAYOUT_H
+
+#include "DspFilters/Common.h"
+#include "DspFilters/MathSupplement.h"
+
+namespace Dsp {
+
+//
+// Describes a filter as a collection of poles and zeros along with
+// normalization information to achieve a specified gain at a specified
+// frequency. The poles and zeros may lie either in the s or the z plane.
+//
+
+// Base uses pointers to reduce template instantiations
+class LayoutBase
+{
+public:
+ LayoutBase ()
+ : m_numPoles (0)
+ , m_maxPoles (0)
+ {
+ }
+
+ LayoutBase (int maxPoles, PoleZeroPair* pairs)
+ : m_numPoles (0)
+ , m_maxPoles (maxPoles)
+ , m_pair (pairs)
+ {
+ }
+
+ void setStorage (const LayoutBase& other)
+ {
+ m_numPoles = 0;
+ m_maxPoles = other.m_maxPoles;
+ m_pair = other.m_pair;
+ }
+
+ void reset ()
+ {
+ m_numPoles = 0;
+ }
+
+ int getNumPoles () const
+ {
+ return m_numPoles;
+ }
+
+ int getMaxPoles () const
+ {
+ return m_maxPoles;
+ }
+
+ void add (const complex_t& pole, const complex_t& zero)
+ {
+ assert (!(m_numPoles&1)); // single comes last
+ assert (!Dsp::is_nan (pole));
+ m_pair[m_numPoles/2] = PoleZeroPair (pole, zero);
+ ++m_numPoles;
+ }
+
+ void addPoleZeroConjugatePairs (const complex_t pole,
+ const complex_t zero)
+ {
+ assert (!(m_numPoles&1)); // single comes last
+ assert (!Dsp::is_nan (pole));
+ m_pair[m_numPoles/2] = PoleZeroPair (
+ pole, zero, std::conj (pole), std::conj (zero));
+ m_numPoles += 2;
+ }
+
+ void add (const ComplexPair& poles, const ComplexPair& zeros)
+ {
+ assert (!(m_numPoles&1)); // single comes last
+ assert (poles.isMatchedPair ());
+ assert (zeros.isMatchedPair ());
+ m_pair[m_numPoles/2] = PoleZeroPair (poles.first, zeros.first,
+ poles.second, zeros.second);
+ m_numPoles += 2;
+ }
+
+ const PoleZeroPair& getPair (int pairIndex) const
+ {
+ assert (pairIndex >= 0 && pairIndex < (m_numPoles+1)/2);
+ return m_pair[pairIndex];
+ }
+
+ const PoleZeroPair& operator[] (int pairIndex) const
+ {
+ return getPair (pairIndex);
+ }
+
+ double getNormalW () const
+ {
+ return m_normalW;
+ }
+
+ double getNormalGain () const
+ {
+ return m_normalGain;
+ }
+
+ void setNormal (double w, double g)
+ {
+ m_normalW = w;
+ m_normalGain = g;
+ }
+
+private:
+ int m_numPoles;
+ int m_maxPoles;
+ PoleZeroPair* m_pair;
+ double m_normalW;
+ double m_normalGain;
+};
+
+//------------------------------------------------------------------------------
+
+// Storage for Layout
+template
+class Layout
+{
+public:
+ operator LayoutBase ()
+ {
+ return LayoutBase (MaxPoles, m_pairs);
+ }
+
+private:
+ PoleZeroPair m_pairs[(MaxPoles+1)/2];
+};
+
+}
+
+#endif
diff --git a/external/DSPFilters/shared/DSPFilters/include/DspFilters/Legendre.h b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Legendre.h
new file mode 100644
index 0000000..5bb0310
--- /dev/null
+++ b/external/DSPFilters/shared/DSPFilters/include/DspFilters/Legendre.h
@@ -0,0 +1,417 @@
+/*******************************************************************************
+
+"A Collection of Useful C++ Classes for Digital Signal Processing"
+ By Vinnie Falco
+
+Official project location:
+https://github.com/vinniefalco/DSPFilters
+
+See Documentation.cpp for contact information, notes, and bibliography.
+
+--------------------------------------------------------------------------------
+
+License: MIT License (http://www.opensource.org/licenses/mit-license.php)
+Copyright (c) 2009 by Vinnie Falco
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*******************************************************************************/
+
+#ifndef DSPFILTERS_LEGENDRE_H
+#define DSPFILTERS_LEGENDRE_H
+
+#include "DspFilters/Common.h"
+#include "DspFilters/Cascade.h"
+#include "DspFilters/Design.h"
+#include "DspFilters/Filter.h"
+#include "DspFilters/PoleFilter.h"
+#include "DspFilters/RootFinder.h"
+
+namespace Dsp {
+
+/*
+ * Filters with Legendre / "Optimum-L" response characteristics
+ *
+ */
+
+namespace Legendre {
+
+// Numerical computation of Legendre "Optimum-L" polynomials
+
+class PolynomialFinderBase
+{
+public:
+ void solve (int n);
+
+ double* coef()
+ {
+ return m_w;
+ }
+
+private:
+ void legendre (double* p, int n);
+
+protected:
+ int m_maxN;
+ double* m_w;
+ double* m_a;
+ double* m_p;
+ double* m_s;
+ double* m_v;
+ double* m_aa;
+ double* m_bb;
+};
+
+template
+class PolynomialFinder : public PolynomialFinderBase
+{
+public:
+ PolynomialFinder ()
+ {
+ m_maxN = maxN;
+ m_w = m_ws;
+ m_a = m_as;
+ m_p = m_ps;
+ m_s = m_ss;
+ m_v = m_vs;
+ m_aa = m_aas;
+ m_bb = m_bbs;
+ }
+
+ void solve (int n)
+ {
+ assert (n <= maxN);
+ PolynomialFinderBase::solve (n);
+ }
+
+private:
+ double m_ws [2 * maxN + 1];
+ double m_as [ maxN + 1];
+ double m_ps [2 * maxN + 1];
+ double m_ss [2 * maxN + 1];
+ double m_vs [2 * maxN + 4];
+ double m_aas [ maxN + 1];
+ double m_bbs [ maxN + 1];
+};
+
+//------------------------------------------------------------------------------
+
+// A Workspace is necessary to construct the polynomial and find its roots
+
+struct WorkspaceBase
+{
+ WorkspaceBase (PolynomialFinderBase* polyBase,
+ RootFinderBase* rootsBase)
+ : poly (*polyBase)
+ , roots (*rootsBase)
+ {
+ }
+
+ PolynomialFinderBase& poly;
+ RootFinderBase& roots;
+
+private:
+ WorkspaceBase (WorkspaceBase&);
+ WorkspaceBase& operator= (WorkspaceBase&);
+};
+
+template