fm_server

The fm_server is the heart of FreeMix, as it handles audio stream and applies effects to them. It's built on RGC and it has a completely object-based architecture.

Architecture

The server is entirely built out of objects. Every object which works on audio data is called an element (there is a brief  introduction to audio processing elements in the GStreamer manual).

The clients can perform operations on these elements (creating, destroying, calling methods, changing properties on them) using the standard RGC functions. They are notified of their property changes and of signals raised by them.

Thread design of fm_server

Audio

Audio data moves through the server pipeline(s) from one element to the next inside a buffer. Audio samples are always in 32-bit floats (gfloat), each channel (usually two) is stored in a different area of the buffer. All the code that runs in the pipeline has to be RT-safe: it can't block while is running in the JACK callback context.