#!/usr/bin/liquidsoap # Radio Bullshit - Liquidsoap Configuration # ============================================================================ # CONFIGURATION # ============================================================================ # Get environment variables with defaults hostname = environment.get(default="localhost", "HOSTNAME") port = int_of_string(environment.get(default="8000", "PORT")) # Log configuration log.file.path := "/var/log/liquidsoap/radio-bullshit.log" log.level := 3 # ============================================================================ # SOURCES # ============================================================================ # Songs playlist - reload every 60 seconds to pick up new downloads songs = playlist( mode="randomize", reload=60, reload_mode="watch", "/songs/playlist.pls" ) # Jingles playlist jingles = playlist( mode="randomize", reload=60, reload_mode="watch", "/jingles/playlist.pls" ) # Air support (fallback audio when nothing else is available) air_support = mksafe( playlist( mode="randomize", reload_mode="watch", "/air-support/playlist.pls" ) ) # ============================================================================ # ALTERNATING LOGIC # ============================================================================ # Alternate between songs and jingles: play 1 jingle, then 4 songs # This creates a pattern: jingle, song, song, song, song, jingle, ... radio = rotate( weights=[1, 1], [jingles, songs] ) # Add fallback to air support in case of errors radio = fallback( track_sensitive=false, [radio, air_support] ) # Normalize audio levels for consistent volume # radio = normalize(radio) # ============================================================================ # OUTPUTS # ============================================================================ # Built-in HTTP server (replaces Icecast) # Serves the stream directly via Liquidsoap's Harbor server output.harbor( %mp3(bitrate=128, samplerate=44100), port=port, mount="/radio-bullshit", url="http://#{hostname}:#{port}", radio ) # Enable built-in HTTP server for stream and status settings.harbor.bind_addrs := ["0.0.0.0"] # Add static folder harbor.http.static( port=port, path="/static/", "/var/www/static" ) # Add index file harbor.http.register( port=port, method="GET", "/", fun (_, response) -> begin response.html( file.contents("/var/www/index.html") ) end ) # Serve M3U playlist file harbor.http.register( port=port, method="GET", "/radio-bullshit.m3u", fun (_, response) -> begin m3u = "http://#{hostname}:#{port}/radio-bullshit" response.content_type("audio/x-mpegurl") response.data(m3u) end ) # Status endpoint (JSON) # harbor.http.register( # port=port, # method="GET", # "/status.json", # fun (_, response) -> begin # status = '{"status":"online","stream":"Radio Bullshit","mount":"/radio-bullshit"}' # response.json(parse_json(status)) # end # ) log("Radio Bullshit is now streaming on http://#{hostname}:#{port}/radio-bullshit")