FmElement
A FmElement is the basic building block of the audio processing chain of the fm_server.
Elements are arranged in a pipeline and have input and output ports. Audio buffers move from an output port (called a Source) to an input port (called a Sink).
Every pipeline can have only one output?; data moves through the elements in callback-based way: the output requests an audio buffer to the element connected to its Source pad (calling its get_buffer() method), which in turn requests a buffer from the element connected to itself and so on, until an input element? fills the buffer.
Base classes
Elements are divided into (or better, subclassed into):
- FmInput?
- they have only Source ports, and support some additional methods to stop, pause and restart them.
- FmEffect?
- they have both Sink and Source ports.
- FmOutput?
- they have only Sink ports. A pipeline can only contain one of them. They lack the get_buffer method.
Some elements that don't fit into these classes (for example FmMixer?) are directly subclassed from FmElement.
Implemented elements
- FmDJMixer?
- a wrapper for FmMixer?, adds gain and pan controls for each channel
- FmEffectGain
- changes the volume level of a source
- FmEffectPan
- changes the balancement between channels (left/right)
- FmEffectRate
- changes the pitch of a source, using libsamplerate
- FmInputCDJ
- emulates a CDJ player
- FmInputTest?
- a test source, generates a sine wave
- FmInputGst
- reads audio from a GStreamer pipeline
- FmMixer?
- mixes the output of different elements
- FmOutputAlsa
- outputs to an ALSA audio device (Linux only)
- FmOutputJack?
- outputs to a JACK audio device
