Files
G-Radio-Player/MANUAL.md
T
cescobar 03084e2d5a Commit inicial: G Radio Player
Sistema de automatización de radio en Rust (GTK4 + GStreamer): reproductor
principal con crossfade y ducking, scheduler de comerciales, refill de
playlist, y herramientas auxiliares (pautaje, parrilla, botonera, visor,
buscador, playlist, grabador, reportes). Incluye sistema de skins y modos
de Players (paneles de reproducción configurables).
2026-08-23 00:57:40 -05:00

49 KiB
Raw Blame History

G Radio Player v-0.61R — Manual de Usuario

Charles Escobar - 2026

Índice

  1. Descripción general
  2. Requisitos del sistema
  3. Instalación y arranque
  4. Reproductor principal (radio-player)
  1. Parrilla musical (gr-parrilla)
  1. Pautaje de comerciales (gr-pautaje)
  2. Botonera de efectos (gr-botonera)
  3. Visor de programación (gr-visor)
  4. Buscador de audio (gr-buscador)
  5. Reportería (gr-reportes)
  6. Editor de playlists (gr-playlist)
  7. Grabador de audio (gr-record)
  8. Estructura de archivos de datos
  9. Clientes remotos

G Radio Player es un sistema de automatización radial escrito en Rust con interfaz GTK4 y motor de audio GStreamer. Gestiona la reproducción de música, comerciales, eventos, jingles de hora y efectos de sonido mediante tres procesos coordinados:

| Proceso | Función |

|-|-|

| radio-player | Interfaz principal: reproduce música y comerciales, maneja crossfade y VU |

| playlist-refill | Daemon: rellena la cola de música cada 5 segundos leyendo la parrilla del día |

| comercial-scheduler | Daemon: carga los comerciales del minuto siguiente al :58 de cada minuto |

Los tres procesos se comunican a través de archivos en ~/.gradio/data/tmp/.


Requisitos del sistema

  • GTK4 ≥ 4.6
  • GStreamer ≥ 1.20 con plugins: base, good, bad, ugly, libav, ALSA, PulseAudio
  • ffprobe (paquete ffmpeg)
  • locate (mejora la velocidad del buscador)
  • gstreamer1.0-plugins-bad — incluye gstapp, requerido por el plugin procesador DSP

La instalación de dependencias es automática vía ./build.sh en sistemas Debian/Ubuntu.

Requisitos adicionales del plugin procesador DSP (opcional)
El procesador multiband es una función opcional que se activa con el botón 🎚 de la barra de herramientas. Cuando está encendido, inserta una etapa DSP en todos los pipelines de audio (música, comerciales, eventos). No requiere hardware adicional ni tarjeta de sonido especial; usa el mismo dispositivo de salida del sistema.

Si el paquete gstreamer1.0-plugins-bad no está instalado, el procesador no tendrá efecto aunque esté activado. Para instalarlo manualmente:

sudo apt install gstreamer1.0-plugins-bad

En Raspberry Pi 5 (ARM64), el procesador con 5 bandas consume menos del 5% de CPU. En equipos x86-64 el impacto es imperceptible.

Instalación y arranque

Compilar e instalar dependencias del sistema

./build.sh

Iniciar el sistema completo (radio-player + daemons + watchdog)

./run.sh

Iniciar solo el reproductor (para pruebas)

./target/release/radio-player

El script run.sh lanza los tres procesos y un watchdog que los reinicia automáticamente si se detienen.


Reproductor principal (radio-player)
Interfaz

La ventana principal se divide en:

  • Cabecera: logo, nombre de la emisora y versión
  • VU Meters: barras L/R que muestran el nivel de audio en tiempo real
  • Deck A y Deck B: paneles de reproducción con título, posición, duración y barra de progreso
  • Barra de comercial: muestra el comercial o evento en curso
  • Barra de controles globales: botones de acceso a todas las herramientas
  • Lista de reproducción: cola de temas pendientes
    Decks A y B
    G Radio usa dos decks alternados para lograr el crossfade (fundido cruzado) entre temas:
  • Deck A — temas impares de la secuencia
  • Deck B — temas pares de la secuencia

