wavestreamer is a lightweight music playback system written in Go, designed to run continuously on a Raspberry Pi.
It is the spiritual successor to py-radio, rewritten from scratch for better performance, maintainability, and flexibility.
A binary for AArch64 architecture (Raspberry Pi) is build by a GitHub Actions workflow.
- 🎵 Plays music from a local library (any format ffmpeg can handle)
- 🔊 Dynamically adjusts volume to keep audio levels consistent (can be disabled)
- 🌐 Optional web app to control playback (skip, pause, repeat, schedule)
- 🕒 Plays hourly news (currently supports Tagesschau in 100 Sekunden)
- 🧠 Simple, reliable, and built for 24/7 use on low-powered devices
We assume the 64bit version of Raspberry Pi OS. Setting up the service is optional, it just automatically starts the program after the Pi boots.
-
For wavestreamer to run on a Raspberry Pi we need to install the following dependencies:
sudo apt update sudo apt install libportaudio2 ffmpeg screen
-
Grab the latest build from the latest GitHub Actions workflow run
- Workflow runs: https://github.com/tim-we/wavestreamer/actions/workflows/build-rpi.yml
- Download
wavestreamer-arm64artifact - Extract archive
- Copy
wavestreamerexecutable to the home folder (e.g./home/pi)
-
(Optional) Copy files from
pi-files- Copy
start-radio.shto the home folder (e.g./home/pi) - Copy
radio-serviceto/etc/systemd/system/radio.serviceand update the paths inside
- Copy
-
(Optional) Setup service:
sudo systemctl daemon-reexecsudo systemctl daemon-reloadsudo systemctl enable radio.servicesudo systemctl start radio.service
You can access the running program on the Pi with screen -R radio.
To build this program yourself you need go (check the version in go.mod) and node.js (check the version in webapp/package.json#engines.node).
Besides the dependencies that are also required for the Pi you need to install
sudo apt install portaudio19-devAfter that:
- Check out this repo locally.
- Change into the
webappdirectory (cd webapp). - Run
npm install(this has to be done only once) - Run
npm run build(this has to done at least once and for every webapp change).
Now the webapp/dist folder should be populated with files.
We are now ready to run the player.
You can start the program locally with
go run wavestreamer.go --help