Audio Mixing and Manipulation Project Logo

The Core
The AMaMP core provides a powerful and compact audio mixing engine. It currently has the following features:

  • Cross-platform audio engine known to work on Windows, Linux, BSD, Mac OSX and Sun Solaris accross a wide range of processor architectures (including x86, PPC, Alpha and Sparc).
  • Allows for placement of inputs on a virtual timescale, and routing of inputs to multiple outputs via any number of effects.
  • Simple instruction file format and IPC to enable you to use AMaMP as a backend for your own applications.
  • Completely modular I/O system
    • Supports reading and writing of PCM Wave Files
    • Output to soundcard on Windows, cygwin and Linux
    • Recording from soundcard on Windows and cygwin
    • Powerful tools for I/O module developers...
      • Preprocessor to build natively compiling C code from an IO file.
      • Automated building of IO modules as native DLLs or core modules.
      • Automated checking of parameters passed to IO modules.
  • Powerful plug-in style effects system.
    • A range of effects ready to use...
      • Multi-tap Delay
      • Noise Gate
      • Volume Shaping
      • Flange (slightly broken)
    • Powerful tools for effect module developers...
      • Preprocessor to build natively compiling C code from an FX file.
      • Automated building of effects as native DLLs or core modules.
      • Automated checking of parameters passed to effects modules.
  • Non-destructive trimming, volume change and panning
  • IPC mechanism to control the core at mix time from other applications.
    • Add inputs, outputs and effects
    • Add, modify and remove placements
    • Pause, resume and stop
    • Get and set the current position (enabling fast forward, rewind, etc)
    • Exchange IPC messages with effects and I/O modules
    • Get a list of available effects and I/O modules
    • Check if a file can be read by a certain module, get the length of the audio data in the file.
  • Language bindings for C, Visual Basic and Perl (C & Perl work on Windows and POSIX compliant platforms). Look in the bindings folder, or on CPAN for the Perl binding.

The AMaMP core is not just for frontends we develop as part of the project - it is available for developers to use in their projects. By being a stand-alone executable you can distribute it as a part of a package distributed under a non-GPL license, provided you use the core itself in compliance with the GPL. Why not head over to the download page or look at the documentation to see how it suits you?

The core is now usable but a long way from being feature complete. If you are interested in contributing to the core, please check this page.

The To Do List
The following things are planned for release 0.4:

  • Implement io2c and iolt build tools to support the builidng of input/output modules, which may be loadable or compiled into the core. (DONE)
  • Modify the DLL abstraction layer and build system so that it is possible to build some effects and/or I/O modules into the core, but not others. (DONE)
  • Convert current I/O modules to the new IO format. (DONE)
  • Modify the parser to use the new I/O syntax and to stash more data in a parameters structure so as to increase abstraction. (DONE)
  • Modify the core to use the I/O modules; remove old I/O subsystem. (DONE)
  • Implement file type lookup system. (STATUS: Hooks in place)
  • Implement some new I/O modules:-
    • OGG Vorbis (TO DO)
    • MP3 (TO DO)
    • Soundcard recording support for Win32 and Linux (STATUS: Win32 Support Complete, Linux To Do)
  • Implement some new effect modules:-
    • Reverb (TO DO)
    • Flange (TO DO)
    • Chorus (TO DO)
    • Volume Shaping (DONE)
    • Noise Gate (DONE)
  • Define and implement channel mapping and channel volume syntax. (DONE)
  • Modify core startup procedure, so that if no instruction file is supplied the core waits in a paused state at the 0 position. (DONE)
  • Add further IPC support:-
    • Global chunk via IPC support (DONE)
    • Add input (DONE)
    • Add output (DONE)
    • Add effect (DONE)
    • Get core information (TO DO)
    • Find file type (TO DO)
    • Get file data length (DONE)
    • Check file is readable by a certain module (DONE)
    • Get list of effects the core has available (DONE)
    • Get list of I/O modules the core has available (DONE)
  • Implement advanced parameter validation support for I/O and effect modules. (TO DO)
  • Sort out endian conversion issues. (DONE)
  • Get a proper test suite together so we know that AMaMP actually works on various platforms, as well as compiles. (DONE)

Other things it would be good to do (with version numbers as a rough guide):-

  • Playback speed modification (0.5)
  • Look into streaming output for other platforms, including Mac OSX and BSD. (0.5)
  • Implement device selection for streaming input and output. (0.5)
  • Look into the time length limit problem. Solve it. This one could hurt. (0.5)
  • Support DirectX for playback - better latency than win32 API waveOut calls. (0.5)
  • Support ALSA for playback on Linux (0.5)
  • Implement some synthesis inputs (0.5/0.6)
  • Think about hitting release 1.0.

Things that it'd be good to do at some point:-

  • Consider embedding related stuff.
  • Work out the "effects don't really play ball on set_position" issue.
  • Write some more effects
    • Bandpass
    • Bandstop
    • Equalizer
    • Distortion
    • FFT
  • Add support for more file formats
    • RAW
    • AU
    • Speex

Of course, if you're a C hacker, you're very welcome to help develop it further; drop an email to for more info.