Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # WARNING! This file is automatically generated by AzuraCast.
- # Do not update it directly!
- set("init.daemon", false)
- set("init.daemon.pidfile.path","/var/azuracast/stations/radio_paranormalium/config/liquidsoap.pid")
- set("log.stdout", true)
- set("log.file", false)
- set("server.telnet",true)
- set("server.telnet.bind_addr","0.0.0.0")
- set("server.telnet.port", 8004)
- set("harbor.bind_addrs",["0.0.0.0"])
- set("tag.encodings",["UTF-8","ISO-8859-1"])
- set("encoder.encoder.export",["artist","title","album","song"])
- setenv("TZ", "Europe/Warsaw")
- azuracast_api_auth = ref "(PASSWORD)"
- ignore(azuracast_api_auth)
- autodj_is_loading = ref true
- ignore(autodj_is_loading)
- autodj_ping_attempts = ref 0
- ignore(autodj_ping_attempts)
- playlist_muzyka_dzien = playlist(id="playlist_muzyka_dzien",mode="randomize",reload_mode="watch",conservative=true,default_duration=10.,length=20.,"/var/azuracast/stations/radio_paranormalium/playlists/playlist_muzyka_dzien.m3u")
- playlist_muzyka_dzien = audio_to_stereo(id="stereo_playlist_muzyka_dzien", playlist_muzyka_dzien)
- playlist_muzyka_dzien = cue_cut(id="cue_playlist_muzyka_dzien", playlist_muzyka_dzien)
- playlist_muzyka_noc = playlist(id="playlist_muzyka_noc",mode="randomize",reload_mode="watch",conservative=true,default_duration=10.,length=20.,"/var/azuracast/stations/radio_paranormalium/playlists/playlist_muzyka_noc.m3u")
- playlist_muzyka_noc = audio_to_stereo(id="stereo_playlist_muzyka_noc", playlist_muzyka_noc)
- playlist_muzyka_noc = cue_cut(id="cue_playlist_muzyka_noc", playlist_muzyka_noc)
- playlist_audycje_wszystkie = playlist(id="playlist_audycje_wszystkie",mode="randomize",reload_mode="watch",conservative=true,default_duration=10.,length=20.,"/var/azuracast/stations/radio_paranormalium/playlists/playlist_audycje_wszystkie.m3u")
- playlist_audycje_wszystkie = audio_to_stereo(id="stereo_playlist_audycje_wszystkie", playlist_audycje_wszystkie)
- playlist_audycje_wszystkie = cue_cut(id="cue_playlist_audycje_wszystkie", playlist_audycje_wszystkie)
- playlist_jingle = playlist(id="playlist_jingle",mode="randomize",reload_mode="watch",conservative=true,default_duration=10.,length=20.,"/var/azuracast/stations/radio_paranormalium/playlists/playlist_jingle.m3u")
- playlist_jingle = audio_to_stereo(id="stereo_playlist_jingle", playlist_jingle)
- playlist_jingle = cue_cut(id="cue_playlist_jingle", playlist_jingle)
- playlist_audycje_najnowsze = playlist(id="playlist_audycje_najnowsze",mode="randomize",reload_mode="watch",conservative=true,default_duration=10.,length=20.,"/var/azuracast/stations/radio_paranormalium/playlists/playlist_audycje_najnowsze.m3u")
- playlist_audycje_najnowsze = audio_to_stereo(id="stereo_playlist_audycje_najnowsze", playlist_audycje_najnowsze)
- playlist_audycje_najnowsze = cue_cut(id="cue_playlist_audycje_najnowsze", playlist_audycje_najnowsze)
- # Standard Playlists
- radio = random(id="standard_playlists", weights=[], [])
- # Standard Schedule Switches
- radio = switch(id="schedule_switch", track_sensitive=true, [ ({ 7h0m-22h0m }, playlist_muzyka_dzien), ({ (22h0m-23h59m59s) or (00h00m-7h0m) }, playlist_muzyka_noc), ({true}, radio) ])
- # Once per x Songs Playlists
- radio = rotate(weights=[1,5], [playlist_audycje_wszystkie, radio])
- radio = rotate(weights=[1,3], [playlist_jingle, radio])
- radio = rotate(weights=[1,7], [playlist_audycje_najnowsze, radio])
- # AutoDJ Next Song Script
- def autodj_next_song() =
- uri = list.hd(get_process_lines(env=[("API_AUTH", !azuracast_api_auth)], 'curl -s --request POST --url http://web/api/internal/1/nextsong --form api_auth="$API_AUTH"'), default="")
- log("AzuraCast Raw Response: #{uri}")
- if uri == "" or string.match(pattern="Error", uri) then
- []
- else
- r = request.create(uri)
- if request.resolve(r) then
- [r]
- else
- []
- end
- end
- end
- # Delayed ping for AutoDJ Next Song
- def wait_for_next_song(autodj)
- autodj_ping_attempts := !autodj_ping_attempts + 1
- delay = ref 0.5
- if source.is_ready(!autodj) then
- log("AutoDJ is ready!")
- autodj_is_loading := false
- delay := -1.0
- elsif !autodj_ping_attempts > 200 then
- log("AutoDJ could not be initialized within the specified timeout.")
- autodj_is_loading := false
- delay := -1.0
- end
- !delay
- end
- dynamic = request.dynamic.list(id="next_song", timeout=20., retry_delay=2., autodj_next_song)
- dynamic = audio_to_stereo(id="stereo_next_song", dynamic)
- dynamic = cue_cut(id="cue_next_song", dynamic)
- dynamic_startup = fallback(
- id = "dynamic_startup",
- track_sensitive = false,
- [
- dynamic,
- at(
- fun()-> !autodj_is_loading,
- blank(id = "autodj_startup_blank", duration = 120.)
- )
- ]
- )
- radio = fallback(id="autodj_fallback", track_sensitive = true, [dynamic_startup, radio])
- ref_dynamic = ref dynamic;
- add_timeout(0.25,fun()->wait_for_next_song(ref_dynamic))
- requests = request.queue(id="requests")
- requests = audio_to_stereo(id="stereo_requests", requests)
- requests = cue_cut(id="cue_requests", requests)
- radio = fallback(id="requests_fallback", track_sensitive = true, [requests, radio])
- add_skip_command(radio)
- radio = crossfade(smart=false, duration=3.00,fade_out=2.00,fade_in=2.00,radio)
- # DJ Authentication
- live_enabled = ref false
- last_authenticated_dj = ref ""
- live_dj = ref ""
- def dj_auth(auth_user,auth_pw) =
- user = ref ""
- password = ref ""
- if (auth_user == "source" or auth_user == "") and (string.match(pattern="(:|,)+", auth_pw)) then
- auth_string = string.split(separator="(:|,)", auth_pw)
- user := list.nth(default="", auth_string, 0)
- password := list.nth(default="", auth_string, 2)
- else
- user := auth_user
- password := auth_pw
- end
- log("Authenticating DJ: #{!user}")
- ret = list.hd(get_process_lines(env=[("DJ_USER", !user), ("DJ_PASSWORD", !password), ("API_AUTH", !azuracast_api_auth)], 'curl -s --request POST --url http://web/api/internal/1/auth --form dj-user="$DJ_USER" --form dj-password="$DJ_PASSWORD" --form api_auth="$API_AUTH"'), default="")
- log("AzuraCast DJ Auth Response: #{ret}")
- authed = bool_of_string(ret)
- if (authed) then
- last_authenticated_dj := !user
- end
- authed
- end
- def live_connected(header) =
- dj = !last_authenticated_dj
- log("DJ Source connected! Last authenticated DJ: #{dj} - #{header}")
- live_enabled := true
- live_dj := dj
- ret = list.hd(get_process_lines(env=[("DJ_USER", dj), ("API_AUTH", !azuracast_api_auth)], 'curl -s --request POST --url http://web/api/internal/1/djon --form dj-user="$DJ_USER" --form api_auth="$API_AUTH"'), default="")
- log("AzuraCast Live Connected Response: #{ret}")
- end
- def live_disconnected() =
- dj = !live_dj
- log("DJ Source disconnected! Current live DJ: #{dj}")
- ret = list.hd(get_process_lines(env=[("DJ_USER", dj), ("API_AUTH", !azuracast_api_auth)], 'curl -s --request POST --url http://web/api/internal/1/djoff --form dj-user="$DJ_USER" --form api_auth="$API_AUTH"'), default="")
- log("AzuraCast Live Disconnected Response: #{ret}")
- live_enabled := false
- last_authenticated_dj := ""
- live_dj := ""
- end
- # A Pre-DJ source of radio that can be broadcast if needed',
- radio_without_live = radio
- ignore(radio_without_live)
- # Live Broadcasting
- live = audio_to_stereo(input.harbor("/", id = "input_streamer", port = 8005, auth = dj_auth, icy = true, icy_metadata_charset = "UTF-8", metadata_charset = "UTF-8", on_connect = live_connected, on_disconnect = live_disconnected, buffer = 15.00, max = 20.00))
- ignore(output.dummy(live, fallible=true))
- radio = fallback(id="live_fallback", replay_metadata=false, track_sensitive=false, [live, radio])
- # Allow for Telnet-driven insertion of custom metadata.
- radio = server.insert_metadata(id="custom_metadata", radio)
- # Apply amplification metadata (if supplied)
- radio = amplify(override="liq_amplify", 1., radio)
- radio = fallback(id="safe_fallback", track_sensitive = false, [radio, single(id="error_jingle", "/usr/local/share/icecast/web/error.mp3")])
- # Send metadata changes back to AzuraCast
- def metadata_updated(m) =
- def f() =
- if (m["song_id"] != "") then
- ret = list.hd(get_process_lines(env=[("SONG", m["song_id"]), ("MEDIA", m["media_id"]), ("PLAYLIST", m["playlist_id"]), ("API_AUTH", !azuracast_api_auth)], 'curl -s --request POST --url http://web/api/internal/1/feedback --form song="$SONG" --form media="$MEDIA" --form playlist="$PLAYLIST" --form api_auth="$API_AUTH"'), default="")
- log("AzuraCast Feedback Response: #{ret}")
- end
- (-1.)
- end
- add_timeout(fast=false, 0., f)
- end
- radio = on_metadata(metadata_updated,radio)
- radioMONO = mean(radio)
- radioOPUS = drop_metadata(radio)
- radioOPUSmono = mean(radioOPUS)
- radioMONOaac = audio_to_stereo(radioMONO)
- def remove_unknown(radio)
- # Remove (_,"Unknown") metadata
- def f(m) =
- def unknown_meta(el) =
- let (_, m) = el
- m != "Unknown"
- end
- list.filter(unknown_meta, m)
- end
- map_metadata(update=false, f, radio)
- end
- radio = remove_unknown(radio)
- # Local Broadcasts
- output.icecast(%mp3(samplerate=44100, stereo=true, bitrate=128, id3v2=true), id="local_1", host = "127.0.0.1", port = 8000, password = "(PASSWORD)", mount = "/1", name = "Radio Paranormalium", description = "", genre = "", public = false, encoding = "UTF-8", radio)
- output.icecast(%fdkaac(channels=2, samplerate=44100, bitrate=320, afterburner=true, aot="mpeg4_aac_lc", sbr_mode=false), id="local_2", host = "127.0.0.1", port = 8000, password = "(PASSWORD)", mount = "/2", name = "Radio Paranormalium", description = "", genre = "", public = true, encoding = "UTF-8", radio)
- output.icecast(%opus(samplerate=48000, bitrate=192, vbr="none", application="audio", channels=2, signal="music", complexity=10, max_bandwidth="full_band"), id="local_3", host = "127.0.0.1", port = 8000, password = "(PASSWORD)", mount = "/opusHQ", name = "Radio Paranormalium", description = "", genre = "", public = true, encoding = "UTF-8", icy_metadata="true", radioOPUS)
- output.icecast(%mp3(samplerate=22050, stereo=false, bitrate=48, id3v2=true), id="local_4", host = "127.0.0.1", port = 8000, password = "(PASSWORD)", mount = "/mp3_48", name = "Radio Paranormalium", description = "", genre = "", public = true, encoding = "UTF-8", radioMONO)
- output.icecast(%fdkaac(channels=2, samplerate=44100, bitrate=24, afterburner=false, aot="mpeg4_he_aac_v2", sbr_mode=true), id="local_5", host = "127.0.0.1", port = 8000, password = "(PASSWORD)", mount = "/5", name = "Radio Paranormalium", description = "", genre = "", public = true, encoding = "UTF-8", radioMONOaac)
- output.icecast(%opus(samplerate=48000, bitrate=24, vbr="none", application="audio", channels=1, signal="music", complexity=10, max_bandwidth="full_band"), id="local_6", host = "127.0.0.1", port = 8000, password = "(PASSWORD)", mount = "/opus24", name = "Radio Paranormalium", description = "", genre = "", public = true, encoding = "UTF-8", icy_metadata="true", radioOPUSmono)
- output.icecast(%mp3(samplerate=22050, stereo=false, bitrate=24, id3v2=true), id="local_7", host = "127.0.0.1", port = 8000, password = "(PASSWORD)", mount = "/6", name = "Radio Paranormalium", description = "", genre = "", public = true, encoding = "UTF-8", radioMONO)
- output.icecast(%opus(samplerate=48000, bitrate=8, vbr="none", application="audio", channels=1, signal="music", complexity=10, max_bandwidth="full_band"), id="local_8", host = "127.0.0.1", port = 8000, password = "(PASSWORD)", mount = "/opus8", name = "Radio Paranormalium", description = "", genre = "", public = true, encoding = "UTF-8", icy_metadata="true", radioOPUSmono)
- # Remote Relays
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement