Audio Mixing and Manipulation Project Logo

Effects: Under The Hood
The AMaMP Core features a modular plug-in style effects system, coupled with build tools to make effect development a simple process as free as possible of cross-platform build issues.

FX Files
Effects start life by the writing of a an FX file. This is a file containing a mixture of C code implementing the effect and what we call directives and macros, which respectively state what bits of code are to be used for what (e.g. initialisation, effect application) and allow various bits of data to be accessed (e.g. the sampling rate of the effect data we have in the buffers of data we are to apply the effect to). These are documented in the documentation for fx2c, which is the name of the tool used for the next stage. .fx files are placed in the effects directory, and should carry the name of the module, as specified by the MODULE directive inside the .fx file itself.

fx2c is the effects build tool. It takes an fx file and some data generated by the Configure script about the target system and generates a file of C code that can either be compiled into a dynamically loadable library for the current platform or to an object file that can be linked into the core itself.

The makefile
As well as generating data for fx2c to use, Configure also writes a makefile. This both invokes fx2c for each .fx file in the effects directory and then does the compilation and linking into a shared library *or* the compilation to an object file which is linked into the core, right at the end of the build process.

The yet-to-be-written (at the time of writing) fxlt will be invoked if effects are being compiled into the core. It will generate a C file that provides the lookup table for effects compiled into the core, which will also be compiled to an object file and linked into the core
, right at the end of the build process.

Shared or compiled into the core?
The Configure script will decide to build the effects as dynamically loadable libraries by default if it knows how to for that particular platform. Otherwise effects will always be compiled into the core. It is possible to override this decision and ask for effects to be compiled into the core no matter what by passing the --fxincore flag to the Configure script.