summaryrefslogtreecommitdiff
path: root/radio.liq
diff options
context:
space:
mode:
authorCaine <caine@jihakuz.xyz>2026-03-07 12:52:55 +0000
committerCaine <caine@jihakuz.xyz>2026-03-07 12:52:55 +0000
commit01682c62c2c9ea2f7f498544ee3aaa299c0c2423 (patch)
tree82a86298eeed90bfba253bf03a4b3393b182b491 /radio.liq
Initial commit: Radio Susan scripts, configs, and SFX
Diffstat (limited to 'radio.liq')
-rwxr-xr-xradio.liq71
1 files changed, 71 insertions, 0 deletions
diff --git a/radio.liq b/radio.liq
new file mode 100755
index 0000000..0f5b826
--- /dev/null
+++ b/radio.liq
@@ -0,0 +1,71 @@
+#!/usr/bin/liquidsoap
+
+# Radio Susan — pre-generated daily playlist
+# Tracks, announcements, and jingles are all baked into playlist.m3u
+# Liquidsoap just plays it sequentially.
+
+set("log.file.path", "/var/lib/radio/radio.log")
+set("log.level", 3)
+set("server.telnet", true)
+set("server.telnet.port", 1234)
+
+state_file = "/var/lib/radio/track_state.json"
+playlist_file = "/var/lib/radio/playlist.m3u"
+
+# Primary source: pre-generated daily playlist
+music = playlist(
+ id="daily_playlist",
+ mode="normal",
+ reload=3600,
+ reload_mode="watch",
+ playlist_file
+)
+
+# Fallback 1: live DJ (per-track)
+def get_next_track() =
+ result = list.hd(default="", process.read.lines("/usr/bin/python3 /var/lib/radio/radio_dj.py"))
+ if result != "" then
+ log("DJ fallback picked: #{result}")
+ request.create(result)
+ else
+ log("DJ returned nothing")
+ null()
+ end
+end
+
+dj_fallback = request.dynamic(id="dj_fallback", get_next_track)
+
+# Fallback 2: static random playlist (last resort)
+random_fallback = playlist(
+ id="random_fallback",
+ mode="randomize",
+ reload=3600,
+ "/var/lib/radio/playlists/all.m3u"
+)
+
+# Chain: playlist → DJ → random
+radio = fallback(id="Radio_Susan", track_sensitive=true, [music, dj_fallback, random_fallback])
+
+# Write track metadata to state file on each new track
+radio = source.on_track(radio, fun(m) -> begin
+ artist = m["artist"]
+ title = m["title"]
+ data = '{"artist":"#{artist}","title":"#{title}"}'
+ ignore(file.write(data=data, state_file))
+ log("Now playing: #{artist} - #{title}")
+end)
+
+radio = mksafe(radio)
+
+output.icecast(
+ %mp3(bitrate=192),
+ host="localhost",
+ port=8910,
+ password="REDACTED",
+ mount="/stream",
+ name="Radio Susan",
+ description="Personal radio station",
+ genre="Eclectic",
+ url="https://radio.jihakuz.xyz",
+ radio
+)