Skip to content
Audio Definition Model (ITU-R BS.2076) handling library
C++ HTML CMake
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
cmake Initial commit Jul 23, 2018
config rename IRT_ADM_VERSION... to ADM_VERSION... Dec 5, 2018
docs added addCommonDefinitionsTo(std::shared_ptr<adm::Document>) function Jul 9, 2019
examples rename library target from libadm to adm Dec 5, 2018
include/adm change name of the XmlParser constructor document variable Jul 9, 2019
resources Initial commit Jul 23, 2018
src improve performance of parseHexValue Aug 14, 2019
submodules enable benchmarking feature in catch2 Aug 14, 2019
tests add benchmark of hex parsing Aug 14, 2019
tools Initial commit Jul 23, 2018
.appveyor.yml show output of failed unit tests when building with travis or appveyor Oct 22, 2018
.clang_complete Initial commit Jul 23, 2018
.gitignore added docs/venv to .gitignore (for local doc builds) Jan 18, 2019
.readthedocs.yml Initial commit Jul 23, 2018
.travis.yml reduce number of builds by only building on the latest stable version Jun 26, 2019 added performance improvement to changelog Aug 14, 2019
CMakeLists.txt unify option handling Dec 18, 2018
LICENSE Initial commit Jul 23, 2018 add instructions on how to use the library in CMake added to Jan 18, 2019
codecov.yml add codecov support Dec 7, 2018

libadm - ITU-R BS.2076 Library

Build Status Build status Documentation Status codecov


The libadm library is a modern C++11 library to parse, modify, create and write ITU-R BS.2076-1 conform XML document. It works well with the header-only library libbw64 to write ADM related applications with minimal dependencies.


  • minimal dependencies
  • expressive syntax
  • easy access to referenced ADM elements
  • common definitions support


  • compiler with C++11 support
  • Boost header libraries (version 1.57 or later)
    • Boost.Optional
    • Boost.Variant
    • Boost.Range
    • Boost.Iterator
    • Boost.Functional
    • Boost.Format
  • CMake build system (version 3.5 or later)



On macOS you can use homebrew to install the library. You just have to add the IRT’s NGA homebrew tap and can then use the usual install command.

brew tap irt-open-source/homebrew-nga
brew install libadm

Manual installation

To manually install the library you have to clone the git repository and then use the CMake build system to build and install it.

git clone
cd libadm
mkdir build && cd build
cmake ..
make install


As the library uses CMake as a build system it is really easy to set up and use if your project does too. Assuming you have installed the library, the following code shows a complete CMake example to compile a program which uses the libadm.

cmake_minimum_required(VERSION 3.5)
project(libadm_example VERSION 1.0.0 LANGUAGES CXX)

find_package(Boost 1.57 REQUIRED)
find_package(adm REQUIRED)

add_executable(examples example.cpp)
target_link_libraries(example PRIVATE adm)

If you prefer not to install the library on your system you can also use the library as a subproject. You can just add the library as a CMake subproject. Just add the folder containing the repository to your project and you can use the adm target.

cmake_minimum_required(VERSION 3.5)
project(libadm_example VERSION 1.0.0 LANGUAGES CXX)


add_executable(example example.cpp)
target_link_libraries(example PRIVATE adm)


If libadm is used as a CMake subproject the default values of the options


are automatically set to FALSE.


The following minimal example shows how easy a valid ADM file can be created from scratch using the libadm library. For more examples have a look at the examples folder in the repository.

#include <iostream>
#include <sstream>
#include <adm/adm.hpp>
#include <adm/utilities/object_creation.hpp>
#include <adm/write.hpp>

int main() {
  using namespace adm;

  // create ADM elements
  auto admProgramme = AudioProgramme::create(AudioProgrammeName("Alice and Bob talking"));
  auto speechContent = AudioContent::create(AudioContentName("Speech"));
  auto aliceHolder = createSimpleObject("Alice");
  auto bobHolder = createSimpleObject("Bob");

  // add references

  auto admDocument = Document::create();

  // write XML data to stdout
  writeXml(std::cout, admDocument);
  return 0;

Current Limitations

  1. some ADM sub-elements are missing
  2. no SADM support (ITU-R BS.[SERIAL])


This project has received funding from the European Union’s Horizon 2020 research and innovation programme under grant agreement No 687645.


Copyright 2018 Institut fuer Rundfunktechnik GmbH (IRT)

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
See the License for the specific language governing permissions and
limitations under the License.
You can’t perform that action at this time.