Audio ToolKit is a set of audio filters. It helps assembling workflows for specific audio processing workloads.

The audio workflow is split in independent components (without feedback loops) that consist of filters. Each filter has a set of synchronized input and output ports that can be connected together. All input ports must be connected, but not all output ports need to be.

Sampling rate can be independent between input and output ports, but input sampling rates are identical, and output sampling rates are also identical.

License

Audio Toolkit is published under the BSD license.

Changelog

2.3.2

Fix initialization indices in Custom IIR and FIR Filters

USe gsl::index for loop indices

2.3.1

Fix Python wrappers

2.3.0

Increased test coverage and fix lots of small mistakes in the API

Allow inplace Python tests (before make install) on Linux

Split big files to allow native compilation on embedded platforms

2.2.2

Fix a TDF2 IIR filter bug when the state was not reinitialized, leading to unstabilities

Fix a bug when delays were changed but not the underlying buffers, leading to buffer underflows

Adding a new Broadcast filter (filling all SIMD vector lines with the same input value)

Adding a new Reduce filter (summing all SIMD vector lines to the output value)

0.3.1

Added restrict pointer support in all filter that can benefit from this

0.3.0

Enhanced the ScalarNewtonRaphson algorithm to accept different precision. Used a more relaxed one by default

Fixed a bug in SD1OverdriveFilter

Optimized array copies between filters

Added documentation

0.2.1

Fix some issues with deploying ATK

Tone stacks (Bassman and JCM800) with Python wrappers

Updated filters C++ interface when then can process several channels at the same time

0.2.0

SD1 tone circuit with Python wrappers

Changed the main process method behavior, no needed to call reset each time

Added methods to *PointerFilter to enable use in audio plugins as sinks/sources

0.1.1

Padding/delay support

FFTW support

Profiling facilities

Butterworth high pass, band pass and band stop filters

Python wrappers for all Butterworth filters

Bessel filters

Python wrappers for all Bessel filters

Chebyshev type 1 and 2 filters

Python wrappers for all Chebyshev type 1 and 2 filters

SD1 overdrive filter and Python wrappers

0.1.0

Butterworth low pass filter

Python wrappers for Distortion filters

0.0.3

Audio files input/output filters based on libsndfile

Input and output filters based on pointers

Python wrappers for Core filters

Python wrappers for EQ filters

Python wrappers for Tools filters

0.0.2

Middle Side separator filter for stereo channels

Sinus generator filter for Mock tests

Frequency tester based on Accelerate FFT for Mock tests

Second order EQ filters

Decimation filters

Oversampling filters

Basic Wav input/output filters

Overdrive filter implementation

0.0.1

Base filter with automatic type conversion to help assemble plugins with different processing types

Mock filters for generating and checking some signals

Pan filters with different laws

0 dB center, sin/cos taper, constant power

-3 dB center, sin/cos taper, constant power

0 dB center, square-root taper, constant power

-3 dB center, square-root taper, constant power

-6 dB center, linear taper

0 dB center, balance control

Volume filter, with gain input in dB and no dB

Sum filter

Install

Requirements

C++11 compiler

CMake

Boost 1.60

FFT library (for some filters like the fast convolution filter)

FFTW

IPP (default)

Python with numpy (for Python support)

Eigen (for some complex modules)

libsndfile (for sound file I/O)

Procedure

Start CMake

Configure your options

Run make, Visual Studio or XCode

Usage

CMake

By setting ATK_DIR, you can import a package with FIND_PACKAGE(ATK) and components are supported. ATK_INCLUDE_DIRS and ATK_LIBRARIES are the main variables set, but each individual library can also be linked against instead of all of them.

Shared libraries and static libraries are different components (for instance Core and Core_static), by not setting components, all the shared libraries available will be stored in ATK_LIBRARIES.

Known Issues

If a plugin uses the same buffers for input and output and the pipeline has two subgraphs, one from left to right and one to left (for instance), then they are processed in order and the second graph would use the result of the first branch. To fix this, add a BufferFilter just after the input filter so that they are all buffered and copied to an intermediate buffer when the first one is used. It adds a copy, so only use this fix when you have this specific configuration for a pipeline.