Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
pcm
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

NI MEDIA Build Status codecov

NI Media is a library for reading from / writing to audio streams developed at Native Instruments.

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 iterators

Idiomatic:

  • based on std.streams.
  • integrates well with STL algorithms and boost

The following example demonstrates how to stream an entire audio file into a vector:

#include <ni/media/audio/ifstream.h>
#include <vector>

int main()
{
    auto stream = audio::ifstream("hello.wav");
    auto samples = std::vector<float>(stream.info().num_samples());
    stream >> samples;
    // use samples
}

Components

  • audiostream: the main library for reading from / writing to audio streams.
  • pcm: a small library to convert pcm data from / to arithmetic types.

Dependencies

  • boost ( algorithm, endian, filesystem, format, icl, iostream, local, program-option, regex, system)
  • flac & ogg, for flac support (CMake option NIMEDIA_ENABLE_FLAC_DECODING)
  • vorbis & ogg, for ogg vorbis support (CMake option NIMEDIA_ENABLE_OGG_DECODING)
  • 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 and ogg-vorbis. Now configure ni-media with CMake (version 3.12.4 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.

We can now build ni-media:

cmake --build . 

Testing

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:

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:

Please run clang-format with the provided .clang-format file and if possible add some tests when opening a pull request.

You can’t perform that action at this time.