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
}
}


