AudioGrapher is a C++ library for managing signal flow within applications or plugins. It is mainly a bunch of utility classes that ease passing data around and debugging error situations. Currently it also includes all the functionality that is used in Ardour‘s export, including the following:
- sample rate conversion (libsamplerate)
- sample format conversion (gdither)
- file i/o (libsndfile)
- threading parallel datapaths
- unit tests for most of these
I’m planning on using AudioGrapher in future dsp code (plugins probably), so more functionality will be available, just no promises when :)
This might sound a lot like GStreamer, but here are some differences:
- AudioGrapher is “modern” C++ instead of C
- The core of AudioGrapher is only 12 headers
- AudioGrapher is designed to be usable in RT applications (AFAIK most of GStreamer is not)
- Extending AudioGrapher is extremely simple if you know your C++
- Audiographer was designed for audio only, but can stream other data also
Error checking and debugging can be adjusted using C++ template parameters on a per-class basis. This means that only the chosen level of error checking and debugging is built in at compile time. This makes it possible to remove all overhead from performance critical parts.
The very first ideas behind AudioGrapher were born in the summer of 2008 during my summer of code work on Ardour. I needed something that was able to move around different amounts of data in different data formats. So I made very simple Sink and Source classes. At the end of last year I started making some changes to the data flow in Ardour’s (3.0) export, and noticed it would be worth making this a separate library which would be usable in other projects also. I started working on AudioGrapher in the beginning of November,
and by January I had something I thought was worth publishing.