Cada deck tiene sus propios controles:

| Botón | Función |

|-|-|

|
Play | Inicia o reanuda la reproducción del deck |

|
** Pausa** | Pausa el deck |

|
** Stop** | Detiene y libera el pipeline del deck |

|
** Siguiente** | Salta al siguiente tema de la lista |

|
** Detener al final** | Completa el tema actual y detiene (no carga el siguiente) |

|
** Loop** | Activa la repetición infinita del tema actual en ese deck |
Se puede hacer clic en la barra de progreso para saltar a cualquier posición del tema.

Se puede arrastrar un tema de la lista de reproducción y soltarlo sobre un deck para reproducirlo inmediatamente con crossfade.
Controles globales
La barra inferior contiene los botones principales del sistema:

| Botón | Función |

|-|-|

| ▶ Iniciar | Arranca la reproducción desde el primer tema de la lista |

| ⏭ Siguiente | Salta al siguiente tema (crossfade inmediato) |

| ⏹ Stop | Detiene inmediatamente toda reproducción: música, comerciales y eventos |

| 🕐 Hora | Dispara manualmente la locución de la hora actual |

| Pisador | Dispara manualmente el pisador sobre el tema en curso |

| ↓ Duck | Baja el volumen de la música para permitir locución (toggle) |

| 🔍 Buscador | Abre el buscador de audio |

| Pautaje | Abre el editor de pautaje de comerciales |

| Parrilla | Abre el editor de parrilla musical |

| Playlist | Abre el editor de playlists .gradio |

| Botonera | Abre la botonera de efectos de sonido |

| Visor | Abre el visor de programación del día |

| Reportes | Abre la reportería de audios emitidos |

| Config | Abre el diálogo de configuración |

La etiqueta junto a los botones muestra: Vol: XX% | Duck: XX% | Fundido: Xs
Lista de reproducción (playlist)
La cabecera del panel contiene, además del título, dos botones en la esquina superior derecha:

Botón Función
Vaciar (ícono escoba) Borra inmediatamente todos los temas de la cola. Si el llenado automático está activo, el daemon los repondrá en el siguiente ciclo (5 s). Si está pausado, la cola queda vacía hasta que el operador la llene.
Automático (ícono robot) Pausa o reanuda el llenado automático por playlist-refill. Verde oscuro = automático activo (estado natural). Rojo oscuro = llenado pausado. El estado persiste entre reinicios.

Modo Automático pausado (rojo)

Cuando el botón Automático está en rojo, el daemon playlist-refill deja de agregar temas a la cola. Situaciones de uso:

  • Noticieros: los comerciales siguen cargándose normalmente para los cortes, pero la parrilla musical permanece vacía. El operador la llena manualmente cuando quiere retomar música.
  • Control manual: el operador elige personalmente qué temas se reproducen, sin que el sistema los rellene automáticamente.

Si el player está detenido (stop), el llenado automático está en rojo y la parrilla está vacía, al dar Play el sistema reproduce únicamente los comerciales en cola y se detiene al terminarlos.

La lista muestra los temas pendientes. Cada fila contiene:

  • Número azul: indica la posición en la cola; al hacer clic reproduce ese tema con crossfade
  • Título del tema: el tooltip muestra la ruta completa al pasar el mouse
  • Botones de acción inline (semitransparentes; se iluminan al pasar el mouse):
  • Subir una posición en la cola
  • Bajar una posición en la cola
  • 🗑 Eliminar de la cola
    Adicionalmente, clic derecho sobre cualquier tema abre el menú contextual con opciones avanzadas:
  • 🎧 Preescuchar (CUE): escuchar en la tarjeta secundaria sin salir al aire
  • 🕐 Insertar Hora aquí: inserta una locución de hora en esa posición
  • 📡 Insertar Streaming aquí: inserta una URL de stream en esa posición
  • 📋 Cargar lista .gradio aquí: inserta una playlist guardada en esa posición
  • 🔄 Regenerar lista: vacía y vuelve a llenar la cola desde la parrilla actual
  • 🗑 Eliminar de la cola: quita el tema seleccionado
  • Doble clic sobre un tema → lo reproduce en el deck activo con crossfade
  • Arrastrar dentro de la lista → reordena el tema a la posición soltada
  • Arrastrar sobre un deck → envía el tema directamente a ese deck
    Los temas se cargan automáticamente por el daemon playlist-refill desde la parrilla de la hora en curso. También se pueden cargar playlists completas (archivos .gradio) arrastrándolas a la ventana.
    Reproducción de hora
    Cuando llega la hora en punto, playlist-refill inserta automáticamente el ítem especial Hora en la cola. Al llegar su turno, el sistema busca los archivos de locución de hora en:

$HOME/.gradio/data/panel/Time/
Importante : los audios de la hora (por ejemplo * * HRS00.mp3 HRS04.mp3 ,... * HRS08.mp3* ,... * HRS12.mp3* * …* * * MIN01.mp3 MIN09.mp3 * * *, o archivos con el nombre de la hora) deben copiarse en la carpeta * $HOME/.gradio/data/panel/Time/ . El sistema los reproduce en orden automáticamente al llegar a la marca de hora.

Se puede disparar la hora manualmente con el botón 🕐 Hora de la barra de controles.
Pisador automático
El pisador es un audio corto (jingle, ID de emisora) que se superpone automáticamente cada cierto número de temas. Se configura en Configuración:

  • Activar pisador sobre temas: activa o desactiva la función
  • Carpeta de pisadores: directorio donde están los archivos de pisador (se elige uno al azar cada vez)
  • Tocar pisador cada N temas: frecuencia de reproducción (1 = todos los temas)
  • Carpetas que no se pisan: lista de carpetas cuyos temas no activan el pisador (útil para tandas de comerciales o géneros especiales)
    El botón Pisador de la barra lanza el pisador manualmente en cualquier momento.
    Pisadores por programa (por hora)
    Para dar identidad sonora propia a cada programa, la herramienta Parrilla musical permite asignar una carpeta de pisadores exclusiva a cada franja horaria. Esta carpeta tiene prioridad sobre la carpeta global: si está definida, el sistema la usará para esa hora; si no, usa la carpeta general de Configuración. Ver sección Parrilla musical → Pisadores específicos por hora.
    Comerciales y eventos
    El daemon comercial-scheduler carga los archivos de pautaje al :58 de cada minuto leyendo:
  • ~/.gradio/data/comerciales/{H}/{M}.com — comerciales programados
  • ~/.gradio/data/eventos/{H}/{M}.com — eventos de inserción inmediata
  • ~/.gradio/data/eventos-espera/{H}/{M}.com — eventos en cola de espera

Cuando comienza una tanda, se reproduce en secuencia: primero eventos (si los hay, interrumpiendo la parrilla), luego comerciales (si no hay eventos, se cargan y esperan a que finalice el tema en curso). Al terminar, la música vuelve a su volumen normal.

El formato de cada línea en los archivos .com es:
/ruta/al/audio.mp3|1234567|20260101|20261231

  • Campo 1: ruta del archivo de audio (o URL http://...)
  • Campo 2: máscara de días activos (1=Lun, 2=Mar, … 7=Dom); 1234567 = todos los días
  • Campo 3: fecha de inicio de vigencia (YYYYMMDD; 0 = sin límite)
  • Campo 4: fecha de fin de vigencia (YYYYMMDD; 0 = sin límite)

Panel de próximas tandas (nueva interfaz desde v0.4.0)
El panel "📢 Comerciales" de la ventana principal muestra las próximas 4 tandas programadas en lugar de la cola activa:

  • Cada tarjeta muestra la hora de reproducción, la duración total acumulada de la tanda y un botón ▶ Play.
  • El botón ▶ Play ejecuta la tanda inmediatamente: hace fadeout del tema en curso, reproduce todos los audios de esa tanda en orden y luego reanuda el playlist. La tanda queda marcada como "ya reproducida" para que el scheduler no la duplique al llegar al segundo :58.
  • Los botones ▲ ▼ ✕ dentro de cada tanda editan directamente el archivo .com del horario (reordenan o eliminan ítems de la programación futura).
  • Cada tarjeta tiene un color de fondo diferente (azul / verde / ámbar / violeta) para distinguir visualmente los bloques.
  • El panel se refresca automáticamente cada 30 segundos.

Los paneles Eventos en espera y 📅 Eventos permanecen ocultos cuando están vacíos y aparecen automáticamente cuando se cargan eventos, con divisor arrastrable para ajustar el alto de cada sección.
Procesador de Audio DSP Multiband
G Radio incluye un procesador de audio broadcast profesional que puede activarse y configurarse directamente desde la ventana principal. El procesador es ideal para ajustar la sonoridad, la presencia y los niveles de la señal antes de que salga al aire.

Activar / desactivar el procesador
En la barra de herramientas superior, a la derecha, hay dos botones:

  • 🎚 (processor-off / processor-on): enciende o apaga el procesador. El ícono cambia para reflejar el estado. El estado se guarda y se restaura al reiniciar el programa.
  • ⚙ (processor-config): abre la ventana de configuración del procesador.

Ventana de configuración
La interfaz de configuración muestra:

  • Barra de presets: combo con presets disponibles (ROCK, BLUE, CLASIC, VOICE, HARD BASS, STRONG) + botones ▶ LOAD (aplicar preset) y ● SAVE (guardar preset propio). El último preset cargado se recuerda entre sesiones.
  • Panel BANDS (izquierda): selector del número de bandas (26) y slider de IN GAIN (-12 a +12 dB).
  • Bandas B1B6: para cada banda activa se muestran knobs ajustables en tiempo real:
Knob Rango Función
THR -60 a 0 dB Umbral del compresor
RATIO 1:1 a 20:1 Razón de compresión
ATK 0.1 a 200 ms Tiempo de ataque
REL 10 a 2000 ms Tiempo de release
GAIN 0 a 24 dB Makeup gain (post-compresor)
LVL (CLIP) -12 a 0 dB Nivel del clipper suave
  • Checkbox CLIP: activa el clipper suave (tanh) para esa banda.
  • Checkbox ON: activa o desactiva la banda completa.
  • VU metros: barras de nivel (verde) y reducción de ganancia (azul) por banda, actualizadas a 30 fps.
  • Panel OUT GAIN / LIMITER (derecha): slider de ganancia de salida global y umbral del limitador brick-wall final (-6 a 0 dBFS).

Cómo funciona
Cuando el procesador está activo, se inserta una etapa DSP en cada pipeline de audio (música, comerciales, eventos) mediante un pad probe de GStreamer. La cadena de procesamiento es:

Crossover LR4 → Compresor por banda → Clipper suave → Limitador brick-wall

Todos los pipelines activos comparten el mismo procesador; cualquier ajuste de parámetro en la ventana de configuración se aplica en tiempo real al audio que está sonando, sin necesidad de esperar a la próxima canción.

Guardar presets propios
Con el botón ● SAVE se abre un diálogo para dar nombre al preset. Los presets de usuario se guardan en ~/.config/gradio/presets/ y aparecen en el combo junto a los presets de fábrica.

Archivo de configuración
El estado del procesador (on/off, parámetros, último preset) se guarda en:
~/.gradio/data/processor.json

Preescucha CUE
Si se configura una segunda tarjeta de audio (tarjeta CUE), se puede escuchar cualquier tema de la lista en monitores o auriculares sin que salga al aire.

Para usarlo: clic derecho sobre un tema en la lista → 🎧 Preescuchar (CUE). Se abre una pequeña ventana con controles de pausa y stop para la preescucha.

La tarjeta CUE se configura en Configuración → Tarjeta de audio CUE (por ejemplo: hw:1,0).
Duck (bajar música)
El botón ↓ Duck (toggle) baja el volumen de la música al nivel configurado para permitir locución del operador. Al pulsarlo de nuevo vuelve al volumen normal.

Los niveles de volumen se ajustan con los archivos:

  • ~/.gradio/data/tmp/upvol — volumen normal (0100)
  • ~/.gradio/data/tmp/downvol — volumen duckeado (0100)
    Streaming de Internet
    Se puede insertar una URL de stream en la lista de reproducción:
  1. Clic derecho sobre la posición deseada en la lista → 📡 Insertar Streaming aquí
  2. Ingresar la URL (http:// o https://)
  3. El stream se reproducirá en su turno igual que un archivo local

Los streams también se pueden pautar como comerciales en los archivos .com usando la URL como ruta.
Configuración
El diálogo de Configuración GR (Config) permite ajustar:

Campo Descripción
Tarjeta de audio principal Dispositivo ALSA/PulseAudio de salida principal (vacío = predeterminado del sistema)
Tarjeta de audio CUE Dispositivo para preescucha sin salir al aire (vacío = desactivado)
Nombre de la emisora Aparece en el encabezado de la ventana y en los reportes PDF
Segundos de fundido (crossfade) Duración en segundos del fundido cruzado entre temas (0 = corte directo)
Pisador sobre temas Activar/desactivar el pisador automático global
Carpeta de pisadores Directorio global con los audios de pisador; se elige uno al azar en cada disparo. Puede ser anulado por hora en la herramienta Parrilla musical
Tocar pisador cada N temas Frecuencia del pisador (1 = después de cada tema, 2 = cada dos temas, etc.)
Carpetas que no se pisan Lista de carpetas cuyos temas no activan el pisador automático. Estas carpetas también quedan exentas del filtro de no-repetición de 3 días (útil para jingles o géneros de alta rotación)
Carpetas Nacionales Carpetas con música nacional (usadas en el cálculo de porcentajes en reportería)
Carpetas Intercultural Carpetas con música intercultural (usadas en el cálculo de porcentajes en reportería)
Detector de silencio (segundos) Si el audio lleva este tiempo detenido o en silencio, el sistema salta automáticamente al siguiente tema; 0 = desactivado
Volumen principal (0100) Nivel de volumen de la música en reproducción normal. Se guarda en ~/.gradio/data/tmp/upvol
Volumen duck (0100) Nivel al que baja la música cuando se activa el duck (para locución o comerciales). Se guarda en ~/.gradio/data/tmp/downvol
Puerto servidor remoto Puerto TCP en que el servidor escucha conexiones de los clientes remotos (default: 7777). Debe coincidir con el que configuran el cliente de escritorio y el cliente Android
Token de acceso Contraseña que deben enviar los clientes al conectarse. Si se deja en blanco, cualquier cliente en la red puede conectarse sin autenticación
Relay internet Activa la conexión al servidor de relay configurado vía variable de entorno GRADIO_RELAY_URL para permitir acceso remoto desde internet (fuera de la red local). Requiere configurar el ID de relay
ID de relay (8 dígitos) Identificador único de esta emisora en el servidor relay. El botón Generar crea un ID aleatorio. Este mismo ID debe ingresarse en el cliente remoto para conectarse por internet

Los cambios en Configuración se aplican inmediatamente al guardar, sin necesidad de reiniciar el sistema.

El archivo de configuración se almacena en ~/.gradio/data/tmp/gradio.config.


Parrilla musical (gr-parrilla)
La Parrilla Musical permite programar qué carpetas o archivos de audio se reproducirán en cada hora de cada día de la semana.
Uso

  1. Seleccionar el día (Lunes a Domingo) en la columna izquierda
  2. Seleccionar la hora (0 a 23) en la columna central
  3. La lista de la derecha muestra el contenido programado para ese bloque
    Tipos de entrada
  • **Carpeta con ** ***** (p. ej. /home/usuario/Musica/Variados/*) — el sistema elige un archivo aleatorio de esa carpeta o sus subcarpetas en cada ciclo
  • Archivo exacto — se reproduce ese archivo específico
  • Hora — marca especial: inserta la locución de la hora en ese punto de la cola
    Selección aleatoria sin repetición
    Cuando una entrada apunta a una carpeta con subcarpetas, el sistema reúne todos los temas disponibles de todas las subcarpetas en un pool único y elige uno al azar, dando igual probabilidad a cada tema independientemente del tamaño de cada subcarpeta. Los temas reproducidos en los últimos 3 días quedan excluidos del pool para evitar repetición; si la carpeta se agota completamente, el sistema relaja esta restricción de forma gradual.
    Carpeta "No Tocar"
    Cualquier subcarpeta cuyo nombre sea exactamente "No Tocar" (sin distinguir mayúsculas) es ignorada automáticamente por el sistema de selección aleatoria. Esto permite mantener audios de referencia, versiones descartadas o material en revisión dentro del árbol de música sin que entren al playlist.
    Edición
  • Arrastrar archivos o carpetas desde el explorador de archivos hacia la lista
  • Los botones de ícono en la barra superior actúan sobre el ítem seleccionado:
  • (up) sube el ítem una posición
  • (down) baja el ítem una posición
  • 🗑 (trash) elimina el ítem
  • inserta la marca especial Hora
  • Leer carga la parrilla guardada del día/hora seleccionados
  • Grabar guarda la lista; los cambios se aplican en el próximo ciclo del daemon
  • Los bloques de hora/día se pueden copiar arrastrando un botón de hora sobre otro (o sobre un día)
    Pisadores específicos por hora
    En la parte superior de la ventana, a la derecha del título "ELABORACIÓN DE LA PARRILLA…", aparece el campo "Pisadores esta hora:" con un botón 📂 para explorar carpetas. Permite asignar una carpeta de pisadores exclusiva a la franja horaria que se está editando. Si se deja en blanco, el sistema usa la carpeta global configurada en Configuración. Este valor se guarda junto con la parrilla al presionar Grabar.
    Los archivos se guardan en:
  • ~/.gradio/data/parrilla/{dia}/{H}-{H+1}.mus — lista de entradas de la parrilla
  • ~/.gradio/data/parrilla/{dia}/{H}-{H+1}.pisador — carpeta de pisadores para esa hora (opcional)

    Pautaje de comerciales (gr-pautaje)
    El Pautaje permite programar los comerciales, jingles y eventos que se emitirán en cada minuto del día.
    Estructura
    La programación se organiza en tres categorías:
  • Comerciales: tandas de publicidad en los cortes programados
  • Eventos: audios que se insertan inmediatamente a la hora indicada
  • Eventos en espera: audios que quedan en cola hasta que el operador los active
    Uso
  1. Seleccionar la hora y el minuto del corte
  2. Agregar los audios arrastrándolos o con el botón Agregar
  3. Para cada audio configurar:
  • Días activos (1=Lun … 7=Dom)
  • Fecha de inicio y fecha de fin de vigencia
  1. Grabar para guardar el corte

Los archivos se guardan en:

  • ~/.gradio/data/comerciales/{H}/{M}.com
  • ~/.gradio/data/eventos/{H}/{M}.com
  • ~/.gradio/data/eventos-espera/{H}/{M}.com

    Botonera de efectos (gr-botonera)
    La Botonera es un tablero de reproducción instantánea de efectos de sonido, cortinas, ID de emisora u otros audios de uso frecuente.
    Organización
  • 5 pestañas renombrables (doble clic sobre el nombre de la pestaña para renombrar)
  • Cada pestaña contiene una grilla de botones de colores
  • Los botones son configurables individualmente
    Uso
  • Arrastrar un archivo de audio sobre un botón vacío → lo asigna a ese botón
  • Clic en un botón → reproduce el audio asignado; si ya está sonando, lo detiene
  • Clic derecho sobre un botón → menú para cambiar el color o limpiar el botón
  • Los colores se eligen de una paleta de 15 colores predefinidos

La configuración se guarda automáticamente en ~/.gradio/data/botonera/config.json.

Visor de programación (gr-visor)
El Visor muestra en una sola pantalla todo lo programado para el día en curso, actualizándose automáticamente cada 60 segundos.
Panel superior: Pautaje del día
Tabla con todos los cortes programados, agrupados por hora:minuto y coloreados por tipo:

| Color | Tipo |

|-|-|

| Verde claro | Comerciales |

| Teal claro | Eventos |

| Lavanda | Eventos en espera |

Panel inferior: Parrilla musical
Muestra la parrilla musical de la hora actual y la siguiente, con indicación especial (amarillo) de las marcas de Hora.


Buscador de audio (gr-buscador)
El Buscador permite localizar rápidamente cualquier archivo de audio por nombre.
Uso

  1. Escribir el texto a buscar en el campo superior y presionar Enter o el botón Buscar
  2. Los resultados muestran: Tema | Duración | Ruta
  3. Doble clic sobre un resultado → agrega el archivo al final de la lista de reproducción del reproductor principal
  4. Arrastrar un resultado → permite soltarlo en la posición deseada dentro del reproductor
    Estrategia de búsqueda
    El buscador usa primero locate (índice del sistema, instantáneo). Si locate no está disponible, realiza una búsqueda recursiva en las carpetas de la parrilla y las carpetas habituales de música.

Consejo *: para mantener el índice de * locate * actualizado, ejecutar periódicamente * sudo updatedb .


Reportería (gr-reportes)
La Reportería genera informes de los audios emitidos, con detalle de duración real al aire y clasificación por tipo de contenido.
Selección de período

  • Elegir la fecha de inicio y fecha de fin con los selectores de fecha (clic → calendario emergente)

  • El informe cubre todos los días del rango seleccionado
    Filtro de audio
    El campo Buscar audio permite filtrar los resultados por nombre de archivo (búsqueda insensible a mayúsculas/minúsculas).
    Columnas del informe

    Columna Descripción
    Fecha Fecha de emisión
    Hora Hora exacta de inicio
    Audio Nombre del archivo
    Duración Segundos reales emitidos
    ### Resumen por día
    La sección Resumen por Día muestra, para cada día del período:
    Columna Descripción
    - -
    FECHA Día del resumen
    TOTAL Total de segundos emitidos en el día
    NACIONAL Segundos de música nacional + porcentaje
    INTERCULTURAL Segundos de música intercultural + porcentaje
    Las carpetas consideradas como Nacional e Intercultural se configuran en el diálogo de Configuración del reproductor principal.
    ### Exportar a PDF
    El botón Exportar PDF genera un informe completo en formato PDF que incluye:
  • Página 1+: tabla completa de audios emitidos con logo y nombre de la emisora

  • Última página: tabla de resumen por día con totales y porcentajes de Nacional e Intercultural

El PDF se guarda en el directorio de inicio del usuario.

Editor de playlists (gr-playlist)
El editor de playlists permite crear y editar archivos .gradio (listas de reproducción guardadas).

Un archivo .gradio contiene una lista de rutas de audio con sus duraciones en formato tabular. Se puede cargar directamente en el reproductor principal arrastrando el archivo .gradio a la ventana.
Grabador de audio (gr-record)
El grabador de audio permite capturar cualquier fuente PulseAudio (entrada de línea, monitor de tarjeta de sonido, micrófono, etc.) y guardarla como archivo MP3.
Fuente de audio
Al abrir la herramienta, el menú desplegable lista todas las fuentes detectadas por PulseAudio. El botón ⟳ refresca la lista sin reiniciar. Ejemplos:

  • alsa_input.pci-...analog-stereo — entrada de línea de la tarjeta de sonido
  • alsa_output.pci-...analog-stereo.monitor — monitor (captura lo que suena por los parlantes)
  • Cualquier dispositivo virtual de PulseAudio (Loopback, virtual sink, etc.)
    VU Meter
    Idéntico al del reproductor principal: dos barras de LEDs (L/R), verde 055 %, amarillo 5575 %, rojo 75100 %. Solo trabaja con grabación activa; al detener, los niveles caen a cero.
    Botón de grabación
    Ubicado en la esquina inferior derecha de la ventana:
  • Inactivo — ícono gris (rec-off)
  • Grabando — ícono rojo con fondo rojo tenue (rec-on)
    Al iniciar la grabación, la barra inferior muestra el nombre del archivo generado y un contador HH:MM:SS. Al detener, el pipeline cierra el archivo correctamente antes de liberar recursos.
    Archivos generados
    Se guardan en ~/GR-grabaciones/ (creada automáticamente) con formato:

GRadio-rec-YYYY-MM-DD-HH-MM.mp3

Encoder: lamemp3enc a 192 kbps (fallback: avenc_mp3 de ffmpeg).
Pipeline GStreamer
pulsesrc → audioconvert → audioresample → level (50 ms) → lamemp3enc → filesink

Estructura de archivos de datos
Todos los datos del sistema se almacenan bajo ~/.gradio/:
~/.gradio/
├── data/
│ ├── parrilla/ # Parrilla musical por día y hora
│ │ ├── 1/ # Lunes
│ │ │ ├── 0-1.mus # Parrilla hora 0 (00:00 01:00)
│ │ │ ├── 0-1.pisador # Carpeta de pisadores para esa hora (opcional)
│ │ │ ├── 1-2.mus # Parrilla hora 1 (01:00 02:00)
│ │ │ ├── 1-2.pisador # Carpeta de pisadores para esa hora (opcional)
│ │ │ └── ...
│ │ ├── 2/ # Martes
│ │ └── ... # (hasta 7 = Domingo)
│ ├── comerciales/ # Pautaje de comerciales
│ │ └── {H}/ # Por hora (0-23)
│ │ └── {M}.com # Por minuto (0-59)
│ ├── eventos/ # Pautaje de eventos
│ │ └── {H}/{M}.com
│ ├── eventos-espera/ # Eventos en espera
│ │ └── {H}/{M}.com
│ ├── panel/
│ │ └── Time/ # Audios de locución de hora (ver sección Hora)
│ ├── botonera/
│ │ └── config.json # Configuración de la botonera
│ └── tmp/ # Archivos de comunicación entre procesos
│ ├── playlist4 # Cola de música activa
│ ├── comercialeslist4 # Cola de comerciales activa
│ ├── eventos-esperalist # Cola de eventos en espera
│ ├── gradio.config # Configuración principal
│ ├── upvol # Nivel de volumen normal (0-100)
│ └── downvol # Nivel de volumen duck (0-100)
└── reportes/ # Logs de audios emitidos
├── GR6-parrilla-YYYY-MM-DD.txt # Registro diario de emisión
└── {carpeta}/.historico.mus # Historial por carpeta (antirepetición)

Formato de archivos de parrilla (.mus)
Cada línea puede ser:
/home/usuario/Musica/Variados/* # Archivo aleatorio de carpeta
/home/usuario/Musica/Temas/tema.mp3 # Archivo específico
Hora # Marca de locución de hora

Formato de archivos de pautaje (.com)
/ruta/audio.mp3|1234567|20260101|20261231

Formato de cola de reproducción (playlist4)
/ruta/al/archivo.mp3[TAB]00:03:45.000


Clientes remotos
G Radio Player incluye dos clientes remotos que permiten controlar el servidor desde otra máquina en la misma red (protocolo JSON/TCP en el puerto 7777).
Cliente de escritorio (radio-player-client)
Aplicación GTK4 para Linux con las siguientes pantallas:

Pantalla Función
▶ Player Controles de reproducción, VU, decks A/B, lista de cola
📅 Pautaje Editar la programación de comerciales y eventos remotamente
🎵 Parrilla Ver y editar la parrilla musical del servidor
🎛 Botonera Acceder a la botonera de efectos del servidor
📢 Comercios Ver y gestionar las colas activas de comerciales y eventos
📊 Reportes Consultar los reportes de emisión

Cliente Android (GRadio Client)
Aplicación para Android con interfaz Jetpack Compose. Requiere ingresar la IP y puerto del servidor al conectar. Pantallas disponibles:

Pantalla Función
Player Estado de reproducción, controles básicos, volumen
Búsqueda Buscar audios en el servidor y agregarlos a la cola
Parrilla Ver y editar la parrilla musical; botones inline ▲ ▼ 🗑 por ítem
Botonera Reproducir efectos desde la botonera del servidor
Pautaje Editar la programación de comerciales
Comercios Ver colas activas de comerciales/eventos con borrado individual
Reportes Consultar reportes de emisión

La conexión se establece ingresando IP:7777 en la pantalla de inicio. El cliente se reconecta automáticamente si pierde la conexión.
G Radio Player v-0.3.6 — Desarrollado por Charles Escobar