Full Changelog: v0.1.8...v0.1.8-sdr
Feature Release: SDR Squelch
Run ./macintercom --sdr. Mutes the Bluetooth microphone return path for SDR inputs (e.g., routed via Soundflower), supporting two squelch methods:
- WebRTC VAD & Passive Scanner (Default): Automatically detects human voice activity in the noise floor to open the gate. While running, a passive, zero-latency scanner continuously evaluates the audio and prints detected sub-audible CTCSS tones to the terminal.
- Interactive Hotkey: Pressing Return instantly locks your squelch to the last detected tone (disabling VAD). Pressing Return again while a new tone is detected hot-swaps the lock to the new tone. Pressing Esc releases the lock entirely.
- CTCSS Tone Squelch: Pass
-tone <frequency>(e.g.,./macintercom --sdr -tone 100.0) to disable VAD and the scanner, and enforce strict, non-interactive tone squelch startup parameters.
Notes on Audio Quality
-
Universal 48 kHz Sample Rate: To ensure the cleanest audio pipeline and lowest latency, set all active input and output devices (USB microphones, Line-In, Line-Out, and virtual routing tools like Soundflower) to a fixed 48 kHz sample rate in macOS Audio MIDI Setup.
-
Bluetooth and SDR Mode: When running
macintercomin standard intercom mode, macOS forces Bluetooth headsets into a lower-quality telephony profile (HFP) to use the microphone. However, because--sdrmode uses a virtual system input instead of your Bluetooth mic, you can route the output to any Bluetooth speaker or headphone and it will remain in crisp, full-fidelity A2DP (e.g., 32-bit/48kHz).
Installation
MacIntercom is now distributed as a pre-compiled, ad-hoc signed universal binary.
Because it is signed ad-hoc (rather than using an official Apple Developer account), macOS will block its initial execution with a security prompt.
To run the binary immediately:
- Download the
macintercom-macos-universal-...zipfile from the latest Release and extract it. - Open your terminal and navigate to the folder containing the extracted file.
- Remove the macOS quarantine attribute by running:
xattr -d com.apple.quarantine ./macintercom - Run the application normally:
./macintercom
Verification
Verify the checksum:
shasum -a 256 -c SHA256SUMS
Verify the GPG signature:
gpg --verify macintercom-macos-universal-v0.1.8-sdr.zip.asc macintercom-macos-universal-v0.1.8-sdr.zip
One thing you may want to try in Media-aware mode
In release assets, is the result of
ffmpeg -f lavfi -stream_loop -1 -i anullsrc=r=8000:cl=mono -t 36000 -c:a aac -b:a 12k silence_10h.m4a
If you set this file to play on loop in a media player, when you press the Mac's global hotkey for play/pause, or the Bluetooth speaker's play/pause button, you'll effectively get Push-To-Talk/Push-To-Mute from both ends. However, other media players/browser media will likely steal Now Playing focus; you'll have to open the silent loop's media player & toggle play/pause/play or pause/play, to restore it as the active Now Playing app for MacIntercom to return to PTT/PTM.
Why generate a silent track 10 hours long instead of 5 seconds?
Some media players briefly transition through a paused/stopped state when looping a single file. Media-aware mode interprets those transitions as legitimate playback changes. A very long silent file avoids repeated loop events while remaining small because silence compresses extremely well.