Skip to content
petrjPublic

About

FM/DAB+ radio

Resources

Stars

9 stars

Watchers

2 watching

Forks

Latest commit

 

History

942 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RadI0

RadI0

A .NET 10 Software-Defined Radio (SDR) receiver for DAB+ and FM broadcasts

RadI0 is a cross-platform software-defined radio receiver for DAB+ and FM radio broadcasts, built with .NET 10. It uses an RTL-SDR dongle to capture and demodulate radio signals, providing a terminal-based interface for tuning, playing, recording, and streaming audio.

Table of Contents

Download

Linux (arm) Linux (arm64, Raspberry Pi) Linux (x64) Windows (arm64) Windows (x64) Windows (x86)
Linux ARM Linux ARM64 RaspberryPi Linux x64 Windows ARM64 Windows x64 Windows x86

Features

DAB+ Radio

  • OFDM Demodulator (Fast Fourier Transform)
  • Viterbi convolution decoding
  • Reed–Solomon forward error correction
  • FIC channel data parsing
  • ADTS stream demodulation
  • AAC recording
  • PCM recording (using faad2 for converting AAC => PCM)
  • UDP streaming support (ADTS aac for DAB+)
  • Service number-based tuning
  • PAD dynamic label parsing
  • MOT slideshow (images are saved to user's folder pictures/RadI0)

FM Radio

  • Mono/Stereo FM demodulation
  • PCM WAVE recording
  • RDS RadioText parsing

User Interface & Platform

  • Terminal-based GUI (Terminal.GUI)
  • Cross-platform: Linux & Windows support
  • Audio playback via libVLC

Requirements

Hardware

  • RTL-SDR Dongle: RTL2832U-based USB receiver (e.g., RTL-SDR Blog V3, NooElec NESDR, ASTROMETA USB Dongle)
  • Antenna: Standard telescopic or dipole antenna (suitable for 88-108 MHz FM and 174-240 MHz DAB+)
  • USB Port: For connecting the RTL-SDR dongle

Software

  • .NET Runtime: .NET 10 or later
  • Operating System: Linux (Ubuntu, Debian, etc.) or Windows
  • External Dependencies:
    • rtl-sdr - RTL-SDR driver library
    • faad2 - AAC audio decoder

Architecture Scheme

Remote Access via rtl_tcp

RadI0 supports remote signal processing by connecting to an rtl_tcp instance. This allows you to set up your RTL-SDR dongle and antenna in a location with optimal reception and run the RadI0 receiver interface on a different machine anywhere in the world.

[!WARNING]
High Bandwidth Required: Using this feature requires a very stable and high-speed network connection. Because raw I/Q samples are transferred over the network, the data throughput for DAB+ is approximately 30 Mbit/s. Ensure your internet bandwidth can support this sustained rate to avoid signal stuttering or synchronization loss.
  1. Start rtl_tcp on the remote machine (Linux or Windows with an RTL-SDR USB dongle connected and a good signal antenna attached):
   rtl_tcp -a 0.0.0.0 -p 1234
  1. Go to Menu → Connect to RTL TCP and enter the IP address of the remote machine.

Installation

From Release Package

  • Linux

    sudo apt-get install libfaad2 rtl-sdr libasound2 libasound2-dev libvlc-dev vlc libvlc-bin libvlc-dev
    • extract release archive package (tar.xz)
  • Windows

    • install RTL2832U driver (Zadig)
    • download rtl-sdr windows binaries (https://ftp.osmocom.org/binaries/windows/rtl-sdr/)
    • download (or build from source) libfaad2.dll
    • Modify PATH varible (or copy libfaad2.dll and rtl-sdr to suitable folder) to make the libraries visible ( I'm using this Windows folder c:\users\petrj\\.dotnet\Tools with these files: libfaad2.dll libfaad2_dll.dll librtlsdr.dll libusb-1.0.dll libwinpthread-1.dll rtl_tcp.exe)
    • extract release archive package (7z)

Usage

Console Commands

DAB+

Tune 8D frequency

./RadI0 -dab -f 8D

Tune 8C frequency and play radio corresponding to service number 1175:

./RadI0 -dab -f 8C -sn "1175"

Tune 8C frequency, play radio corresponding to service number 1175 and save audio to PCM wave:

./RadI0 -dab -f 8C -sn "1175" -wave /tmp/radio.wave

Stream DAB audio to UDP:

./RadI0 -f 8C -sn 1175 -udp 127.0.0.1:8020

Note: The stream (ADTS aac format) can be played by VLC or mplayer:

cvlc udp://@:8020 :demux=aac
mplayer -nocache -demuxer aac udp://127.0.0.1:8020

UDP JSON Status Streaming

RadI0 broadcasts real-time status information as JSON over UDP, allowing other applications to monitor and display radio information (frequency, station name, DLS/RDS data, etc.) independently.

To enable UDP status streaming, add the -stat IP:Port command line option:

./RadI0 -f 8C -sn 1175 -stat 127.0.0.1:5000

Example JSON status message:

{
  "status": "Connected",
  "name": "BBC Radio 1",
  "freq": "11A",
  "dynamicLabel": "Beatles - Yestarday"
}

Short PowerShell receiver example:

$udp = New-Object System.Net.Sockets.UdpClient(5000)
$remote = New-Object System.Net.IPEndPoint([System.Net.IPAddress]::Any,0)
$data = $udp.Receive([ref]$remote)
$text = [System.Text.Encoding]::UTF8.GetString($data)
$json = ConvertFrom-Json $text
Write-Host "Status: $($json.status) Frequency: $($json.freq) Station: $($json.name)"

This feature allows you to build custom display applications, dashboards, and monitoring tools that consume this data. A complete example of consuming this data is available in the PowerShell display example script, which listens on UDP port 5000 and displays the radio information on a 2-line customer display.

Export DAB audio to AAC file:

./RadI0 -f 7C -sn 3889 -aac MyDABRadioRecord.aac

FM

Tune and play 104 MHz

./RadI0 -fm -f "104 MHz"

Export FM audio to WAVE file:

./RadI0 -fm -if FM.raw -wave MyFMRadioRecord.wave

Build & Install from Source

NuGet packages used by RadI0

RadI0 builds on several public library packages from this repository. These packages are publicly available and can be reused in other .NET projects for RTL-SDR hardware access, audio playback, FM demodulation, DAB+ decoding, and shared common functionality.

  • Provides low-level RTL-SDR driver support, USB dongle control, and device state handling.
  • Provides shared DSP utilities, audio data structures, thread worker helpers, and common event types.
  • Provides audio playback and buffering abstractions for different platforms, plus AAC decoding support.
  • Provides FM demodulation and stereo decoding.
  • Provides DAB+ signal processing, ensemble and service discovery, AAC frame extraction, and DAB service handling.
  • Powershell module helping build and deploy RadI0

GitHub Packages repository

  1. Create a Personal Access Token on GitHub

  2. Add the NuGet source:

dotnet nuget add source \
  --username YOUR_GITHUB_USERNAME \
  --password YOUR_PERSONAL_ACCESS_TOKEN \
  --store-password-in-clear-text \
  --name github \
  "https://nuget.pkg.github.com/petrj/index.json"

Manual build

dotnet restore
dotnet publish -c Release -r linux-x64
dotnet publish -c Release -r linux-arm64
dotnet publish -c Release -r linux-arm
dotnet publish -c Release -r win-x64
dotnet publish -c Release -r win-x86
dotnet publish -c Release -r win-arm64

Powershell build

Linux

Ask user:

pwsh ./Clear.ps1

Select runtime:

pwsh ./MakeRelease.ps1
Available Runtimes:
1) linux-x64
2) linux-arm64
3) linux-arm
4) win-x64
5) win-x86
6) win-arm64
Select Runtime [default: 1]:

Specific runtime:

pwsh ./MakeRelease.ps1 -Runtime linux-x64

All available runtimes:

pwsh ./MakeRelease.ps1 -Clear -AllRuntimes

Windows

./MakeRelease.ps1 -Clear -AllRuntimes

Screenshots

Main Interface with Station List

Tuning and Statistics View

Spectrum Analyzer

Menu

Equalizer

Android Support via DVBTTelevizor

NuGet packages used by RadI0 are used in DVBTTelevizor. Through this actively developed application, you can also listen to digital radio directly on Android devices.

License

GNU GPL v2. See the LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit issues or pull requests to improve RadI0.

RadI0

Related Resources

About

FM/DAB+ radio

Resources

Stars

9 stars

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages