Skip to content

LiveAudioServer v0.1.2

Latest

Choose a tag to compare

@dsward2 dsward2 released this 01 Jun 20:45
· 1 commit to main since this release

LiveAudioServer v0.1.2

This release adds audible "dead-air" filler for live UDP / TCP feeds. When the upstream source (Gqrx, an SDR daemon, a remote producer, etc.) stops sending packets, listeners can now hear a configurable sine wave instead of dead silence, until the input resumes.

What's new

Sine-tone filler (opt-in)

Two new flags let you replace the silence-fill window with an audible test tone:

.build/release/LiveAudioServer \
    --udp-input-port 7355 \
    --filler-mode tone \
    --filler-tone-hz 1000 \
    --keep-alive
  • --filler-mode {silence|tone} — default silence keeps the historical behavior (zero PCM, optionally TPDF-dithered via --silence-dither). Set to tone to emit a continuous sine wave at -20 dBFS.
  • --filler-tone-hz <hz> — tone frequency (default 1000 Hz, the broadcast reference). Below the Nyquist frequency of the configured sample rate.
  • The sine generator carries phase across chunks, so there are no audible clicks at chunk boundaries.

UDP and TCP gap detection (new behavior)

Previously the filler only triggered on stdin EOF + --keep-alive. v0.1.2 adds the same logic to live UDP and TCP inputs:

  • The UDP/TCP recv loops now use SO_RCVTIMEO at chunk-period cadence.
  • After --filler-after-ms (default 500 ms) of consecutive packet absence, the reader switches to emitting filler chunks at the audio sample rate so HTTP listeners stay connected and encoders keep running.
  • When real packets resume, filler ends immediately and stale pre-gap data is discarded to avoid a time-warp on resume.
  • Brief network jitter (under the threshold) passes through unaltered.

Refined Gqrx UDP example in the README

The Gqrx + RTL-SDR walk-through has been rewritten to match the actual current best practice:

  • LiveAudioServer reads Gqrx's UDP output directly — no more ffmpeg passthrough.
  • Adds HTTP Basic auth (--auth-user / --auth-password), --silence-dither, and --keep-alive for robustness.
  • Includes an --auth-password-env follow-up so credentials don't leak via ps / shell history.
  • Notes the iPhone Safari credential dialog (saved to the iCloud Keychain after first use).
  • New step-by-step Gqrx UI walk-through (Audio → UDP button → host localhost, port 7355, Stereo ✓).

Backwards compatibility

  • Defaults unchanged. Running v0.1.2 with the same flags as v0.1.1 produces the same output. The filler is opt-in via --filler-mode tone.
  • UDP/TCP gap detection runs in silence mode too, but only emits zero bytes (the same as --silence-dither's dithered silence when paired). The visible effect: encoders see a continuous stream during input gaps instead of stalling.

Install

Pre-built (recommended for non-developers)

  1. Download LiveAudioServer-v0.1.2-macos-universal.zip below.
  2. Double-click to unzip.
  3. Open READ-ME-FIRST.txt and follow the one-time first-launch steps.

From source

git clone https://github.com/dsward2/LiveAudioServer.git
cd LiveAudioServer
swift build -c release

Homebrew tap

brew install dsward2/tap/liveaudioserver

(Update the tap's formula url to v0.1.2 and recompute the source-tarball sha256 before publishing.)

Checksums

  • LiveAudioServer-v0.1.2-macos-universal.zip — SHA256: c5b000fd7965742bab0ea33276b310ce373b1709f5730ef209bdef8f53ccfd2c