OpenAL Soft is an LGPL-licensed, cross-platform, software implementation of the OpenAL 3D audio API. It's forked from the open-sourced Windows version available originally from openal.org's SVN repository (now defunct).
OpenAL provides capabilities for playing audio in a virtual 3D environment. Distance attenuation, doppler shift, and directional sound emitters are among the features handled by the API. More advanced effects, including air absorption, occlusion, and environmental reverb, are available through the EFX extension. It also facilitates streaming audio, multi-channel buffers, and audio capture.
About This Project
This library is a compatible update/replacement to the deprecated OpenAL Sample Implementation (the SI). It is a fork of the old Windows software driver, modified to be cross-platform with multiple output backends: PulseAudio, ALSA, OSS, MMDevAPI, DirectSound, CoreAudio, Solaris, QSA, SoundIO, OpenSL, WinMM, PortAudio, "Null" Output, and a .wav writer are currently implemented.
OpenAL Soft has been further improved to support mono, stereo, 4-channel, 5.1, 6.1, 7.1, HRTF, and B-Format output. It does not support the Vorbis and MP3 extensions however, these are considered deprecated. It does, though, support many extensions like AL_EXT_FLOAT32 and AL_EXT_MCFORMATS for multi-channel and floating-point formats, as well as ALC_EXT_EFX for environmental audio effects, and others.
If you need support, feel free to send a message to the OpenAL mailing list:
There is also an issue tracker on the GitHub repository, if you wish to report a bug or make a feature request.
You can ask for help in IRC, #openal on irc.freenode.net
OpenAL Soft 1.18.2 is now available!
The changes from 1.18.1 include:
The changes from 1.18.0 include:
- Fixed resetting the FPU rounding mode after certain function calls on Windows.
- Fixed use of SSE intrinsics when building with Clang on Windows.
- Fixed a crash with the JACK backend when using JACK1.
- Fixed use of pthread_setnane_np on NetBSD.
- Fixed building on FreeBSD with an older freebsd-lib.
- OSS now links with libossaudio if found at build time (for NetBSD).
The changes from 1.17.2 include:
- Fixed an issue where resuming a source might not restart playing it.
- Fixed PulseAudio playback when the configured stream length is much less than the requested length.
- Fixed MMDevAPI capture with sample rates not matching the backing device.
- Fixed int32 output for the Wave Writer.
- Fixed enumeration of OSS devices that are missing device files.
- Added correct retrieval of the executable's path on FreeBSD.
- Added a config option to specify the dithering depth.
- Added a 5.1 decoder preset that excludes front-center output.
- Implemented the AL_EXT_STEREO_ANGLES and AL_EXT_SOURCE_RADIUS extensions.
- Implemented the AL_SOFT_gain_clamp_ex, AL_SOFT_source_resampler, AL_SOFT_source_spatialize, and ALC_SOFT_output_limiter extensions.
- Implemented 3D processing for some effects.
Currently implemented for Reverb, Compressor, Equalizer, and Ring Modulator.
- Implemented 2-channel UHJ output encoding.
This needs to be enabled with a config option to be used.
- Implemented dual-band processing for high-quality ambisonic decoding.
- Implemented distance-compensation for surround sound output.
- Implemented near-field emulation and compensation with ambisonic rendering.
Currently only applies when using the high-quality ambisonic decoder or ambisonic output, with appropriate config options.
- Implemented an output limiter to reduce the amount of distortion from clipping.
- Implemented dithering for 8-bit and 16-bit output.
- Implemented a config option to select a preferred HRTF.
- Implemented a run-time check for NEON extensions using /proc/cpuinfo.
- Implemented experimental capture support for the OpenSL backend.
- Fixed building on compilers with NEON support but don't default to having NEON enabled.
- Fixed support for JACK on Windows.
- Fixed starting a source while alcSuspendContext is in effect.
- Fixed detection of headsets as headphones, with MMDevAPI.
- Added support for AmbDec config files, for custom ambisonic decoder configurations.
Version 3 files only.
- Added backend-specific options to alsoft-config.
- Added first-, second-, and third-order ambisonic output formats.
Currently only works with backends that don't rely on channel labels, like JACK, ALSA, and OSS.
- Added a build option to embed the default HRTFs into the lib.
- Added AmbDec presets to enable high-quality ambisonic decoding.
- Added an AmbDec preset for 3D7.1 speaker setups.
- Added documentation regarding Ambisonics, 3D7.1, AmbDec config files, and the provided ambdec presets.
- Added the ability for MMDevAPI to open devices given a Device ID or GUID string.
- Added an option to the example apps to open a specific device.
- Increased the maximum auxiliary send limit to 16 (up from 4).
Requires requesting them with the ALC_MAX_AUXILIARY_SENDS context creation attribute.
- Increased the default auxiliary effect slot count to 64 (up from 4).
- Reduced the default period count to 3 (down from 4).
- Slightly improved automatic naming for enumerated HRTFs.
- Improved B-Format decoding with HRTF output.
- Improved internal property handling for better batching behavior.
- Improved performance of certain filter uses.
- Removed support for the AL_SOFT_buffer_samples and AL_SOFT_buffer_sub_data extensions.
Due to conflicts with AL_EXT_SOURCE_RADIUS.
Building OpenAL Soft needs CMake version 3.0 or newer (older versions may possibly work as well, but are untested). Autotools is not supported. It should build on most compilers.
The latest release is 1.18.2, and is available in source form. Please try it out and let me know how it works. :-)
Win32 and Win64 binaries are also provided
A more up-to-date Git repository is available at repo.or.cz and GitHub.
Note that you will need to install Git to download it.
Older releases can be found here, and older binaries can be found here.
To install OpenAL Soft, first extract it. It will automatically extract itself into the openal-soft-1.18.2/ directory. Using your favorite shell, go into the build/ directory, and run:
Assuming configuration went well, you can then build it, typically using GNU Make (KDevelop, MSVC, and others are possible depending on your system setup and CMake configuration).
Click here to go back.