bash
ply -l -d /path/to/music
bash
ply -s -H radio.example.com -P mypassword -d /path/to/music
bash
ply -s -n -H radio.example.com -P mypassword -b 192k -d /path/to/music
bash
sudo apt update
sudo apt install mpg123 festival lame ffmpeg alsa-utils
bash
sudo dpkg -i ply-radio10.0amd64.deb
sudo apt-get install -f # Install any missing dependencies
#### ARM64 (Raspberry Pi, etc.)
bash
sudo dpkg -i ply-radio10.0arm64.deb
sudo apt-get install -f
shc installed:
bash
sudo apt install shc
Then build:
bash
For x86-64
./build.sh
For ARM64 (run on ARM64 hardware)
./build-arm64.sh
-d <directory> - Music directory path (default: ./music)
-l - Local playback only (soundcard only, no streaming)
-s - Enable streaming to Icecast/Shoutcast
-n - No local playback (streaming only)
-j <text> - Jingle message text
-t <number> - Number of tracks before jingle (default: 4, 0 to disable)
-f <file> - Pre-generated jingle MP3 file (default: jingle.mp3)
-H <host> - Icecast/Shoutcast host or IP
-p <port> - Icecast/Shoutcast port (default: 8000)
-P <password> - Icecast/Shoutcast source password
-m <mount> - Icecast mount point (default: stream)
-b <bitrate> - Stream bitrate (default: 128k, e.g., 64k, 192k, 320k)
-N <name> - Stream name (default: Ply Radio Stream)
-D <description> - Stream description
-G <genre> - Stream genre (default: Various)
-U <url> - Stream website URL
-r <rate> - Sample rate (default: 44100)
-c <channels> - Audio channels (default: 2)
-v - Show version information
-h - Show help message
bash
ply -l -d ~/Music -j "Welcome to My Radio!" -t 3
bash
ply -s \
-H stream.example.com \
-P secret_password \
-m live.mp3 \
-b 192k \
-d /var/music \
-N "My Awesome Radio" \
-D "The best music 24/7" \
-G "Electronic" \
-U "https://myradio.com" \
-j "This is My Awesome Radio, playing the best electronic music!"
bash
ply -s \
-H radio.example.com \
-P mypassword \
-d /home/pi/music \
-t 5 \
-j "You're listening to Pi FM on 88.0 MHz and online at pifm.com!"
bash
ply -s -n -H radio.host.com -P pass -b 64k -r 22050 -d /music
bash
sudo useradd -r -s /bin/false -g audio ply
sudo mkdir -p /var/lib/ply-radio/music
sudo chown -R ply:audio /var/lib/ply-radio
bash
sudo cp -r /path/to/music/* /var/lib/ply-radio/music/
/etc/systemd/system/ply-radio.service:
ini
[Unit]
Description=Ply Internet Radio
After=network.target sound.target
[Service]
Type=simple
User=ply
Group=audio
WorkingDirectory=/var/lib/ply-radio
ExecStart=/usr/bin/ply -s \
-H your.icecast.server \
-P your_password \
-d /var/lib/ply-radio/music \
-N "Your Station Name" \
-j "Your jingle message here!"
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
bash
sudo systemctl daemon-reload
sudo systemctl enable ply-radio
sudo systemctl start ply-radio
bash
sudo systemctl status ply-radio
sudo journalctl -u ply-radio -f
More examples are available in /usr/share/ply-radio/examples/ after installation.
bash
./build.sh
This creates build/ply-radio10.0amd64.deb
bash
./build-arm64.sh
This creates build/ply-radio10.0arm64.deb
aplay)
- Icecast/Shoutcast server (via ffmpeg)
- Both simultaneously
This design allows for reliable streaming with automatic reconnection and efficient resource usage.
bash
Check ALSA devices
aplay -l
Test audio
speaker-test -t wav -c 2
Check volume
alsamixer
bash
Test Festival
echo "Testing Festival" | text2wave -o test.wav
aplay test.wav
Install Festival if needed
sudo apt install festival festvox-us-slt-hts
sudo journalctl -u ply-radio -f
-b 64k or -b 96k
-r 22050
-t 0
-c 1
-l)
-n)
Support this project and get instant access to compiled versions for your platform.
No changelog available.