AeonWave started out as project Anaconda; a fast rendering new OpenAL implementation. After realizing this would not be good enough for spatialised 3D audio demands the library has been rewritten;
For project Barracuda the OpenAL code has been separated as thin layer on top of a new library which was named AeonWave Audio eXtensions library (AeonWave or AAX for short).
For the next step the internals of AeonWave were completely rewritten to be able to support filters, effects and sub-mixing capabilities resulting in AeonWave version 2.0 or project Cheetah. While working on the transformation the Application Programming Interface has also been reduced and cleaned up considerably and function defines have been added for easy porting to the new API.
In addition to this the function inputs have been hardened; improper input values should not effect the integrity of the software whenever possible. For instance when calling a functions floating point NaN values will be ignored and the calling software will be notified by returning a NULL-pointer or AAX_FALSE.
The library has been using matrices for positioning and orientation from the start which makes it fast and accurate without the possibility of glitches or temporary misalignment. Support functions are included to simplify matrix manipulation but it is also possible to provide a user defined matrix.
Several hardware backends are supported by the library and built-in support for improved Head Related Transfer Functions (HRTF) and virtualisation (multiple speaker output) is available.
For project Devil Ray, released late 2017, AeonWave version 3.0 switched to dual licensing with GPL3 and a commercial license. Another big change is switching to 64-bit double precision matrices internally. Further changes are supplemental C++ support classes, tighter integration of audio file and stream support code and the option to assign filters and effects to the sensor, emitter and audio-frames by using XML-encoded AAXS buffer objects which may be located at a remote host. This version also removed all leftovers from the version 1.0 API, fixed the return values of a few effect and filter functions to be more consistent with the rest of the API.
The AeonWave Audio eXtensions library defines a number of basic objects:
|Driver||Stereo||Select which hardware interface to use for audio input or output.|
|Mixer||Stereo||Controls the hardware audio format and frequency and supports global filters and effects.
A mixer is in essence pure stereo (multi-channel) and applied Filters and Effects affects the sound output.
|Scenery||3D||Influences the behavior of sounds surrounding the user.
Applied Filters and Effects affects all sound sources in the scene.
|Virtual Sensor||3D||Represents the position, orientation and velocity of the user.|
|Real Sensor||Stereo||Microphone, line-in or Stream input (file/http): automatically streams real-time audio from hardware.|
|Emitter||4D/Stereo||Moves a sound source around with a user defined position, orientation and velocity.|
|Buffer||Stereo||Contains the audio data and configuration information.
Since buffers are static objects it is not a problem to share a single buffer amongst multiple emitters.
|Audio-Frame||4D/Stereo||Introduced in version 2.0: A container for a collection of emitters, sensors and/or other audio-frames. Audio-frames can move around with a user defined position, orientation and velocity. As a result all registered emitters, sensors and audio-frames also change position and orientation with just one update call.
Audio-frames also act as a stereo sub-mixer. Applied Filters and Effects affects all registered objects.
|Filters||3D/Stereo||Removes audio information from the sound source.|
|Effects||3D/Stereo||Alters the audio information of a sound source, often in a non-reversible manner.|