A terminal-based internet radio player built with FFmpeg and ncurses. Stream live audio from internet radio stations with metadata display, FFT spectrum visualization, and optional MusicBrainz integration. 100% AI-Slop
- Stream internet radio stations using FFmpeg libraries
- Terminal UI with ncurses (color support)
- Real-time FFT spectrum analyzer visualization
- ICY metadata support (StreamTitle, artist/title)
- Optional MusicBrainz integration for enhanced track metadata
- Volume control with visual bar
- Song history tracking
- Keyboard-driven navigation
- CMake 3.24+
- FFmpeg development libraries:
- libavformat
- libavcodec
- libavutil
- libswresample
- ncursesw
# Release build (optimized, no debug output)
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$HOME/.local"
cmake --build build/release
# Or to install in {PREFIX}/bin
cmake --build build/release --target install
# Debug build (with status output)
cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug
cmake --build build/debugOn x86/x86_64 CPUs, CMake enables SSE2 automatically for you:
- Compiler flag:
-msse2 - Preprocessor define:
WEBRADIO_USE_SSE2=1
No extra manual flag is required in the build command.
rm -rf build && cmake -B build -S . -DCMAKE_BUILD_TYPE=Release && cmake --build buildCreate a stations.json file:
{
"Jazz FM": "https://stream.example.com/jazz",
"Classical": "https://stream.example.com/classical",
"Rock Radio": "https://stream.example.com/rock"
}# Run with interactive station selection
cd build && echo "1" | ./webradio
# Run with specific station file
cd build && ./webradio ../stations.jsonWhen no station file argument is provided, WebRadio searches for stations.json in this order:
- Current working directory (
./stations.json) - Same directory as the
webradioexecutable - User config directory:
$XDG_CONFIG_HOME/webradio/stations.json(ifXDG_CONFIG_HOMEis set)- otherwise
~/.config/webradio/stations.json
If a station file path is passed as an argument, that path is used directly:
./webradio /path/to/stations.json| Key | Action |
|---|---|
Up/Down |
Navigate stations |
Enter |
Play selected station |
Space |
Stop playback |
+/- or [/] |
Volume up/down |
q |
Quit |
MIT License
