Releases: dsward2/LiveAudioServer
LiveAudioServer v0.1.2
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}— defaultsilencekeeps the historical behavior (zero PCM, optionally TPDF-dithered via--silence-dither). Set totoneto 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_RCVTIMEOat 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
ffmpegpassthrough. - Adds HTTP Basic auth (
--auth-user/--auth-password),--silence-dither, and--keep-alivefor robustness. - Includes an
--auth-password-envfollow-up so credentials don't leak viaps/ 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, port7355, 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)
- Download
LiveAudioServer-v0.1.2-macos-universal.zipbelow. - Double-click to unzip.
- Open
READ-ME-FIRST.txtand 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
LiveAudioServer v0.1.1
LiveAudioServer v0.1.1
The first release with pre-built, signed, and notarized downloads — no need to install Xcode or any package manager to run it.
Highlights
Downloadable binary
LiveAudioServer-v0.1.1-macos-universal.zipis attached to this release.- Universal binary (arm64 + x86_64), signed with an Apple Developer ID and notarized by Apple.
- Download → unzip → double-click
Start LiveAudioServer.command. SeeREAD-ME-FIRST.txtinside the zip for the one-time first-launch prompt.
swift build now works with zero package-manager dependencies
libmp3lameis bundled as a universal static XCFramework atFrameworks/Mp3Lame.xcframeworkand consumed by SwiftPM as a binary target.- No more
brew install lame(orport install lame) needed for a fresh clone —swift buildworks out of the box. - Maintainers can reproduce the framework from upstream LAME 3.100 source with
scripts/build-mp3lame-xcframework.sh.
New release pipeline
scripts/release.shautomates universal build → code-sign with hardened runtime → notarize vianotarytool→ package the final zip with the launcher, README, license, and third-party-license disclosure.
Documentation
- New "Install — pre-built binary (recommended for non-developers)" section in the README, with a Gqrx → LiveAudioServer → iPhone walk-through.
- New
THIRD-PARTY-LICENSES.mddocumenting LGPL-2.1 compliance for the bundled libmp3lame.
Removed
- The
MacPorts/Portfile and packaging notes. The MacPorts submission has been withdrawn; the bundled XCFramework makes a systemlameport unnecessary.
Known issues
- The
Start LiveAudioServer.commandscript in the release zip is a plain shell script, which macOS doesn't let you notarize. The first time you launch it from a downloaded zip you'll see "Apple could not verify '<name>' is free of malware…". This is a one-time prompt —READ-ME-FIRST.txtand the README walk through how to clear it (right-click → Open on macOS 13–14, or System Settings → Privacy & Security → Open Anyway on macOS 15+). A future release will replace the loose launcher with a properly notarized.appbundle.
Install
Pre-built (recommended for non-developers)
- Download
LiveAudioServer-v0.1.1-macos-universal.zipbelow. - Double-click to unzip.
- Open
READ-ME-FIRST.txtand 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
Checksums
LiveAudioServer-v0.1.1-macos-universal.zip— SHA256: fac97af57874d12984d3d428f85429f49d04f213aaa410ef0e05c9c9cec01e29)
LiveAudioServer 0.1.0
First tagged release.
- Live PCM → MP3 + AAC streaming over HTTP (stdin / UDP / TCP input)
- Optional HLS playlist + ADTS AAC segments
- Native HTTPS via PKCS#12 (
--tls-port) - HTTP Basic auth, IP allow-list, Bonjour advertising
- Runtime recorder control + now-playing JSON endpoint
- Homebrew formula in
Formula/, MacPorts portfile inMacPorts/
See README for full usage.