En el mercado existen herramientas de audio para transmisión de FM y adición de texto RDS a la señal, como por ejemplo Stereo Tool. En este caso, es gratuito para las funciones básicas pero si quieres desbloquear y utilizar todas las características relacionadas con FM tendrás que desembolsar +600 newtons. En la versión gratuita, hay un tono beep que se activa cada pocos segundos cuando utilizas funciones sin licencia.
Pero resulta que es posible realizar lo mismo utilizando los plugins LADSPA en ALSA. Como ejemplo aquí tenéis el /etc/asound.conf que utilizamos con nuestra estación de radio servidor linux en http://97irratia.info, un servidor barato con la tarjeta de sonido integrada.
Con esta configuración, se redirige la salida del dispositivo «radio» para que utilice la cadena de plugins LADSPA, por ejemplo «aplay -D radio some.wav»
# Make USB DAC the default device #-------------------------------------------------- # Cards #-------------------------------------------------- pcm.audiophile { type hw card 1 } ctl.audiophile { type hw card 1 } #-------------------------------------------------- # Normal alsa #-------------------------------------------------- pcm.!default { type plug slave.pcm "duplex" } pcm.duplex { type asym playback.pcm "ladspa" capture.pcm "dsnooper" } # --- ladspa chain --- pcm.ladspa { type ladspa slave.pcm "dmixplug" path "/usr/lib/ladspa"; plugins [ { # Equalizer - FM curve (approx, should cut at 19kHz, not 16) label Eq input { # 31 Hz, -48 to 24, default -30 # 63 Hz, -48 to 24, default 0 # 125 Hz, -48 to 24, default 0 # 250 Hz, -48 to 24, default 0 # 500 Hz, -48 to 24, default 0 # 1 kHz, -48 to 24, default 0 # 2 kHz, -48 to 24, default 0 # 4 kHz, -48 to 24, default 0 # 8 kHz, -48 to 24, default 0 # 16 kHz, -48 to 24, default 0 controls [ -30 0 0 0 0 0 0 0 0 -30 ] } } { # Expander - remove low-level noise/hiss label se4 input { # RMS/peak, 0 to 1, default 0 # Attack time (ms), 1.5 to 400, default 101.125 # Release time (ms), 2 to 800, default 401 # Threshold level (dB), -30 to 0, default 0 # Ratio (1:n), 1 to 20, default 1 # Knee radius (dB), 1 to 10, default 3.25 # Attenuation (dB), -24 to 0, default 0 controls [ 1 101.125 401 -26 10 3.25 0 ] } } { # Compressor label sc4 input { # RMS/peak, 0 to 1, default 0 # Attack time (ms), 1.5 to 400, default 101.125 # Release time (ms), 2 to 800, default 401 # Threshold level (dB), -30 to 0, default 0 # Ratio (1:n), 1 to 20, default 1 # Knee radius (dB), 1 to 10, default 3.25 # Makeup gain (dB), 0 to 24, default 0 controls [ 0.9 101.125 401 -10 2 3.25 0 ] } } { # Limiter label fastLookaheadLimiter input { # Input gain (dB), -20 to 20, default 0 # Limit (dB), -20 to 0, default 0 # Release time (s), 0.01 to 2, default 0.5075 controls [ 10 0 0.8 ] } } ] } pcm.dmixplug { type plug slave.pcm "dmixer" } pcm.dmixer { type dmix ipc_key 1234 slave { pcm "audiophile" period_size 1024 buffer_size 4096 rate 44100 } } pcm.dsnooper { type dsnoop ipc_key 2048 ipc_perm 0666 slave.pcm "audiophile" slave { period_time 0 period_size 1024 buffer_size 4096 rate 44100 } bindings { 0 0 1 1 } }