This is a minor release fixing some build issues and API correctness:
- Properly handle mysofa initialization failures by throwing an exception.
- Handle exceptions when initializing HRTF objects, so
Configureon objects that use HRTF internally will correctly returnfalseinstead of throwing. - Fix PkgConfig file generated on Windows when using MSVC.
- Fix build with older GCC versions by changing deprecation annotations
- Define
_USE_MATH_DEFINESglobally, if needed. Note that this will change in a future version, so do not rely on this behavior. - Add an option (
BUILD_TESTING) and default to not build any tests. - Add libspatialaudio version defines to
SpatialaudioConfig.h, these contain the library version. For the API version use the defines inSpatialaudioVersion.h.
This release is a huge evolution for libspatialaudio from its origin as a Higher Order Ambisonics library.
This new release expands functionality to include object-based audio, additional loudspeaker layout support, binauralizations and many more new features that makes this library ready for rendering all type of spatial audio.
This is all unified in a Renderer class for Ambisonics, object-based audio, speaker layouts and binauralization. This makes it a much more comprehensive and easier to use library for immersive audio. The Renderer is designed to adapt easily to ADM and IAMF next‑generation audio workflows.
Object-Based Audio: Position and render individual sources dynamically in 3D space, compatible with ITU ADM and AOM’s IAMF immersive audio standards.
Unified Renderer Class: Seamlessly process HOA, object signals, speaker feeds, and binaural output under one API.
Cross-Platform Builds: Modernized build system with Meson and CMake, ensuring reproducibility across different operating systems.
Robust Documentation: Expanded theory, DSP background, and code examples for both newcomers and advanced developers.
Real-time Improvements: The code is now more efficient and real-time safe, making it suitable for AR/AR and gaming applications.
Higher Order Ambisonics (HOA): Efficiency and real-time improvements, as well as now supporting decoding to ITU standard loudspeaker layouts (5.1, 7.1.4, etc.)
- This is an API and ABI breaking release.
- Move Classes to the
spaudionamespace. - Simplified class names:
CAdmDirectSpeakersGainCalctoAdmDirectSpeakersGainCalcCAdmRenderertoRendererCAllocentricExtenttoAllocentricExtentCAllocentricPannerGainCalctoAllocentricPannerGainCalcCAmbisonicAllRADtoAmbisonicAllRADCAmbisonicBasetoAmbisonicBaseCAmbisonicBinauralizertoAmbisonicBinauralizerCAmbisonicDecodertoAmbisonicDecoderCAmbisonicEncodertoAmbisonicEncoderCAmbisonicEncoderDisttoAmbisonicEncoderDistCAmbisonicMicrophonetoAmbisonicMicrophoneCAmbisonicOptimFilterstoAmbisonicOptimFiltersCAmbisonicPolarExtentHandlertoAmbisonicPolarExtentHandlerCAmbisonicProcessortoAmbisonicProcessorCAmbisonicRotatortoAmbisonicRotatorCAmbisonicShelfFilterstoAmbisonicShelfFiltersCAmbisonicSourcetoAmbisonicSourceCAmbisonicSpeakertoAmbisonicSpeakerCAmbisonicSpreadPannertoAmbisonicSpreadPannerCAmbisonicZoomertoAmbisonicZoomerCBFormattoBFormatCDecorrelatortoDecorrelatorCGainCalculatortoGainCalculatorCGainInterptoGainInterpCIIRFiltertoIIRFilterCLinkwitzRileyIIRtoLinkwitzRileyIIRCPointSourcePannerGainCalctoPointSourcePannerGainCalcCPolarExtentHandlertoPolarExtentHandlerCPolarExtentHandlerBasetoPolarExtentHandlerBaseCScreenEdgeLocktoScreenEdgeLockHandlerCScreenScaleHandlertoScreenScaleHandlerCSpreadPannertoSpreadPannerCSpreadPannerBasetoSpreadPannerBase
- Changed LFE handling for the Renderer (formerly AdmRenderer) when rendering
to binaural. Before, LFE channels would be discarded when rendering to
binaural, following the ADM specification. Now they are included and
a new argument
useLfeBinauralwas added toConfigure, to change this behaviour if necessary. OutputLayoutmoved to theLoutspeakerLayout.hheader.- Removed/replaced some OutputLayout entries:
- Replaced
OutputLayout::ITU_0_2_0, useOutputLayout::Stereo - Replaced
OutputLayout::ITU_0_5_0, useOutputLayout::FivePointOne - Replaced
OutputLayout::ITU_2_5_0, useOutputLayout::FivePointOnePointTwo - Replaced
OutputLayout::ITU_4_5_0, useOutputLayout::FivePointOnePointFour - Replaced
OutputLayout::ITU_4_5_1, useOutputLayout::FivePointOnePointFourPlusLow - Replaced
OutputLayout::ITU_3_7_0, useOutputLayout::SevenPointOnePointThree - Replaced
OutputLayout::ITU_3_7_0, useOutputLayout::SevenPointOnePointThree - Replaced
OutputLayout::ITU_4_9_0, useOutputLayout::ThirteenPointOne - Replaced
OutputLayout::ITU_9_10_3, useOutputLayout::TwentyTwoPointTwo - Replaced
OutputLayout::ITU_0_7_0, useOutputLayout::SevenPointOne - Replaced
OutputLayout::ITU_4_7_0, useOutputLayout::SevenPointOnePointFour - Replaced
OutputLayout::_3p1p2, useOutputLayout::ThreePointOnePointTwo - Replaced
OutputLayout::_2_7_0, useOutputLayout::SevenPointOnePointTwo - Removed
OutputLayout::FivePointZero - Removed
OutputLayout::SevenPointZero
- Replaced
- CMake: Removed the
BUILD_STATIC_LIBSoption. Use theBUILD_SHARED_LIBSoption to control if share or static libraries should be built. If both are needed, build twice explicitly. - The
config.hheader file was removed in favor ofSpatialaudioConfig.hwith properly prefixed defines to prevent name clashes.