3 Updated library codebase to C++17.
5 Implemented the ALC_SOFT_system_events extension.
7 Implemented the AL_EXT_debug extension.
9 Implemented the AL_EXT_direct_context extension.
11 Implemented speaker configuration and headphones detection on CoreAudio.
13 Fixed a potential crash with some extension functions on 32-bit Windows.
15 Fixed a crash that can occur when stopping playback with the Oboe backend.
17 Fixed calculating the reverb room rolloff.
19 Fixed EAX occlusion, obstruction, and exclusion low-pass filter strength.
21 Fixed EAX distance factor calculations.
23 Fixed querying AL_EFFECTSLOT_EFFECT on auxiliary effect slots.
25 Fixed compilation on some macOS systems that lack libdispatch.
27 Fixed compilation as a subproject with MinGW.
29 Changed the context error state to be thread-local. This is technically out
30 of spec, but necessary to avoid race conditions with multi-threaded use.
32 Split the cubic resampler into 4-point spline and gaussian variants. The
33 latter prioritizing the suppression of aliasing distortion and harmonics,
34 the former not reducing high frequencies as much.
36 Improved timing precision of starting delayed sources.
38 Improved ring modulator quality.
40 Improved performance of convolution reverb.
42 Improved WASAPI device enumeration performance.
46 Added 'noexcept' to functions and function types when compiled as C++. As a
47 C API, OpenAL can't be expected to throw C++ exceptions, nor can it handle
48 them if they leave a callback.
50 Added an experimental config option for using WASAPI spatial audio output.
52 Added enumeration support to the PortAudio backend.
54 Added compatibility options to override the AL_VENDOR, AL_VERSION, and
57 Added an example to play LAF files.
59 Disabled real-time mixing by default for PipeWire playback.
61 Disabled the SndIO backend by default on non-BSD targets.
65 Implemented the AL_SOFT_UHJ_ex extension.
67 Implemented the AL_SOFT_buffer_length_query extension.
69 Implemented the AL_SOFT_source_start_delay extension.
71 Implemented the AL_EXT_STATIC_BUFFER extension.
73 Fixed compiling with certain older versions of GCC.
75 Fixed compiling as a submodule.
77 Fixed compiling with newer versions of Oboe.
79 Improved EAX effect version switching.
81 Improved the quality of the reverb modulator.
83 Improved performance of the cubic resampler.
85 Added a compatibility option to restore AL_SOFT_buffer_sub_data. The option
86 disables AL_EXT_SOURCE_RADIUS due to incompatibility.
88 Reduced CPU usage when EAX is initialized and FXSlot0 or FXSlot1 are not
91 Reduced memory usage for ADPCM buffer formats. They're no longer converted
92 to 16-bit samples on load.
96 Fixed CoreAudio capture support.
98 Fixed handling per-version EAX properties.
100 Fixed interpolating changes to the Super Stereo width source property.
102 Fixed detection of the update and buffer size from PipeWire.
104 Fixed resuming playback devices with OpenSL.
106 Fixed support for certain OpenAL implementations with the router.
108 Improved reverb environment transitions.
110 Improved performance of convolution reverb.
112 Improved quality and performance of the pitch shifter effect slightly.
114 Improved sub-sample precision for resampled sources.
116 Improved blending spatialized multi-channel sources that use the source
119 Improved mixing 2D ambisonic sources for higher-order 3D ambisonic mixing.
121 Improved quadraphonic and 7.1 surround sound output slightly.
123 Added config options for UHJ encoding/decoding quality. Including Super
126 Added a config option for specifying the speaker distance.
128 Added a compatibility config option for specifying the NFC distance
131 Added a config option for mixing on PipeWire's non-real-time thread.
133 Added support for virtual source nodes with PipeWire capture.
135 Added the ability for the WASAPI backend to use different playback rates.
137 Added support for SOFA files that define per-response delays in makemhr.
139 Changed the default fallback playback sample rate to 48khz. This doesn't
140 affect most backends, which can detect a default rate from the system.
142 Changed the default resampler to cubic.
144 Changed the default HRTF size from 32 to 64 points.
148 Fixed PipeWire version check.
150 Fixed building with PipeWire versions before 0.3.33.
154 Fixed CoreAudio capture.
156 Fixed air absorption strength.
158 Fixed handling 5.1 devices on Windows that use Rear channels instead of
161 Fixed some compilation issues on MinGW.
163 Fixed ALSA not being used on some systems without PipeWire and PulseAudio.
165 Fixed OpenSL capturing noise.
167 Fixed Oboe capture failing with some buffer sizes.
169 Added checks for the runtime PipeWire version. The same or newer version
170 than is used for building will be needed at runtime for the backend to
173 Separated 3D7.1 into its own speaker configuration.
177 Implemented the ALC_SOFT_reopen_device extension. This allows for moving
178 devices to different outputs without losing object state.
180 Implemented the ALC_SOFT_output_mode extension.
182 Implemented the AL_SOFT_callback_buffer extension.
184 Implemented the AL_SOFT_UHJ extension. This supports native UHJ buffer
185 formats and Super Stereo processing.
187 Implemented the legacy EAX extensions. Enabled by default only on Windows.
189 Improved sound positioning stability when a source is near the listener.
191 Improved the default 5.1 output decoder.
193 Improved the high frequency response for the HRTF second-order ambisonic
196 Improved SoundIO capture behavior.
198 Fixed UHJ output on NEON-capable CPUs.
200 Fixed redundant effect updates when setting an effect property to the
203 Fixed WASAPI capture using really low sample rates, and sources with very
204 high pitch shifts when using a bsinc resampler.
206 Added a PipeWire backend.
208 Added enumeration for the JACK and CoreAudio backends.
210 Added optional support for RTKit to get real-time priority. Only used as a
211 backup when pthread_setschedparam fails.
213 Added an option for JACK playback to render directly in the real-time
214 processing callback. For lower playback latency, on by default.
216 Added an option for custom JACK devices.
218 Added utilities to encode and decode UHJ audio files. Files are decoded to
219 the .amb format, and are encoded from libsndfile-compatible formats.
221 Added an in-progress extension to hold sources in a playing state when a
222 device disconnects. Allows devices to be reset or reopened and have sources
223 resume from where they left off.
225 Lowered the priority of the JACK backend. To avoid it getting picked when
226 PipeWire is providing JACK compatibility, since the JACK backend is less
227 robust with auto-configuration.
231 Improved alext.h's detection of standard types.
233 Improved slightly the local source position when the listener and source
236 Improved click/pop prevention for sounds that stop prematurely.
238 Fixed compilation for Windows ARM targets with MSVC.
240 Fixed ARM NEON detection on Windows.
242 Fixed CoreAudio capture when the requested sample rate doesn't match the
243 system configuration.
245 Fixed OpenSL capture desyncing from the internal capture buffer.
247 Fixed sources missing a batch update when applied after quickly restarting
250 Fixed missing source stop events when stopping a paused source.
252 Added capture support to the experimental Oboe backend.
256 Updated library codebase to C++14.
258 Implemented the AL_SOFT_effect_target extension.
260 Implemented the AL_SOFT_events extension.
262 Implemented the ALC_SOFT_loopback_bformat extension.
264 Improved memory use for mixing voices.
266 Improved detection of NEON capabilities.
268 Improved handling of PulseAudio devices that lack manual start control.
270 Improved mixing performance with PulseAudio.
272 Improved high-frequency scaling quality for the HRTF B-Format decoder.
274 Improved makemhr's HRIR delay calculation.
276 Improved WASAPI capture of mono formats with multichannel input.
278 Reimplemented the modulation stage for reverb.
280 Enabled real-time mixing priority by default, for backends that use the
281 setting. It can still be disabled in the config file.
283 Enabled dual-band processing for the built-in quad and 7.1 output decoders.
285 Fixed a potential crash when deleting an effect slot immediately after the
286 last source using it stops.
288 Fixed building with the static runtime on MSVC.
290 Fixed using source stereo angles outside of -pi...+pi.
292 Fixed the buffer processed event count for sources that start with empty
295 Fixed trying to open an unopenable WASAPI device causing all devices to
298 Fixed stale devices when re-enumerating WASAPI devices.
300 Fixed using unicode paths with the log file on Windows.
302 Fixed DirectSound capture reporting bad sample counts or erroring when
305 Added an in-progress extension for a callback-driven buffer type.
307 Added an in-progress extension for higher-order B-Format buffers.
309 Added an in-progress extension for convolution reverb.
311 Added an experimental Oboe backend for Android playback. This requires the
312 Oboe sources at build time, so that it's built as a static library included
315 Added an option for auto-connecting JACK ports.
317 Added greater-than-stereo support to the SoundIO backend.
319 Modified the mixer to be fully asynchronous with the external API, and
320 should now be real-time safe. Although alcRenderSamplesSOFT is not due to
321 locking to check the device handle validity.
323 Modified the UHJ encoder to use an all-pass FIR filter that's less harmful
324 to non-filtered signal phase.
326 Converted examples from SDL_sound to libsndfile. To avoid issues when
327 combining SDL2 and SDL_sound.
329 Worked around a 32-bit GCC/MinGW bug with TLS destructors. See:
330 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83562
332 Reduced the maximum number of source sends from 16 to 6.
334 Removed the QSA backend. It's been broken for who knows how long.
336 Got rid of the compile-time native-tools targets, using cmake and global
337 initialization instead. This should make cross-compiling less troublesome.
341 Implemented the AL_SOFT_direct_channels_remix extension. This extends
342 AL_DIRECT_CHANNELS_SOFT to optionally remix input channels that don't have
343 a matching output channel.
345 Implemented the AL_SOFT_bformat_ex extension. This extends B-Format buffer
346 support for N3D or SN3D scaling, or ACN channel ordering.
348 Fixed a potential voice leak when a source is started and stopped or
349 restarted in quick succession.
351 Fixed a potential device reset failure with JACK.
353 Improved handling of unsupported channel configurations with WASAPI. Such
354 setups will now try to output at least a stereo mix.
356 Improved clarity a bit for the HRTF second-order ambisonic decoder.
358 Improved detection of compatible layouts for SOFA files in makemhr and
361 Added the ability to resample HRTFs on load. MHR files no longer need to
362 match the device sample rate to be usable.
364 Added an option to limit the HRTF's filter length.
368 Converted the library codebase to C++11. A lot of hacks and custom
369 structures have been replaced with standard or cleaner implementations.
371 Partially implemented the Vocal Morpher effect.
373 Fixed the bsinc SSE resamplers on non-GCC compilers.
375 Fixed OpenSL capture.
377 Fixed support for extended capture formats with OpenSL.
379 Fixed handling of WASAPI not reporting a default device.
381 Fixed performance problems relating to semaphores on macOS.
383 Modified the bsinc12 resampler's transition band to better avoid aliasing
386 Modified alcResetDeviceSOFT to attempt recovery of disconnected devices.
388 Modified the virtual speaker layout for HRTF B-Format decoding.
390 Modified the PulseAudio backend to use a custom processing loop.
392 Renamed the makehrtf utility to makemhr.
394 Improved the efficiency of the bsinc resamplers when up-sampling.
396 Improved the quality of the bsinc resamplers slightly.
398 Improved the efficiency of the HRTF filters.
400 Improved the HRTF B-Format decoder coefficient generation.
402 Improved reverb feedback fading to be more consistent with pan fading.
404 Improved handling of sources that end prematurely, avoiding loud clicks.
406 Improved the performance of some reverb processing loops.
408 Added fast_bsinc12 and 24 resamplers that improve efficiency at the cost of
409 some quality. Notably, down-sampling has less smooth pitch ramping.
411 Added support for SOFA input files with makemhr.
413 Added a build option to use pre-built native tools. For cross-compiling,
414 use with caution and ensure the native tools' binaries are kept up-to-date.
416 Added an adjust-latency config option for the PulseAudio backend.
418 Added basic support for multi-field HRTFs.
420 Added an option for mixing first- or second-order B-Format with HRTF
421 output. This can improve HRTF performance given a number of sources.
423 Added an RC file for proper DLL version information.
425 Disabled some old KDE workarounds by default. Specifically, PulseAudio
426 streams can now be moved (KDE may try to move them after opening).
430 Implemented capture support for the SoundIO backend.
432 Fixed source buffer queues potentially not playing properly when a queue
435 Fixed possible unexpected failures when generating auxiliary effect slots.
437 Fixed a crash with certain reverb or device settings.
439 Fixed OpenSL capture.
441 Improved output limiter response, better ensuring the sample amplitude is
446 Implemented the ALC_SOFT_device_clock extension.
448 Implemented the Pitch Shifter, Frequency Shifter, and Autowah effects.
450 Fixed compiling on FreeBSD systems that use freebsd-lib 9.1.
452 Fixed compiling on NetBSD.
454 Fixed the reverb effect's density scale and panning parameters.
456 Fixed use of the WASAPI backend with certain games, which caused odd COM
457 initialization errors.
459 Increased the number of virtual channels for decoding Ambisonics to HRTF
462 Changed 32-bit x86 builds to use SSE2 math by default for performance.
463 Build-time options are available to use just SSE1 or x87 instead.
465 Replaced the 4-point Sinc resampler with a more efficient cubic resampler.
467 Renamed the MMDevAPI backend to WASAPI.
469 Added support for 24-bit, dual-ear HRTF data sets. The built-in data set
470 has been updated to 24-bit.
472 Added a 24- to 48-point band-limited Sinc resampler.
474 Added an SDL2 playback backend. Disabled by default to avoid a dependency
477 Improved the performance and quality of the Chorus and Flanger effects.
479 Improved the efficiency of the band-limited Sinc resampler.
481 Improved the Sinc resampler's transition band to avoid over-attenuating
484 Improved the performance of some filter operations.
486 Improved the efficiency of object ID lookups.
488 Improved the efficienty of internal voice/source synchronization.
490 Improved AL call error logging with contextualized messages.
492 Removed the reverb effect's modulation stage. Due to the lack of reference
493 for its intended behavior and strength.
497 Fixed resetting the FPU rounding mode after certain function calls on
500 Fixed use of SSE intrinsics when building with Clang on Windows.
502 Fixed a crash with the JACK backend when using JACK1.
504 Fixed use of pthread_setnane_np on NetBSD.
506 Fixed building on FreeBSD with an older freebsd-lib.
508 OSS now links with libossaudio if found at build time (for NetBSD).
512 Fixed an issue where resuming a source might not restart playing it.
514 Fixed PulseAudio playback when the configured stream length is much less
515 than the requested length.
517 Fixed MMDevAPI capture with sample rates not matching the backing device.
519 Fixed int32 output for the Wave Writer.
521 Fixed enumeration of OSS devices that are missing device files.
523 Added correct retrieval of the executable's path on FreeBSD.
525 Added a config option to specify the dithering depth.
527 Added a 5.1 decoder preset that excludes front-center output.
531 Implemented the AL_EXT_STEREO_ANGLES and AL_EXT_SOURCE_RADIUS extensions.
533 Implemented the AL_SOFT_gain_clamp_ex, AL_SOFT_source_resampler,
534 AL_SOFT_source_spatialize, and ALC_SOFT_output_limiter extensions.
536 Implemented 3D processing for some effects. Currently implemented for
537 Reverb, Compressor, Equalizer, and Ring Modulator.
539 Implemented 2-channel UHJ output encoding. This needs to be enabled with a
540 config option to be used.
542 Implemented dual-band processing for high-quality ambisonic decoding.
544 Implemented distance-compensation for surround sound output.
546 Implemented near-field emulation and compensation with ambisonic rendering.
547 Currently only applies when using the high-quality ambisonic decoder or
548 ambisonic output, with appropriate config options.
550 Implemented an output limiter to reduce the amount of distortion from
553 Implemented dithering for 8-bit and 16-bit output.
555 Implemented a config option to select a preferred HRTF.
557 Implemented a run-time check for NEON extensions using /proc/cpuinfo.
559 Implemented experimental capture support for the OpenSL backend.
561 Fixed building on compilers with NEON support but don't default to having
564 Fixed support for JACK on Windows.
566 Fixed starting a source while alcSuspendContext is in effect.
568 Fixed detection of headsets as headphones, with MMDevAPI.
570 Added support for AmbDec config files, for custom ambisonic decoder
571 configurations. Version 3 files only.
573 Added backend-specific options to alsoft-config.
575 Added first-, second-, and third-order ambisonic output formats. Currently
576 only works with backends that don't rely on channel labels, like JACK,
579 Added a build option to embed the default HRTFs into the lib.
581 Added AmbDec presets to enable high-quality ambisonic decoding.
583 Added an AmbDec preset for 3D7.1 speaker setups.
585 Added documentation regarding Ambisonics, 3D7.1, AmbDec config files, and
586 the provided ambdec presets.
588 Added the ability for MMDevAPI to open devices given a Device ID or GUID
591 Added an option to the example apps to open a specific device.
593 Increased the maximum auxiliary send limit to 16 (up from 4). Requires
594 requesting them with the ALC_MAX_AUXILIARY_SENDS context creation
597 Increased the default auxiliary effect slot count to 64 (up from 4).
599 Reduced the default period count to 3 (down from 4).
601 Slightly improved automatic naming for enumerated HRTFs.
603 Improved B-Format decoding with HRTF output.
605 Improved internal property handling for better batching behavior.
607 Improved performance of certain filter uses.
609 Removed support for the AL_SOFT_buffer_samples and AL_SOFT_buffer_sub_data
610 extensions. Due to conflicts with AL_EXT_SOURCE_RADIUS.
614 Implemented device enumeration for OSSv4.
616 Fixed building on OSX.
618 Fixed building on non-Windows systems without POSIX-2008.
620 Fixed Dedicated Dialog and Dedicated LFE effect output.
622 Added a build option to override the share install dir.
624 Added a build option to static-link libgcc for MinGW.
628 Fixed building with JACK and without PulseAudio.
630 Fixed building on FreeBSD.
632 Fixed the ALSA backend's allow-resampler option.
634 Fixed handling of inexact ALSA period counts.
636 Altered device naming scheme on Windows backends to better match other
639 Updated the CoreAudio backend to use the AudioComponent API. This clears up
640 deprecation warnings for OSX 10.11, although requires OSX 10.6 or newer.
644 Implemented a JACK playback backend.
646 Implemented the AL_EXT_BFORMAT and AL_EXT_MULAW_BFORMAT extensions.
648 Implemented the ALC_SOFT_HRTF extension.
650 Implemented C, SSE3, and SSE4.1 based 4- and 8-point Sinc resamplers.
652 Implemented a C and SSE based band-limited Sinc resampler. This does 12- to
653 24-point Sinc resampling, and performs anti-aliasing.
655 Implemented B-Format output support for the wave file writer. This creates
656 FuMa-style first-order Ambisonics wave files (AMB format).
658 Implemented a stereo-mode config option for treating stereo modes as either
659 speakers or headphones.
661 Implemented per-device configuration options.
663 Fixed handling of PulseAudio and MMDevAPI devices that have identical
666 Fixed a potential lockup when stopping playback of suspended PulseAudio devices.
668 Fixed logging of Unicode characters on Windows.
670 Fixed 5.1 surround sound channels. By default it will now use the side
671 channels for the surround output. A configuration using rear channels is
674 Fixed the QSA backend potentially altering the capture format.
676 Fixed detecting MMDevAPI's default device.
678 Fixed returning the default capture device name.
680 Fixed mixing property calculations when deferring context updates.
682 Altered the behavior of alcSuspendContext and alcProcessContext to better
683 match certain Windows drivers.
685 Altered the panning algorithm, utilizing Ambisonics for better side and
686 back positioning cues with surround sound output.
688 Improved support for certain older Windows apps.
690 Improved the alffplay example to support surround sound streams.
692 Improved support for building as a sub-project.
694 Added an HRTF playback example.
696 Added a tone generator output test.
698 Added a toolchain to help with cross-compiling to Android.
702 Implemented EFX Chorus, Flanger, Distortion, Equalizer, and Compressor
705 Implemented high-pass and band-pass EFX filters.
707 Implemented the high-pass filter for the EAXReverb effect.
709 Implemented SSE2 and SSE4.1 linear resamplers.
711 Implemented Neon-enhanced non-HRTF mixers.
713 Implemented a QSA backend, for QNX.
715 Implemented the ALC_SOFT_pause_device, AL_SOFT_deferred_updates,
716 AL_SOFT_block_alignment, AL_SOFT_MSADPCM, and AL_SOFT_source_length
719 Fixed resetting mmdevapi backend devices.
721 Fixed clamping when converting 32-bit float samples to integer.
723 Fixed modulation range in the Modulator effect.
725 Several fixes for the OpenSL playback backend.
727 Fixed device specifier names that have Unicode characters on Windows.
729 Added support for filenames and paths with Unicode (UTF-8) characters on
732 Added support for alsoft.conf config files found in XDG Base Directory
733 Specification locations (XDG_CONFIG_DIRS and XDG_CONFIG_HOME, or their
734 defaults) on non-Windows systems.
736 Added a GUI configuration utility (requires Qt 4.8).
738 Added support for environment variable expansion in config options (not
739 keys or section names).
741 Added an example that uses SDL2 and ffmpeg.
743 Modified examples to use SDL_sound.
745 Modified CMake config option names for better sorting.
747 HRTF data sets specified in the hrtf_tables config option may now be
748 relative or absolute filenames.
750 Made the default HRTF data set an external file, and added a data set for
751 48khz playback in addition to 44.1khz.
753 Added support for C11 atomic methods.
755 Improved support for some non-GNU build systems.
759 Fixed a regression with retrieving the source's AL_GAIN property.
763 Fixed device enumeration with the OSS backend.
765 Reorganized internal mixing logic, so unneeded steps can potentially be
766 skipped for better performance.
768 Removed the lookup table for calculating the mixing pans. The panning is
769 now calculated directly for better precision.
771 Improved the panning of stereo source channels when using stereo output.
773 Improved source filter quality on send paths.
775 Added a config option to allow PulseAudio to move streams between devices.
777 The PulseAudio backend will now attempt to spawn a server by default.
779 Added a workaround for a DirectSound bug relating to float32 output.
781 Added SSE-based mixers, for HRTF and non-HRTF mixing.
783 Added support for the new AL_SOFT_source_latency extension.
785 Improved ALSA capture by avoiding an extra buffer when using sizes
786 supported by the underlying device.
788 Improved the makehrtf utility to support new options and input formats.
790 Modified the CFLAGS declared in the pkg-config file so the "AL/" portion of
791 the header includes can optionally be omitted.
793 Added a couple example code programs to show how to apply reverb, and
796 The configuration sample is now installed into the share/openal/ directory
797 instead of /etc/openal.
799 The configuration sample now gets installed by default.