
**G Radio Player v-0.61R — Manual de Usuario**  

 

 Charles Escobar - 2026  

 
**Índice**  
1. [Descripción general](#anchor-1 "#anchor-1")  
2. [Requisitos del sistema](#anchor-2 "#anchor-2")  
3. [Instalación y arranque](#anchor-3 "#anchor-3")  
4. [Reproductor principal (radio-player)](#anchor-4 "#anchor-4")  
- [Interfaz](#anchor-5 "#anchor-5")  
- [Decks A y B](#anchor-6 "#anchor-6")  
- [Controles globales](#anchor-7 "#anchor-7")  
- [Lista de reproducción (playlist)](#anchor-8 "#anchor-8")  
- [Reproducción de hora](#anchor-9 "#anchor-9")  
- [Pisador automático](#anchor-10 "#anchor-10")  
- [Comerciales y eventos](#anchor-11 "#anchor-11")  
- [Preescucha CUE](#anchor-12 "#anchor-12")  
- [Duck (bajar música)](#anchor-13 "#anchor-13")  
- [Streaming de Internet](#anchor-14 "#anchor-14")  
- [Configuración](#anchor-15 "#anchor-15")  
5. [Parrilla musical (gr-parrilla)](#anchor-16 "#anchor-16")  
- [Tipos de entrada · Selección aleatoria sin repetición · Carpeta "No Tocar"](#anchor-16 "#anchor-16")  
- [Edición · Pisadores por hora](#anchor-16 "#anchor-16")  
6. [Pautaje de comerciales (gr-pautaje)](#anchor-17 "#anchor-17")  
7. [Botonera de efectos (gr-botonera)](#anchor-18 "#anchor-18")  
8. [Visor de programación (gr-visor)](#anchor-19 "#anchor-19")  
9. [Buscador de audio (gr-buscador)](#anchor-20 "#anchor-20")  
10. [Reportería (gr-reportes)](#anchor-21 "#anchor-21")  
11. [Editor de playlists (gr-playlist)](#anchor-22 "#anchor-22")  
12. [Grabador de audio (gr-record)](#anchor-23 "#anchor-23")  
13. [Estructura de archivos de datos](#anchor-24 "#anchor-24")  
14. [Clientes remotos](#anchor-25 "#anchor-25")  
- [Cliente de escritorio (radio-player-client)](#anchor-25 "#anchor-25")  
- [Cliente Android (GRadio Client)  
 ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANUlEQVR4nO3OMQ2AUBBAsUfyNbBi9VRgEA3sWGAjJK2CbjNzVGcAAPzFtapV7V9PAAB47X4AEXIELdGZ+p4AAAAASUVORK5CYII=)  
](#anchor-25 "#anchor-25")  
**Descripción general**  

 **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/.  

 ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAM0lEQVR4nO3OMQ0AIAwAwZJgBKeVgjWMNCwYYCIkd9OP3zJzRMQMAAB+sfqJeroBAMCN2pTaBSQLg92+AAAAAElFTkSuQmCC)  
**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.  
 ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANUlEQVR4nO3OMQ2AABAAsSNhYEMBJlD4Mz7xgQU2QtIq6DIzR3UFAMBf3Gu1VefXEwAAXtsfSqQDW2Qf4EYAAAAASUVORK5CYII=)  
**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.  

 ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANklEQVR4nO3OQQmAABRAsScYxpg/kR2sYQKvNrCCNxG2BFtmZquOAAD4i3Ot7mr/egIAwGvXA4DuBdDaS4drAAAAAElFTkSuQmCC)  
**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** |  

 |-|-|  

 | ![](data:image/png;base64, )  
 **Play** | Inicia o reanuda la reproducción del deck |  

 | ![](data:image/png;base64, )  
** Pausa** | Pausa el deck |  

 | ![](data:image/png;base64, )  
** Stop** | Detiene y libera el pipeline del deck |  

 | ![](data:image/png;base64, )  
** Siguiente** | Salta al siguiente tema de la lista |  

 | ![](data:image/png;base64, )  
** Detener al final** | Completa el tema actual y detiene (no carga el siguiente) |  

 | ![](data:image/png;base64, )  
** 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*.](#anchor-16 "#anchor-16")  
**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 (2–6) y slider de **IN GAIN** (-12 a +12 dB).  
- **Bandas B1–B6**: 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 (0–100)  
- ~/.gradio/data/tmp/downvol — volumen duckeado (0–100)  
**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 (0–100)** | Nivel de volumen de la música en reproducción normal. Se guarda en ~/.gradio/data/tmp/upvol |   
| **Volumen duck (0–100)** | 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.  

 

 ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANElEQVR4nO3OQQmAABRAsad4EFMY9fewnUms4E2ELcGWmTmrKwAA/uLeqrU6vp4AAPDa/gDzYgM3ZPdzEgAAAABJRU5ErkJggg==)  
**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)  
 ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANklEQVR4nO3OMQ2AABAAsSPBCj7fFC6wwIgHRiywEZJWQZeZ2ao9AAD+4lyruzq+ngAA8Nr1AOIABebqJIqXAAAAAElFTkSuQmCC)  
**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  
4. **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  
 ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANUlEQVR4nO3OQQmAABRAsSd4tIGdjCS/pwGsYQVvImwJtszMXp0BAPAX91pt1fH1BACA164HhYgEO/4GtLAAAAAASUVORK5CYII=)  
**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.  
 ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANElEQVR4nO3OUQmAABBAsSeYxKTXxlomEBOIFfwTYUuwZWa2ag8AgL841uquzq8nAAC8dj05XgYLDGrT0AAAAABJRU5ErkJggg==)  
**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**.  

 ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANUlEQVR4nO3OQQ2AQBAAsSHhiQMcoWp9ngBsYIEfIWkVdJuZs5oAAPiLe6+O6vp6AgDAa+sBhZgEOcyZTEcAAAAASUVORK5CYII=)  
**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*  *.*  

 ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANUlEQVR4nO3OMQ2AABAAsSPBCUZfDq7YGVDAgAU2QtIq6DIzW7UHAMBfHGt1V+fXEwAAXrseHCgGBJWaMWkAAAAASUVORK5CYII=)  
**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.  
 ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANUlEQVR4nO3OMQ2AABAAsSPBCUZfDq7YGVDAgAU2QtIq6DIzW7UHAMBfHGt1V+fXEwAAXrseHCgGBJWaMWkAAAAASUVORK5CYII=)  
**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 0–55 %, amarillo 55–75 %, rojo 75–100 %. 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  
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANUlEQVR4nO3OYQ1AABSAwY8JIIKoL4Z8Eoiggn9mu0twy8wc1RkAAH9xbdVa7V9PAAB47X4A9DIEIm50tIwAAAAASUVORK5CYII=)  
**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  

![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnEAAAACCAYAAAA3pIp+AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAANUlEQVR4nO3OMQ2AABAAsSNhYEUALhD4K0LxgQU2QtIq6DIzR3UFAMBf3Gu1VefXEwAAXtsfSp4DXi4fyswAAAAASUVORK5CYII=)  
**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*  
