So, a few days ago I started a new project. It’s currently called Sonitus and hopefully will grow into a fully-featured broadcasting application that can use almost any input available, can perform arbitrary processing, and can output the processed results to almost anywhere.
The current state is that I have a lot of small components that make up the core of Sonitus. There are sources, sinks, and filters—which are a combination of sources and sinks. Sources generate data, sinks consume data, and filters naturally do both.
This picture shows a simple pipeline, consisting of a source (named “SceneSat Radio”), various filters, and a sink (“Audio Output”). Each filter between the source and the sink is responsible for a single thing:
- The LAME decoder is responsible for decoding an MP3 stream into a PCM stream.
- The Stereo Separation filter can reduce the stereo width of an image.
- The 44.1 kHz Rate Limiter makes sure that no more than 176400 bytes per second make it through this filter.
- The Time and Total Time filter do nothing but counting how many milliseconds worth of data have passed through them.
- The Volume filter can reduce the volume of the signal or even mute it completely.
This pretty much shows the state of the current version on the GitHub repository at the Sonitus repository at GitHub (sorry, no tags yet).