Improve audio quality and streaming performance

- Add 5-second crossfades between tracks
- Use ReplayGain for consistent volume (removed normalize())
- Add audio compression to prevent clipping
- Liquidsoap watches playlist file and reloads every 5 seconds
- Fallback to random playback when queue is empty
- Fix playlist to play all tracks in order
This commit is contained in:
glenneth 2025-10-14 14:41:43 +03:00 committed by Brian O'Reilly
parent d4edb8bfec
commit 5f78213d92
3 changed files with 40 additions and 12 deletions

View File

@ -14,20 +14,46 @@ settings.server.telnet.set(true)
settings.server.telnet.port.set(1234)
settings.server.telnet.bind_addr.set("0.0.0.0")
# Create playlist source from mounted music directory
# Use playlist.safe which starts playing immediately without full scan
radio = playlist.safe(
mode="randomize",
# Create playlist source from generated M3U file
# This file is managed by Asteroid's stream control system
# Falls back to directory scan if playlist file doesn't exist
radio = playlist(
mode="normal", # Play in order (not randomized)
reload=5, # Check for playlist updates every 5 seconds
reload_mode="watch", # Watch file for changes
"/app/stream-queue.m3u"
)
# Fallback to directory scan if playlist file is empty/missing
radio_fallback = playlist.safe(
mode="randomize",
reload=3600,
"/app/music/"
)
# Add some audio processing
radio = amplify(1.0, radio)
radio = normalize(radio)
# Use main playlist, fall back to directory scan
radio = fallback(track_sensitive=false, [radio, radio_fallback])
# Add crossfade between tracks
radio = crossfade(radio)
# Add some audio processing
# Use ReplayGain for consistent volume without pumping
radio = amplify(1.0, override="replaygain", radio)
# Add smooth crossfade between tracks (5 seconds)
radio = crossfade(
duration=5.0, # 5 second crossfade
fade_in=3.0, # 3 second fade in
fade_out=3.0, # 3 second fade out
radio
)
# Add a compressor to prevent clipping
radio = compress(
ratio=3.0, # Compression ratio
threshold=-15.0, # Threshold in dB
attack=50.0, # Attack time in ms
release=400.0, # Release time in ms
radio
)
# Create a fallback with emergency content
emergency = sine(440.0)

View File

@ -26,6 +26,7 @@ services:
volumes:
- ../music/library:/app/music:ro
- ./asteroid-radio-docker.liq:/app/asteroid-radio.liq:ro
- ../stream-queue.m3u:/app/stream-queue.m3u:ro
restart: unless-stopped
networks:
- asteroid-network

View File

@ -23,6 +23,7 @@ docker compose ps
echo ""
echo "🎵 Asteroid Radio is now streaming!"
echo "📡 High Quality: http://localhost:8000/asteroid.mp3"
echo "📡 Low Quality: http://localhost:8000/asteroid-low.mp3"
echo "🔧 Admin Panel: http://localhost:8000/admin/"
echo "📡 High Quality MP3: http://localhost:8000/asteroid.mp3"
echo "📡 High Quality AAC: http://localhost:8000/asteroid.aac"
echo "📡 Low Quality MP3: http://localhost:8000/asteroid-low.mp3"
echo "🔧 Admin Panel: http://localhost:8000/admin/"