Dispatch460 captures Milford Fire and EMS radio on two channels â 154.340 MHz and 155.130 MHz â and turns each transmission into searchable, mapped, transcribed text within seconds. Here's the full pipeline, from antenna to web page.
A single SDRplay RSPduo software-defined radio captures both frequencies at once using its two independent tuners â CH1 (154.340 MHz) and CH2 (155.130 MHz).
Two recorder processes demodulate the FM signal and use a signal-strength squelch to record only when a transmission is active, saving each to an audio file.
Completed recordings land in a shared queue as audio files with metadata sidecars, decoupling capture from processing so neither step blocks the other.
A single worker drains the queue in chronological order, processing one transmission at a time to avoid overloading the transcription model.
Loud noise bursts (open-squelch static, louder than the voice) are detected and muted before transcription â cleaning the audio users hear and improving accuracy.
Whisper is an open-source speech-recognition model from OpenAI that converts spoken audio into text. Dispatch460 runs a fine-tuned version â trained further on real Milford radio traffic so it accurately recognizes local street names, unit designations, and dispatch terminology a general model would miss. Running it self-hosted, on local hardware rather than a cloud API, keeps audio processing on-premises and avoids per-transcription costs.
Transmissions that are only sounds (horns, tones, Morse ID) or transcription artifacts are filtered out so they don't clutter the feed.
Automated detection flags real dispatches (alert tones plus dispatch keywords), and a correction dictionary fixes known transcription errors in local street names.
Dispatch addresses are geocoded via OpenStreetMap / Nominatim to place each call on the map.
Transcriptions and metadata are stored in a PostgreSQL database (AWS RDS); the audio files are stored in Amazon S3.
A Django application on AWS serves the live feed, channel badges, and map â updating within seconds of each broadcast.