mirror of
https://github.com/migatu/conjurer.git
synced 2026-07-19 08:12:09 +00:00
Tag: 1.7
Intermediate commits (oldest → newest): - Streaming hls - Fx bug - Fxs - Small fixes - Revert fix - Small improvements - Fine tuning - Fine tune - Add microphone - Fixing memory of Conjurer - Local output - Fix - Fx - Fine tuning - Adding script logging current tracks in queue
This commit is contained in:
@@ -9,12 +9,13 @@ let json.parse credentials = file.contents("/home/pi/Conjurer/icecast_credentia
|
||||
enable_replaygain_metadata()
|
||||
|
||||
# Set up a playlog for tracking played tracks
|
||||
l = playlog(duration = 14400.0, persistency="/home/pi/Conjurer/persistence.log")
|
||||
|
||||
l = playlog(duration = 72000.0, persistency="/home/pi/Conjurer/persistence.log")
|
||||
|
||||
# Function to check if a track can be played based on its metadata
|
||||
def check(r)
|
||||
m = request.metadata(r)
|
||||
if l.last(m) < 3600. then
|
||||
if l.last(m) < 36000. then
|
||||
log.info("Rejecting #{m['filename']} (played #{l.last(m)}s ago).")
|
||||
false
|
||||
else
|
||||
@@ -40,20 +41,19 @@ def queue_processing()
|
||||
file.remove("/home/pi/Conjurer/request.playlist")
|
||||
f = file.open("/home/pi/Conjurer/request.playlist", create=true)
|
||||
f.close()
|
||||
log.info("done")
|
||||
else
|
||||
log.info("no requests")
|
||||
end
|
||||
end
|
||||
|
||||
# Randomly select a playlist with weights
|
||||
s4 = random(id="randomizer", weights=[1, 3, 2], [s1, s2, s3])
|
||||
s4 = random(id="randomizer", weights=[1, 3, 5], [s1, s2, s3])
|
||||
|
||||
# Load jingles playlist
|
||||
jingles = (playlist(reload_mode="watch", "/home/pi/Conjurer/jingles.playlist"))
|
||||
|
||||
# Create the main stream with random playlist and jingles
|
||||
s = rotate(id="randomizer", weights=[20, 1], [s4, jingles])
|
||||
s = rotate(id="randomizer", weights=[10, 1], [s4, jingles])
|
||||
|
||||
s = crossfade(fade_out=2., fade_in=2., duration=4., fallback(id="switcher", track_sensitive=false, [requests_queue, s]))
|
||||
|
||||
# Set up an interactive harbor for controlling the stream
|
||||
interactive.harbor(port = 9999)
|
||||
@@ -66,12 +66,21 @@ s = add([s, b])
|
||||
|
||||
# Set up interactive control for main volume
|
||||
a = interactive.float("main_volume", min=0., max=20., 1.)
|
||||
s = compress.multiband.interactive(bands=3, s)
|
||||
s = compress.multiband.interactive(bands=7, s)
|
||||
|
||||
# Apply audio processing effects
|
||||
s = nrj(normalize(s))
|
||||
s = amplify(a, s)
|
||||
|
||||
mic = buffer(input.pulseaudio()) # Microphone
|
||||
mic = gate(threshold=-30., range=-80., mic)
|
||||
mic = blank.strip(max_blank=2., min_noise=.1, threshold=-20., mic)
|
||||
|
||||
s = add([s, mic])
|
||||
#w = interactive.float("wetness", min=0., max=1., 1.)
|
||||
#s = dry_wet(w,s,s2)
|
||||
|
||||
|
||||
# Skip blank sections in the stream
|
||||
s = blank.skip(max_blank=2., s)
|
||||
|
||||
@@ -79,7 +88,7 @@ s = blank.skip(max_blank=2., s)
|
||||
log_to_stdout = true
|
||||
log_to_file = true
|
||||
logpath = "/home/pi/Conjurer/radio_log.log"
|
||||
loglevel = 4
|
||||
loglevel = 3
|
||||
set("log.stdout", log_to_stdout)
|
||||
set("log.level", loglevel)
|
||||
|
||||
@@ -89,10 +98,9 @@ set("log.file.path", logpath)
|
||||
|
||||
# Set up emergency fallback track
|
||||
emergency = single("/home/pi/RetroPie/mp3/Youtube/Dr. Peacock - Trip to Ireland [GvrvQTUbUcA].mp3")
|
||||
|
||||
# Create a fallback stream with the main stream and emergency track
|
||||
cross_s = crossfade(fade_out=3., fade_in=3., duration=5., fallback(id="switcher", track_sensitive=false, [requests_queue, s]))
|
||||
radio = fallback(id="switcher2", track_sensitive=false, [cross_s, emergency])
|
||||
radio = fallback(id="switcher2", track_sensitive=false, [s, emergency])
|
||||
# Set up an interactive control for skipping tracks
|
||||
p = interactive.bool("Skip track", false)
|
||||
|
||||
# Function to process the request queue and skip the current track if requested
|
||||
def check_skip()
|
||||
@@ -106,26 +114,19 @@ end
|
||||
# Run the queue processing function every 60 seconds
|
||||
thread.run(every=60., queue_processing)
|
||||
|
||||
# Set up an interactive control for skipping tracks
|
||||
p = interactive.bool("r1", false)
|
||||
|
||||
# Run the check_skip function every 5 seconds
|
||||
thread.run(every=5., check_skip)
|
||||
thread.run(every=15., check_skip)
|
||||
|
||||
# Handle metadata events
|
||||
handle_metadata = fun (m) -> begin
|
||||
log.info(m["title"])
|
||||
log.info(m["artist"])
|
||||
log.info(m["filename"])
|
||||
end
|
||||
radio.on_metadata(handle_metadata)
|
||||
|
||||
# Enable persistent script parameters
|
||||
interactive.persistent("script.params")
|
||||
|
||||
# Configure output formats and destinations
|
||||
output.file.hls("/tmp/hls", [("mp3-low", %mp3(bitrate=96)), ("mp3-hi", %mp3(bitrate=160))], radio)
|
||||
|
||||
output.icecast(%mp3, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="mp3-stream", radio)
|
||||
output.pulseaudio(radio)
|
||||
#output.file.hls("/tmp/hls", [("mp3-low", %mp3(bitrate=96)), ("mp3-hi", %mp3(bitrate=160))], radio)
|
||||
# Uncomment the following lines to enable additional output formats
|
||||
# output.icecast(%opus, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="opus-stream", radio)
|
||||
# output.icecast(%ogg, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="ogg-stream", radio)
|
||||
|
||||
Reference in New Issue
Block a user