GR PROCESSOR FM

GR Processor es un procesador experimental de audio multibanda diseñado para emisoras de radio FM. Procesa el audio en tiempo real separándolo en hasta 6 bandas de frecuencia independientes, aplicando compresor, clipper y control de ganancia a cada banda antes de sumarlas en una señal de alta densidad sonora, lista para transmisión.

El procesador incluye un codificador MPX para la generación de la señal estéreo FM según el estándar ITU-R BS.450 (pre-énfasis 75 µs NRSC o 50 µs ITU), activo cuando la tarjeta de salida opera a ≥ 96 kHz.

Descarga las versiones para Debian 12 (+?)

gr-processor_0.1.2_amd64.deb
gr-processor_0.1.2_arm64.deb
GR-processor-v0.1.2-amd64.zip
GR-processor-v0.1.2-arm64.zip

Requisitos del sistema

ComponenteMínimoRecomendado
OSLinux (ALSA/PipeWire)Debian 12+ / Ubuntu 22.04+
CPUx86_64 o ARM64Cualquier dual-core moderno
RAM256 MB512 MB
AudioTarjeta ALSA compatible2 tarjetas separadas (entrada/salida)
Latencia512 frames (~10 ms)256 frames (~5 ms)

Inicio rápido

  1. Conectar audio: conecta la fuente de audio (reproductor, consola) a la tarjeta de entrada y el destino (excitador FM, grabadora) a la tarjeta de salida. Si solo hay una tarjeta, se usa la misma para entrada y salida (loopback).
  2. Arrancar la aplicación: ./target/release/gr-processor
  3. Verificar audio: los metros INPUT (arriba) deben moverse al recibir audio. Los metros OUTPUT muestran la señal procesada.
  4. Cargar un preset: en el selector PRESET (arriba a la derecha), elige VOICE para locutores o ROCK para música general, y pulsa ▶ LOAD.
  5. Ajustar: mueve el control OUT GAIN hasta que el nivel de salida sea el deseado. El limitador LIM controla el pico máximo (normalmente −0.3 dBFS).
  6. Stand By: pulsa ⏸ STAND BY para comparar la señal sin procesar con la procesada. Cuando está activo, el audio pasa directo sin ningún efecto DSP.

Interfaz Modo Escritorio

El modo escritorio muestra el procesador en pantalla completa con todos los controles visibles simultáneamente.

Columnas de banda (B1–B6)

Cada columna representa una banda de frecuencias. Las bandas inactivas (más allá del número seleccionado) aparecen atenuadas (22% de opacidad).

ElementoDescripción
B1..B6Número de banda y rango de frecuencias
VUVúmetro LED del nivel de señal en esa banda (verde → amarillo → rojo)
GRMeter de Gain Reduction — indica cuánta compresión se está aplicando (azul, desde arriba)
THRUmbral de compresión (dBFS)
RATIORelación de compresión (1:1 = sin compresión, 20:1 = limitador)
ATKTiempo de ataque en ms — rapidez con que reacciona al nivel superado
RELTiempo de release en ms — rapidez con que suelta la ganancia
GAINMakeup gain (dB) — compensación de nivel después de comprimir
CLIPActiva/desactiva el clipper suave (tanh) en esa banda
LVLNivel de clipper (dBFS) — nivel al que empieza el clipping suave
ONActiva/desactiva el procesamiento completo de la banda (bypass de banda)

Interfaz Modo Rack 3U

El modo Rack simula visualmente el frente de un procesador de rack de 3 unidades (19″, 133 mm de altura). Es ideal para uso en estudio o sala de control.

Cajón de configuración de banda

El cajón (panel inferior deslizable) se abre haciendo clic en cualquier banda del strip. Contiene los mismos knobs de configuración que el modo escritorio.

  • Pestañas B1–B6: cambian la banda configurada sin cerrar el cajón
  • Botón ▲: cierra el cajón
  • El cajón se abre con animación suave hacia abajo

Cambio de modo

La barra de modo (visible en ambas vistas):

  • ⊞ ESCRITORIO — vista expandida con todas las columnas
  • ▣ RACK 3U — vista compacta estilo rack de 19″

