Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/NativeInstruments/ni-media
NI Media is a C++ library for reading and writing audio streams.
https://github.com/NativeInstruments/ni-media
aiff audio cpp cpp14 flac m4a mp3 mp4 music ogg ogg-flac ogg-vorbis pcm sound streams wav
Last synced: 3 months ago
JSON representation
NI Media is a C++ library for reading and writing audio streams.
- Host: GitHub
- URL: https://github.com/NativeInstruments/ni-media
- Owner: NativeInstruments
- License: mit
- Created: 2017-10-16T10:44:07.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2024-05-08T10:37:06.000Z (6 months ago)
- Last Synced: 2024-06-20T11:06:28.530Z (5 months ago)
- Topics: aiff, audio, cpp, cpp14, flac, m4a, mp3, mp4, music, ogg, ogg-flac, ogg-vorbis, pcm, sound, streams, wav
- Language: C++
- Size: 457 KB
- Stars: 235
- Watchers: 36
- Forks: 34
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Codeowners: CODEOWNERS
Awesome Lists containing this project
- awesome-musicdsp - ni-media - A very nice audio file loading library from Native Instruments (Miscellaneous open source audio code/projects)
README
# NI MEDIA [![ni-media CI](https://github.com/NativeInstruments/ni-media/actions/workflows/ci.yml/badge.svg)](https://github.com/NativeInstruments/ni-media/actions/workflows/ci.yml) [![codecov](https://codecov.io/gh/NativeInstruments/ni-media/branch/master/graph/badge.svg)](https://codecov.io/gh/NativeInstruments/ni-media)
NI Media is a library for reading from / writing to audio streams developed at [Native Instruments](https://www.native-instruments.com).
## Motivation
The goal is to have a modern C++ library for dealing with audio streams in an idiomatic C++ style.
Modern:
- a clear separation of concerns (modular instead of fat classes)
- support for ranges and iteratorsIdiomatic:
- based on std.streams.
- integrates well with STL algorithms and boostThe following example demonstrates how to stream an entire audio file into a vector:
```cpp
#include
#includeint main()
{
auto stream = audio::ifstream("hello.wav");
auto samples = std::vector(stream.info().num_samples());
stream >> samples;
// use samples
}
```## Components
- [audiostream](audiostream/README.md): the main library for reading from / writing to audio streams.
- [pcm](pcm/README.md): a small library to convert [pcm](https://en.wikipedia.org/wiki/Pulse-code_modulation)
data from / to [arithmetic](http://en.cppreference.com/w/cpp/language/types) types.## Dependencies
* [boost](https://github.com/boostorg/boost) ( algorithm, endian, filesystem, format, icl, iostream, local, math, program-option, regex, system)
* [flac](https://github.com/xiph/flac) & [ogg](https://github.com/xiph/ogg), for flac support (CMake option `NIMEDIA_ENABLE_FLAC_DECODING`)
* [vorbis](https://github.com/xiph/vorbis) & [ogg](https://github.com/xiph/ogg), for ogg vorbis support (CMake option `NIMEDIA_ENABLE_OGG_DECODING`)
* [googletest](https://github.com/google/googletest) for building the tests (CMake option `NIMEDIA_TESTS`)## Platforms
ni-media requires a c++14 compliant compiler and is currently supported and tested on these platforms:
* Windows ( requires Visual Studio 2015 Update 3 or higher )
* Mac OS X ( requires Xcode / Clang 7.3 or higher )
* iOS ( requires Xcode / Clang 7.3 or higher )
* Linux ( requires GCC 5.0 or higher, Clang 7.3 or higher should also work )## Building
First, build and install boost `filesystem`, `iostream`, `system` and `program-option` to `path/to/dependencies`. Optionally install any codecs that you want to use, for example [flac](https://github.com/xiph/flac) and [ogg-vorbis](https://github.com/xiph/vorbis).
Now configure ni-media with [CMake](https://cmake.org/) (version 3.16.0 or higher is required)```
cmake -G YOUR-PROJECT-GENERATOR -DCMAKE_PREFIX_PATH=path/to/dependencies/ path/to/ni-media
```Specific codecs can be enabled / disabled by passing additional CMake [options](audiostream/doc/ifstream.md).
We can now build ni-media:
```
cmake --build .
```## Testing
[googletest](https://github.com/google/googletest) is required for testing and needs to be installed to `path/to/dependencies`. The unit tests can be enabled with CMake option `NIMEDIA_TESTS`.
```
cmake -G YOUR-PROJECT-GENERATOR -DCMAKE_PREFIX_PATH=path/to/dependencies/ -DNIMEDIA_TESTS=ON path/to/ni-media
```Before running the tests some reference test files need to be downloaded using [git-lfs](https://github.com/git-lfs/git-lfs):
```
git lfs pull -X ""
```To execute the tests run:
```
cmake --build . --target test
```## Contributions
We very much appreciate your contribution! If you want to contribute please get in touch with the maintainers:
* [Marc Boucek](https://github.com/marcrambo)
* [Nathan Kozlowski](https://github.com/FalconPDX)
* [Moritz Heppner](https://github.com/ni-mheppner)
* [Tim Smit](https://github.com/ni-tsmit)Please run [clang-format](https://clang.llvm.org/docs/ClangFormat.html) with the provided .clang-format file and if possible add some tests when opening a pull request.