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.

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.