Controles globales

BANDS (SpinButton, 2–6)

Selecciona el número de bandas activas. Al cambiar:

  • Las frecuencias de corte se ajustan automáticamente para cubrir todo el espectro (20 Hz – 20 kHz)
  • Las bandas excedentes se atenúan visualmente y dejan de procesar

Crossovers por defecto según número de bandas:

BandasFrecuencias de corte
2800 Hz
3300 Hz · 3 kHz
4150 Hz · 1 kHz · 6 kHz
5120 Hz · 400 Hz · 2 kHz · 6 kHz
680 Hz · 320 Hz · 1.2 kHz · 4.8 kHz · 12 kHz

IN GAIN / OUT GAIN (deslizador, −12 a +12 dB)

  • IN GAIN: ganancia aplicada a la entrada antes de cualquier procesamiento. Útil para nivelar la señal de entrada.
  • OUT GAIN: ganancia aplicada a la salida después del limitador. Controla el nivel final entregado a la tarjeta de salida.

LIMITER (deslizador, −6 a 0 dBFS)

Umbral del limitador de pico final (brick-wall). El limitador actúa sobre la señal sumada después de todas las bandas. Valor típico para FM: −0.3 dBFS.


Procesamiento por banda

El audio pasa por la siguiente cadena en cada banda:

Entrada → [Crossover LR4] → [Compresor] → [Clipper] → Suma → [Limitador] → Salida

Crossover Linkwitz-Riley 4° orden (LR4)

El crossover divide la señal usando filtros Linkwitz-Riley de 4° orden (cascada de dos Butterworth de 2° orden). Propiedades:

  • La suma de todas las bandas es plana en magnitud (sin coloración)
  • −6 dB en la frecuencia de corte
  • Fase coherente entre bandas

Compresor (linked stereo, feed-forward, RMS)

Linked stereo: L y R reciben la misma ganancia calculada a partir de la potencia total (L² + R²). Preserva la imagen estéreo durante la compresión.

Feed-forward: detecta el nivel en la entrada (no la salida). Comportamiento más predecible.

Parámetros:

ParámetroRangoEfecto
THR (Threshold)−60 a 0 dBFSNivel a partir del cual comprime
RATIO1:1 a 20:1Fuerza de la compresión. 1:1 = transparente, ∞:1 = limitador
ATK (Attack)0.1 a 200 msRapidez de respuesta. Valores bajos = compresión más agresiva
REL (Release)10 a 2000 msTiempo para soltar la ganancia. Valores altos = más «pump»
GAIN (Makeup)0 a 24 dBCompensa la ganancia perdida por la compresión

Indicador GR (Gain Reduction): el meter azul de cada banda muestra cuánta reducción de ganancia está aplicando el compresor. Si el meter GR está inactivo, no hay compresión en esa banda.

Clipper suave (tanh)

Aplica una función tangente hiperbólica que limita el nivel de forma suave, generando armónicos impares que suenan musicalmente densos (similar a la saturación de transformadores analógicos).

ParámetroEfecto
CLIP (checkbox)Activa/desactiva el clipper en la banda
LVLNivel al que el clipper entra en acción (−12 a 0 dBFS)

Consejo: para sonido de radio denso, usar CLIP habilitado con LVL entre −1 y −0.5 dBFS.


Sección MPX

El codificador MPX convierte la señal estéreo procesada en la señal compuesta FM estándar.

Señal MPX FM estándar (ITU-R BS.450)

MPX = (L+R)×0.45  +  Piloto(19kHz)×0.09  +  (L−R)×0.45×cos(38kHz)
      ─────────────  ─────────────────────   ──────────────────────────
      Canal principal  Tono piloto estéreo    Subportadora DSB-SC
      monocompatible   (señaliza estéreo)     (contiene diferencia L−R)

El receptor FM usa el piloto de 19 kHz para regenerar los 38 kHz y demodular el canal de diferencia (L−R), reconstruyendo L y R.

Requisito de sample rate: la subportadora de 38 kHz requiere que la tarjeta de salida opere a ≥ 96 kHz. A 48 kHz, el procesador entrega solo el canal principal (L+R) con pre-énfasis aplicado (compatible mono).

Controles MPX

ControlDescripción
Switch ON/OFFActiva la codificación MPX
75 µs (NRSC)Pre-énfasis según estándar norteamericano (EE.UU., Canadá, Japón)
50 µs (ITU)Pre-énfasis según estándar europeo / internacional
MPX LEVELNivel de salida de la señal MPX (dB)
PILOT 19kHzPorcentaje del piloto (estándar: 9%)
MPX OUTMetros de nivel de la señal MPX compuesta

Pre-énfasis

El pre-énfasis boosteea las altas frecuencias antes de la transmisión para mejorar la relación señal/ruido. El receptor aplica la curva inversa (de-énfasis). Escoge el estándar según tu región:

  • 75 µs: América del Norte, Japón
  • 50 µs: Europa, América del Sur, Asia, África, Australia

Presets

Los presets guardan toda la configuración de procesamiento (bandas, compresores, crossover, MPX). No guardan la selección de tarjeta de audio ni el sample rate.

Presets de fábrica

PresetBandasDescripción
ROCK5Compresión agresiva (ratio 4–5:1), énfasis en medios 400Hz–2kHz, clips a −0.5 dBFS. Para rock, pop y formatos de alta densidad.
BLUE5Suave y cálido (ratio 2.5–3:1), lento. Blues, jazz, R&B. Preserva la dinámica natural.
CLASIC5Muy transparente (ratio 1.5–2:1), tiempos largos. Clásica, orquestal. Mínima coloración.
VOICE5Optimizado para locutores FM: presencia vocal intensa en 400Hz–2kHz (+7 dB makeup), de-essing agresivo (8:1) en 2–6kHz.
HARD BASS6Electrónica, hip-hop. Sub bestial (<80 Hz: ratio 8:1, +12 dB makeup), 6 bandas con crossover extendido a 12kHz.
STRONG5Máxima densidad y loudness. Todas las bandas a 8:1, +10 dB makeup, limiter −0.1 dBFS. Radio de alta competencia.

Guardar preset de usuario

  1. Ajusta los parámetros a tu gusto
  2. Pulsa ● SAVE (arriba a la derecha)
  3. Introduce un nombre y confirma
  4. El preset se guarda en ~/.config/gr-processor/presets/<nombre>.json

Los presets de usuario aparecen al final del selector, después de los presets de fábrica.

Editar o eliminar presets de usuario

Los presets son archivos JSON en ~/.config/gr-processor/presets/. Puedes editarlos con cualquier editor de texto o eliminarlos para quitarlos del selector.


Stand By y comparación A/B

El botón ⏸ STAND BY (barra de modo, visible en ambas interfaces) activa el bypass total del procesamiento.

Cuando está activo:

  • El audio pasa directamente de entrada a salida sin ningún procesamiento DSP
  • Los metros INPUT y OUTPUT siguen mostrando niveles
  • El botón cambia a ▶ BYPASS ON con color rojo como indicador visual
  • El indicador GR del limitador se pone a cero

Uso recomendado para comparación A/B

  1. Configura el procesador normalmente (ajusta presets, compresores, etc.)
  2. Sube el OUT GAIN hasta nivelar el volumen percibido entre bypass y procesado
  3. Alterna STAND BY para comparar instantáneamente

Nota importante: la señal en bypass puede tener picos más altos (no hay limitador). Baja el OUT GAIN antes de activar STAND BY si hay riesgo de sobremodulación en la transmisión.


Cadena de procesamiento DSP

Entrada estéreo (ALSA/PipeWire)
        │
        ▼
   [IN GAIN] ── ganancia de entrada
        │
        ▼
  ┌─ CROSSOVER ─────────────────────────────────────────┐
  │  Filtros Linkwitz-Riley 4° orden por cada punto    │
  │  de corte. Suma de todas las bandas = señal plana  │
  └──────┬──────┬──────┬──────┬──────┬─────────────────┘
         ▼      ▼      ▼      ▼      ▼      ▼
       [B1]   [B2]   [B3]   [B4]   [B5]   [B6]
         │      │      │      │      │      │
    [COMP] x 6  │  Compresor linked-stereo RMS feed-forward
    [CLIP] x 6  │  Clipper suave (tanh)
         │      │      │      │      │      │
         └──────┴──────┴──────┴──────┴──────┘
                        │
                        ▼
                  [SUMA de bandas]
                        │
                        ▼
             [LIMITADOR final brick-wall]
                        │
                        ▼
            [MPX ENCODER] ── si está activo
            (pre-énfasis + piloto + DSB-SC)
                        │
                        ▼
               [OUT GAIN] ── ganancia de salida
                        │
                        ▼
       Salida estéreo (ALSA/PipeWire)

Parámetros de referencia por género

Radio pop/rock contemporáneo

ParámetroValor
Bandas5
Crossover120 · 400 · 2k · 6k Hz
Threshold (todas)−20 a −18 dBFS
Ratio (graves/medios)4:1 – 5:1
Attack5 – 10 ms
Release80 – 150 ms
Makeup gain4 – 6 dB
Clip level−0.5 dBFS
Limiter−0.3 dBFS

Radio de noticias / locutores

ParámetroValor
Bandas4–5
Threshold B3 (400–2k)−14 dBFS (presencia vocal)
Ratio B36:1
Makeup B37 dB
Threshold B4 (2k–6k)−16 dBFS (de-essing)
Ratio B48:1
Attack2 – 5 ms
Limiter−0.2 dBFS

Música electrónica / dance

ParámetroValor
Bandas6
Crossover80 · 320 · 1.2k · 4.8k · 12k Hz
Threshold B1 (<80 Hz)−16 dBFS
Ratio B18:1
Makeup B112 dB
Clip B1−0.3 dBFS
Output gain−2 dB (compensar el boost de graves)

Solución de problemas

No hay audio en la salida

  1. Verifica que los metros INPUT se muevan — si no hay señal de entrada, revisa la tarjeta y la fuente.
  2. Asegúrate de que el botón ⏸ STAND BY no esté activo (bypass reduce el volumen si IN GAIN ≠ OUT GAIN).
  3. Revisa OUT GAIN — puede estar en −12 dB.
  4. Los logs en terminal muestran los dispositivos abiertos: Entrada: hw:0 / Salida: hw:1.

Los metros de banda no se mueven

El motor de audio abre los dispositivos al arrancar. Si hay error, aparece en la terminal. Solución común:

# Liberar el dispositivo de audio
fuser -k /dev/snd/*
# Reiniciar PipeWire
systemctl --user restart pipewire

La compresión no se escucha

Verifica que el umbral (THR) esté por debajo del nivel de la señal. Si la señal promedio es −20 dBFS y el threshold está en −10 dBFS, nunca se comprimirá. Baja el threshold hasta que el metro GR muestre reducción.

Distorsión excesiva

  • Reduce el Makeup Gain (GAIN) de las bandas con más GR
  • Sube el threshold (THR) para comprimir menos
  • Verifica el nivel de CLIP LVL — si está muy alto puede introducir distorsión audible
  • Activa STAND BY para verificar si la distorsión viene del procesador o de la fuente

El modo MPX no funciona a 48 kHz

Normal. A 48 kHz el Nyquist es 24 kHz — la subportadora de 38 kHz queda fuera del rango representable. La sección MPX está activa pero solo genera el canal principal con pre-énfasis. Para MPX estéreo completo, configura la tarjeta a 96 kHz o superior.

La aplicación no abre (segunda instancia)

GR Processor es single-instance por diseño. Si ya hay una instancia corriendo, la nueva simplemente la activa. Para forzar un reinicio:

pkill gr-processor && ./target/release/gr-processor

Licencia y créditos

GR Processor es software libre desarrollado por Charles Escobar con Rust + GTK4.
Librería de audio CPAL · Filtros LR4 según Audio EQ Cookbook (Robert Bristow-Johnson)


GR Processor v0.2.0 · gradio.net