diff options
| author | Caine <caine@jihakuz.xyz> | 2026-03-07 12:52:55 +0000 |
|---|---|---|
| committer | Caine <caine@jihakuz.xyz> | 2026-03-07 12:52:55 +0000 |
| commit | 01682c62c2c9ea2f7f498544ee3aaa299c0c2423 (patch) | |
| tree | 82a86298eeed90bfba253bf03a4b3393b182b491 /radio.liq | |
Initial commit: Radio Susan scripts, configs, and SFX
Diffstat (limited to 'radio.liq')
| -rwxr-xr-x | radio.liq | 71 |
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 +) |
