🎧 What You Need

HardwareSoftwareRequirements

Use an RTL-SDR (Blog V3/V4 recommended) and nrsc5 to listen to HD Radio with a single Terminal/PowerShell command. No heavyweight apps needed!

Hardware Requirements

  • RTL-SDR dongle (RTL2832U + R820T/2)
  • RTL-SDR Blog V4 works great
  • FM/HD antenna (window placement preferred)
  • USB port on your computer

Software Components

  • nrsc5 - HD Radio decoder
  • SoX (play command) for real-time audio
  • macOS Ventura+ or Windows 11

Station Information

You need to know:

  • FM frequency (e.g., 106.1 MHz)
  • HD program number (HD1=1, HD2=2, HD3=3)
  • Example: 106.1e6 1

🍎 macOS Ventura & Later Setup

macOSVenturaTahoeApple SiliconIntel

Works on Apple Silicon and Intel Macs. The smoothest audio path is piping nrsc5 into SoX's play command.

Step 1: Install SoX (Audio Player)

Install Homebrew (skip if you already have it):

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Install SoX:

brew install sox

Note: macOS Ventura/Tahoe - microphone/speaker permissions aren't needed for the play command, but ensure your default output device is correct in System Settings → Sound.

Step 2: Install or Place nrsc5

If you already have nrsc5 in your PATH, you're set. Otherwise, place the binary somewhere like /usr/local/bin/ or /opt/homebrew/bin/ (Apple Silicon).

Advanced: You can build from source using CMake + libusb + rtl-sdr.

Step 3: Live Playback (Recommended)

nrsc5 -p -1 -g 25.0 -t wav 106.1e6 1 | play -t wav -

Command breakdown:

  • -p -1 → auto PPM correction
  • -g 25.0 → tuner gain (try 15–35)
  • 106.1e6 → frequency in Hz notation
  • 1 → HD1 (use 2 for HD2, 3 for HD3, etc.)

Alternative: Record Then Play

nrsc5 -p -1 -g 25.0 -o out.wav 88.5e6 2
afplay out.wav

⚠️ If the stick is "busy":
Close other SDR apps, or run:
pkill -f "sdrpp|rtl_tcp|rtl_fm|CubicSDR"

🪟 Windows 11 PowerShell Setup

Windows 11PowerShellTerminal

Two Terminal-only paths. Option A is simplest if you can use a prebuilt nrsc5.exe. Option B builds from source via MSYS2.

Option A: Prebuilt nrsc5 + SoX (Easiest)

Step 1: Install Scoop & Git (user-space, clean):

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex
scoop install git

Step 2: Install SoX:

scoop install sox

Step 3: Place nrsc5.exe in your PATH

Place nrsc5.exe in a folder (e.g., C:\nrsc5\) and add it to PATH:

setx PATH "$($env:PATH);C:\nrsc5"

Step 4: Live Playback:

nrsc5 -p -1 -g 28.0 -t wav 106.1e6 1 | play -t wav -

⚠️ Driver Issue?
Use Zadig to switch the RTL-SDR to WinUSB if nrsc5 can't open the device.

Option B: Build via MSYS2 (Advanced)

Step 1: Install MSYS2, open "MSYS2 MinGW x64", then run:

pacman -Syu --noconfirm
pacman -S --noconfirm mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake mingw-w64-x86_64-pkgconf mingw-w64-x86_64-libusb mingw-w64-x86_64-rtl-sdr git

Step 2: Build nrsc5:

git clone https://github.com/theori-io/nrsc5.git
cd nrsc5
mkdir build && cd build
cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --config Release

Step 3: Run in PowerShell:

"C:\msys64\mingw64\bin\nrsc5.exe" -p -1 -g 28.0 -t wav 106.1e6 1 | play -t wav -

📖 Usage Cheatsheet

Quick ReferenceCommands

Tune & Play Live

nrsc5 -p -1 -g 25.0 -t wav <FREQ_HZ> <HD_PROGRAM> | play -t wav -

Example: 106.1e6 1 → 106.1 MHz, HD1

Record to WAV

nrsc5 -p -1 -g 25.0 -o out.wav 88.5e6 2

Saves to out.wav file

Dump Album Art/AAS

mkdir -p aas
nrsc5 -p -1 --dump-aas-files aas 106.1e6 1

Saves metadata and artwork to aas folder

Good Starting Gains

The -g gain parameter range: 15.0 to 35.0

  • Too high = distortion
  • Too low = dropouts
  • Start with 25.0 and adjust

Bay Area Example Stations

  • KQED 88.5 MHz: 88.5e6 1 (HD1) or 88.5e6 2 (HD2 - BBC)
  • KMEL 106.1 MHz: 106.1e6 1 (HD1) or 106.1e6 2 (HD2)

🔧 Troubleshooting

Common IssuesSolutions

No Audio / Choppy Sound

  • Use SoX live pipe: ... | play -t wav -
  • Close other SDR apps (they can lock the stick)
  • Try different -g gain values
  • Move the antenna to a better location
  • Aim for MER ≥ 10–13 dB and BER < 0.005

Device Won't Open

macOS:

pkill -f "sdrpp|rtl_tcp|rtl_fm|CubicSDR"

Windows:

  • Swap driver to WinUSB via Zadig
  • Unplug/re-plug the RTL-SDR after closing apps

Strong Analog, Weak HD

HD sidebands are often weaker than the main analog FM signal.

  • Try a better FM antenna
  • Position antenna near a window
  • Use an FM band-pass filter or attenuator to reduce interference from strong local stations

Signal Quality Metrics

✓ Rule of Thumb:
If you consistently see MER ≥ 10–13 dB and BER < 0.005, audio should be clean and stable.

❓ Frequently Asked Questions

FAQ

Does this require admin privileges?

No on macOS; on Windows, Scoop is user-space. Zadig needs admin once to set the WinUSB driver.

Why SoX instead of afplay?

SoX's play command handles the realtime WAV stream better and avoids the pipe quirks with afplay.

What about waterfalls/spectrum displays?

This guide focuses on audio playback. For waterfall displays, run a parallel app (e.g., SDR++) for visualizing RF while letting nrsc5 handle the audio decoding.

Which RTL-SDR should I buy?

The RTL-SDR Blog V4 is the latest version with improved sensitivity, direct sampling, and bias tee. The V3 is also excellent and widely available. Both work great for HD Radio.

Can I listen to multiple HD channels at once?

Each instance of nrsc5 can decode one HD Radio program at a time. To listen to multiple channels simultaneously, you would need to run multiple instances with separate RTL-SDR dongles.