Initial commit: Radio Susan scripts, configs, and SFX
This commit is contained in:
Executable
+77
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/liquidsoap
|
||||
|
||||
# Radio Susan — with track announcements
|
||||
|
||||
set("log.file.path", "/var/lib/radio/radio.log")
|
||||
set("log.level", 3)
|
||||
set("server.telnet", true)
|
||||
set("server.telnet.port", 1234)
|
||||
set("ffmpeg.content_type.parse_metadata", false)
|
||||
|
||||
# State file for track metadata exchange
|
||||
state_file = "/var/lib/radio/track_state.json"
|
||||
|
||||
# Track counter
|
||||
track_count = ref(0)
|
||||
|
||||
music = playlist(
|
||||
mode="randomize",
|
||||
reload=3600,
|
||||
reload_mode="watch",
|
||||
"/var/lib/radio/playlists/all.m3u"
|
||||
)
|
||||
music = drop_video(music)
|
||||
|
||||
# Write track metadata to state file on each new track
|
||||
music = on_track(fun(m) -> begin
|
||||
track_count := !track_count + 1
|
||||
artist = m["artist"]
|
||||
title = m["title"]
|
||||
count = !track_count
|
||||
# Write JSON state file
|
||||
data = '{"artist":"#{artist}","title":"#{title}","count":#{string_of(count)}}'
|
||||
ignore(file.write(data=data, state_file))
|
||||
log("Track #{string_of(count)}: #{artist} - #{title}")
|
||||
end, music)
|
||||
|
||||
# Jingles
|
||||
jingles = playlist(
|
||||
mode="randomize",
|
||||
"/var/lib/radio/jingles"
|
||||
)
|
||||
jingles = drop_video(jingles)
|
||||
jingles = amplify(3.0, jingles)
|
||||
|
||||
# Dynamic announcements
|
||||
def get_announcement() =
|
||||
result = list.hd(default="", process.read.lines("/usr/bin/python3 /var/lib/radio/announce_tracks.py --state"))
|
||||
if result != "" then
|
||||
log("Announcement: #{result}")
|
||||
request.create(result)
|
||||
else
|
||||
# Fallback to a random jingle
|
||||
null()
|
||||
end
|
||||
end
|
||||
|
||||
announcements = request.dynamic(get_announcement)
|
||||
announcements = drop_video(announcements)
|
||||
announcements = amplify(3.0, announcements)
|
||||
|
||||
# Rotate: 2 music tracks, then 1 announcement or jingle
|
||||
radio = rotate(weights=[2, 1], [music, random(weights=[1, 1], [jingles, announcements])])
|
||||
|
||||
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
|
||||
)
|
||||
Reference in New Issue
Block a user