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.port.set(1234)
settings.server.telnet.bind_addr.set("0.0.0.0") settings.server.telnet.bind_addr.set("0.0.0.0")
# Create playlist source from mounted music directory # Create playlist source from generated M3U file
# Use playlist.safe which starts playing immediately without full scan # This file is managed by Asteroid's stream control system
radio = playlist.safe( # Falls back to directory scan if playlist file doesn't exist
mode="randomize", 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, reload=3600,
"/app/music/" "/app/music/"
) )
# Add some audio processing # Use main playlist, fall back to directory scan
radio = amplify(1.0, radio) radio = fallback(track_sensitive=false, [radio, radio_fallback])
radio = normalize(radio)
# Add crossfade between tracks # Add some audio processing
radio = crossfade(radio) # 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 # Create a fallback with emergency content
emergency = sine(440.0) emergency = sine(440.0)

View File

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

View File

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