Last year we released two open-source C++ libraries: libbw64 and libadm. Now that the ITU ADM (Audio Definition Model) Renderer (Recommendation ITU-R BS.2127-0) is published, we are adding another library to the list – the libear. The library is developed in cooperation with BBC R&D and published using the permissive Apache 2.0 license under the EBU umbrella.
The ITU ADM Renderer plays a vital role in the open object-based audio workflow we envision:
– Monitoring NGA (Next Generation Audio) productions throughout the whole workflow.
– Pre-rendering NGA productions for legacy emission.
– Pre-rendering parts of an NGA production if a reduction of complexity is necessary.
– Using as the reference in NGA related listening tests.
Supporting all those applications, we want to make it as easy as possible to integrate the renderer into different applications. As especially for realtime applications a Python implementation is less than ideal, we implemented the core of the ITU ADM Renderer in C++. But what does the core of the renderer actually mean? And where exactly do we expect the library to be used?
The most complex part of the renderer implementation is the calculation of the gain values, which have to be applied to the input audio samples of each channel for channel-based audio, each audio object for object-based audio or each component for scene-based audio. Based on a set of metadata the calculation of those can be done using the libear with a single function call. Apart from the gain calculation, the library also provides basic digital signal processing functionality. This makes it easy to get started with the library, but depending on the targeted platform or application it can make sense to use a custom implementation, which is also possible. Another part of the reference implementation is the ability to process the ADM metadata and provide the right part of the metadata at the right time to the gain calculator. This is not part of this library, but can quite easily be implemented using the libadm.
The current release is a first preview version of the renderer library. It already supports channel-based, scene-based and object-based audio, but lacks support for some special parameters like screenEdgeLock or zoneExclusion. Have a look at the documentation for a complete list.
We think the library will be useful in a lot of different applications. For example it could be wrapped into an audio plugin for Digital Audio Workstations (DAW) or even more tightly integrated into a DAW. It could be integrated into a mixing desk monitoring section. With an ADM interface it could be efficiently integrated into a pre-render solution for a content management system. It could be integrated into a stand alone monitoring system, which receives Serial ADM and renders in real time for different loudspeaker setups. And many more applications.