Skip to content

MacIntercom v0.1.8-sdr

Latest

Choose a tag to compare

@github-actions github-actions released this 30 Jul 19:03
v0.1.8-sdr
c54dd07

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 macintercom in standard intercom mode, macOS forces Bluetooth headsets into a lower-quality telephony profile (HFP) to use the microphone. However, because --sdr mode 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:

  1. Download the macintercom-macos-universal-...zip file from the latest Release and extract it.
  2. Open your terminal and navigate to the folder containing the extracted file.
  3. Remove the macOS quarantine attribute by running:
    xattr -d com.apple.quarantine ./macintercom
    
  4. 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.