Live-broadcast audio quality control
Live-broadcast audio quality control for a media operations team · Built from scratch, solo, design to deployment
Updated
Before
Staff checked commentary audio by hand, so a missed fault could reach viewers.
After
1 hour
of readings kept on site through a network outage, then re-sent once; loudness measured to the EBU standard.
- 1Software:Venue
Sends commentary audio on many channels.
- 2Software:Site agent
Measures every channel to EBU loudness standards.
- 3Software:Site agent
Saves readings on disk and re-sends them after a network drop.
- 4Software:Cloud service
Raises an alert once a fault lasts long enough.
- 5Person:Operator
Sees alerts and incidents in the web console.
Always on
- The cloud ignores duplicate readings, so a replay never counts twice.
Problem
Staff monitored commentary audio by hand. A missed fault risked viewer complaints, regulatory fines and reputation damage.
Diagnosis
Alerts help only when complete and quiet. Network drops would lose readings, and flapping detectors would flood operators with noise.
Options I weighed
The link to the cloud drops. How is no reading lost?
Chosen
Save readings on disk at the site and re-send them; the cloud ignores duplicates
An hour of readings and a day of events survive an outage, and a replay never counts twice. Cost: more moving parts on the site machine.
Rejected
Keep readings in memory and drop the oldest when full
Loses data during an outage, exactly when it matters.
A detector flips on and off. When does an alert fire?
Chosen
Only after a fault lasts a minimum time, then a cooldown
One unstable channel cannot flood operators.
Rejected
Alert on every flip
One unstable channel buries operators in noise.
Solution
A site agent measures each channel and sends readings to a cloud service. Operators get a web console with projects, thresholds and alerts.
- Site agent
- Python
- EBU R128 loudness
- ONNX Runtime
- PyTorch
- SpeechBrain
- Windows build
- Cloud API
- FastAPI
- SQLAlchemy
- Alembic
- PDF reports
- Data
- TimescaleDB
- PostgreSQL 17
- Operator console
- Next.js
- React
- TanStack Query
- WebSockets
- uPlot
- Zustand
- Quality and delivery
- Docker Compose
- GitHub Actions
- uv
- Ruff
- mypy
- pytest
- Playwright
- axe
Related services
Figures: Agent buffer settings