Vai al contenuto
Home » Blog » OnAir Timer per speaker radiofonici

OnAir Timer per speaker radiofonici

On Air Timer

Mi è capitato spesso di vedere speaker in studio che mentre parlano al microfono perdono la cognizione del tempo trascorso. Soprattutto nelle radio locali, dove non sempre c’è un regista dietro la console, avere un timer ON AIR ben visibile è una di quelle cose che sembrano banali ma fanno la differenza tra una conduzione professionale e una improvvisata.

Le soluzioni disponibili sul mercato sono molto costose, così ho pensato di svilupparne una software.

OnAir Stopwatch è un timer che parte e si ferma automaticamente quando si apre o si chiude il microfono. Niente bottoni da premere, niente distrazioni: lo speaker vede il tempo che passa e sa esattamente da quanto è in onda.

OnAir Stopwatch screenshot

Come funziona

Ho voluto renderlo adattabile a vari setup, quindi supporta tre metodi di rilevamento dello stato del microfono:

TCP Server

Il metodo più semplice: il timer resta in ascolto su una porta TCP e può essere pilotato da qualsiasi sistema in grado di mandare i comandi START, STOP e RESET.

nc 192.168.1.50 5000
START   → timer parte
STOP    → timer si ferma
RESET   → riparte da zero

Utile per integrazioni rapide con automazioni già esistenti.

Axia LWCP (GPIO)

Sono un grande amante dei sistemi Axia, quindi non poteva mancare il supporto tramite protocollo LWCP. Il programma si collega all’xNode, monitora lo stato del GPIO e fa partire il timer quando il microfono viene aperto (stato LOW) e lo ferma quando viene chiuso (stato HIGH).

Funziona senza nessun hardware aggiuntivo: se hai già una console Axia in studio, sei a posto.

MOXA ioLogik

Alcuni studi usano moduli I/O remoti MOXA per gestire i segnali di controllo. In questo caso il timer interroga l’API HTTP del MOXA ogni secondo e legge lo stato dell’ingresso digitale: 1 = microfono aperto → via col timer, 0 = microfono chiuso → stop.

Questo è il modo che ho scelto per integrarmi con vecchi mixer Studer OnAir.

L’interfaccia

Volevo una cosa essenziale, che si vedesse bene anche da lontano. Schermo nero, timer rosso enorme che si ridimensiona automaticamente, possibilità di bloccare la finestra sempre in primo piano. Niente fronzoli.

Un occhio e capisci subito se sei in onda e da quanto tempo.

Il codice

Tutto gira su Python con Tkinter, niente dipendenze pesanti tranne requests per il polling MOXA. Un thread in background (TCP, Axia oppure MOXA in base alla configurazione) e la GUI che rimane fluida indipendentemente da cosa succede dietro.

import socket, time, threading, configparser, tkinter, requests, json

config = configparser.ConfigParser()
config.read("config.ini")

start_time = 0
elapsed_time = 0
timer_running = False

def format_time(seconds):
    m = int((seconds % 3600) // 60)
    s = int(seconds % 60)
    return f"{m:02}:{s:02}"

def update_gui():
    if timer_running:
        current_time = time.time()
        elapsed = current_time - start_time
    else:
        elapsed = elapsed_time
    timer_label.config(text=format_time(elapsed))
    window.after(1000, update_gui)

La configurazione sta tutta in un file config.ini da posizionare nella stessa cartella del programma. Si sceglie la modalità di ingresso (1 = TCP, 2 = MOXA, 3 = Axia), l’IP del dispositivo, la porta, e via.

[DEFAULT]
MicOnMode = 1
MicOnPort = 5000
GPIOport = 1
xNodeIP = 192.168.1.100
moxaip = 192.168.1.200
FullScreen = True
TopMost = True

Casi d’uso

In radio lo uso per:

  • Speaker in auto conduzione – quando il conduttore si apre il microfono da solo, vede il timer e sa gestire i tempi senza impazzire
  • Produzione podcast – per tenere traccia della durata effettiva della registrazione
  • Monitoraggio studi – collegato a un display in regia per vedere chi è in onda e da quanto

Link

Il progetto è su GitHub (MIT), libero di essere usato e modificato:

github.com/mishcazzulani/onair-stopwatch

Se avete suggerimenti, varianti, o volete integrare un altro metodo di rilevamento, fate un fischio. O meglio, una PR.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *