Play live FM radio in Minecraft using an RTL-SDR dongle connected to your server!
This mod adds a Radio Jukebox block that streams real FM radio audio from an RTL-SDR software-defined radio. Players nearby can hear the radio, with volume that decreases as you walk away.
- Live FM Radio: Listen to real radio stations in Minecraft
- Positional Audio: Volume decreases with distance from the radio
- Multiple Stations: Configure any number of FM stations
- Simple UI: Easy-to-use interface for controlling the radio
- Server-Controlled: Only the server needs RTL-SDR hardware
- Minecraft server with NeoForge (ATM10 compatible)
- RTL-SDR dongle (RTL2832U-based)
- Radio Service running (Python-based)
- Minecraft client with NeoForge (ATM10 compatible)
- This mod installed
The Radio Service is a Python application that controls the RTL-SDR and streams audio.
cd radio-service
docker-compose up -dSee radio-service/README.md for detailed instructions.
- Download
sdrradio-1.0.0.jarfrom releases - Place in your server's
mods/folder - Restart the server
- Open CurseForge Launcher
- Go to your ATM10 profile
- Click the three dots → "Open Folder"
- Place
sdrradio-1.0.0.jarin themods/folder - Launch the game
Edit config/sdrradio-server.toml on your server:
[radio_service]
base_url = "http://localhost:8765"
[stations]
list = [
"kzoo:KZOO FM:88.5",
"rock101:Rock 101:101.1",
"jazz97:Smooth Jazz:97.3"
]Format: id:name:frequency_mhz
-
Craft a Radio Jukebox:
[ Iron ] [Redstone] [ Iron ] [Redstone] [Jukebox] [Redstone] [ Iron ] [Redstone] [ Iron ] -
Place it in your world
-
Right-click to open the UI
-
Select a station and turn it on!
┌─────────────────────────────────────────────────────────────────┐
│ SERVER MACHINE │
│ │
│ ┌──────────────┐ ┌─────────────────────────────────────┐ │
│ │ RTL-SDR │────▶│ Radio Service (Python) │ │
│ │ Dongle │ │ rtl_fm → ffmpeg → Opus/Ogg Stream │ │
│ └──────────────┘ └─────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Minecraft Server (NeoForge) │ │
│ │ Tracks players, sends stream URLs │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
Network
│
┌─────────────────────────────────────────────────────────────────┐
│ CLIENT MACHINE │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Minecraft Client (NeoForge) │ │
│ │ Receives stream URL → Decodes Opus → OpenAL playback │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
| Option | Default | Description |
|---|---|---|
radio_service.base_url |
http://localhost:8765 |
Radio service URL |
radio_service.timeout_ms |
5000 |
API timeout |
gameplay.default_radius |
24 |
Default audible radius (blocks) |
gameplay.max_radius |
64 |
Maximum allowed radius |
stations.list |
See above | Station definitions |
| Option | Default | Description |
|---|---|---|
audio.master_volume |
1.0 |
Volume multiplier (0.0-1.0) |
audio.buffer_ms |
1500 |
Audio buffer size |
audio.muted |
false |
Mute all radio audio |
- Check if the service is running:
curl http://localhost:8765/health - Verify RTL-SDR is connected:
rtl_test -t - Check service logs:
docker-compose logs -for check terminal output
- Check client is not muted in config
- Verify you're within range of the radio block
- Check server logs for tune errors
- Test stream directly:
ffplay http://server:8765/stream
- Try a different/stronger station
- Check antenna connection
- Move RTL-SDR away from computer for less interference
Ensure both server and client have the same mod version and are running compatible NeoForge versions (21.1.x for ATM10).
- Single frequency at a time: All radio jukeboxes play the same station (last one selected)
- Mono audio only: Stereo FM is not decoded
- ~1-3 second latency: Due to buffering for smooth playback
cd radio-service
python -m venv venv
source venv/bin/activate # or venv\Scripts\activate on Windows
pip install -r requirements.txt
python src/radio_service.pyRequires JDK 21.
cd mod
./gradlew buildOutput JAR will be in mod/build/libs/.
MIT License - See LICENSE
- NeoForge team for the modding API
- RTL-SDR community for the software-defined radio tools
- Concentus for pure Java Opus decoding
- JOgg for Ogg container parsing