{"id":13437215,"url":"https://github.com/ebu/libbw64","last_synced_at":"2025-10-04T23:56:03.696Z","repository":{"id":41834334,"uuid":"142037613","full_name":"ebu/libbw64","owner":"ebu","description":"Broadcast Wave 64 (ITU-R BS.2088) library","archived":false,"fork":false,"pushed_at":"2024-04-13T22:32:22.000Z","size":278,"stargazers_count":33,"open_issues_count":5,"forks_count":16,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-05-07T17:48:13.575Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://libbw64.readthedocs.io","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ebu.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-07-23T16:02:35.000Z","updated_at":"2025-03-02T16:28:32.000Z","dependencies_parsed_at":"2023-11-21T17:30:55.189Z","dependency_job_id":"851325b6-436e-4606-bb4b-d11b91d83a1e","html_url":"https://github.com/ebu/libbw64","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/ebu/libbw64","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ebu%2Flibbw64","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ebu%2Flibbw64/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ebu%2Flibbw64/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ebu%2Flibbw64/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ebu","download_url":"https://codeload.github.com/ebu/libbw64/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ebu%2Flibbw64/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278391185,"owners_count":25978945,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T03:00:55.113Z","updated_at":"2025-10-04T23:56:03.674Z","avatar_url":"https://github.com/ebu.png","language":"C++","funding_links":[],"categories":["Multimedia content processing"],"sub_categories":[],"readme":"# libbw64 – ITU-R BS.2088 Library\n\n[![](https://github.com/ebu/libbw64/workflows/Linux/badge.svg)](https://github.com/ebu/libbw64/actions?workflow=Linux)\n[![](https://github.com/ebu/libbw64/workflows/macOS/badge.svg)](https://github.com/ebu/libbw64/actions?workflow=macOS)\n[![](https://github.com/ebu/libbw64/workflows/Windows/badge.svg)](https://github.com/ebu/libbw64/actions?workflow=Windows)\n[![Documentation Status](https://readthedocs.org/projects/libbw64/badge/?version=latest)](https://libbw64.readthedocs.io/en/latest/?badge=latest)\n[![codecov](https://codecov.io/gh/ebu/libbw64/branch/master/graph/badge.svg)](https://codecov.io/gh/ebu/libbw64)\n\n## Introduction\n\nThe `libbw64` library is a lightweight C++ header only library to read and write\nBW64 files. BW64 is standardised as [Recommendation ITU-R\nBS.2088](https://www.itu.int/rec/R-REC-BS.2088/en) and the successor of RF64. So\nit already contains necessary extensions to support files which are bigger than\n4 GB. Apart from that a BW64 file is able to contain the ADM metadata and link\nit with the audio tracks in the file. To do that a BW64 file specifies two new\nRIFF chunks – the `axml` chunk and the `chna` chunk. To parse, create, modify\nand write the ADM metadata in the `axml` chunk you may use the\n[`libadm`](https://github.com/ebu/libadm) library.\n\n[Read the documentation](https://libbw64.readthedocs.io/en/latest/) to get\nstarted.\n\n### Features\n\n- no dependencies\n- support file sizes bigger than 4 GB (`ds64` chunk)\n- read and write `axml` and `chna` chunks\n- 16, 24, and 32 bit integer file formats\n\n## Installation\n\n### macOS\nOn macOS you can use homebrew to install the library. You just have to add the\nEBU NGA homebrew tap and can then use the usual install command.\n\n```\nbrew tap ebu/homebrew-nga\nbrew install libbw64\n```\n\n### Manual installation\nTo manually install the library you have to clone the git repository and then\nuse the CMake (version 3.5 or later) build system to build and install it.\n\n```\ngit clone git@github.com:ebu/libbw64.git\ncd libbw64\nmkdir build \u0026\u0026 cd build\ncmake ..\nmake\nmake install\n```\n\n### Copy headers\n\nThe `libbw64` is a header-only library so installing the library is not by all\nmeans necessary. It is also possible to just copy the content of the `include`\ndirectory to your project and make sure to add the `bw64` folder to your\n`PATH`, that the header files can be found by the compiler.\n\n## CMake\nAs the library uses CMake as a build system it is really easy to set up and use\nif your project does too. Assuming you have installed the library, the following\ncode shows a complete CMake example to compile a program which uses the\n`libbw64`.\n\n```\ncmake_minimum_required(VERSION 3.5)\nproject(libbw64_example VERSION 1.0.0 LANGUAGES CXX)\n\nfind_package(bw64 REQUIRED)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE bw64)\n```\n\nIf you prefer not to install the library on your system you can also use the\nlibrary as a subproject. You can just add the library as a CMake subproject.\nJust add the folder containing the repository to your project and you can use\nthe `bw64` target.\n\n```\ncmake_minimum_required(VERSION 3.5)\nproject(libbw64_example VERSION 1.0.0 LANGUAGES CXX)\n\nadd_subdirectory(submodules/libbw64)\n\nadd_executable(example example.cpp)\ntarget_link_libraries(example PRIVATE bw64)\n```\n\n#### Note\n\nIf `libbw64` is used as a CMake subproject the default values of the options\n\n- `BW64_UNIT_TESTS`\n- `BW64_EXAMPLES`\n- `BW64_PACKAGE_AND_INSTALL`\n\nare automatically set to `FALSE`.\n\n## Basic usage\n\nTo use `libbw64` simply include the main header file `bw64.hpp` and use the\nfunctions `bw64::readFile` and `bw64::writeFile` to create a `BW64Reader` or\n`BW64Writer` object. The functions return a `unique_ptr` to the object.\n\n### Read a BW64 file\n\n```cpp\n#include \u003ciostream\u003e\n#include \u003cvector\u003e\n#include \u003cbw64/bw64.hpp\u003e\n\nconst unsigned int BLOCK_SIZE = 4096;\n\nint main(int argc, char const* argv[]) {\n  if (argc != 2) {\n    std::cout \u003c\u003c \"usage: \" \u003c\u003c argv[0] \u003c\u003c \" [INFILE]\" \u003c\u003c std::endl;\n    exit(1);\n  }\n  auto inFile = bw64::readFile(argv[1]);\n  auto axmlChunk = inFile-\u003eaxmlChunk();  // get axml chunk\n  auto chnaChunk = inFile-\u003echnaChunk();  // get chna chunk\n  std::vector\u003cfloat\u003e buffer(BLOCK_SIZE * inFile-\u003echannels());\n  while (!inFile-\u003eeof()) {\n    auto readFrames = inFile-\u003eread(\u0026buffer[0], BLOCK_SIZE);\n    // TODO: process samples\n  }\n  return 0;\n}\n```\n\n### Write a BW64 file\n\n```cpp\n#include \u003ciostream\u003e\n#include \u003cvector\u003e\n#include \u003cbw64/bw64.hpp\u003e\n\nconst unsigned int BLOCK_SIZE = 4096;\n\nint main(int argc, char const* argv[]) {\n  if (argc != 2) {\n    std::cout \u003c\u003c \"usage: \" \u003c\u003c argv[0] \u003c\u003c \" [OUTFILE]\" \u003c\u003c std::endl;\n    exit(1);\n  }\n  auto outFile = bw64::writeFile(argv[1]);\n  std::vector\u003cfloat\u003e buffer(BLOCK_SIZE);\n  for (int i = 0; i \u003c 100; ++i) {\n    // TODO: fill vector with data\n    outFile-\u003ewrite(\u0026buffer.front(), BLOCK_SIZE);\n  }\n  return 0;\n}\n```\n\n### More examples\n\nSee the [examples folder](examples) in the repository for more examples.\n\n## Credits\n\n*libbw64* is originally a development of the [IRT](https://www.irt.de).\n\n## Acknowledgement\n\nThis project has received funding from the European Union’s Horizon 2020\nresearch and innovation programme under grant agreement No 687645.\n\n## License\n\n```\nCopyright 2018-2020 The libbw64 Authors\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Febu%2Flibbw64","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Febu%2Flibbw64","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Febu%2Flibbw64/lists"}