set("log.file",false) set("log.stdout",true) set("server.telnet",true) set("server.telnet.port", 5000) set("server.telnet.bind_addr", "0.0.0.0") set("decoder.file_extensions.gstreamer",["wav", "webm"]) set("decoder.mime_types.gstreamer",["audio/x-wav", "audio/wav", "video/webm"]) register(name="Youtube_dl-x protocol settings","protocol.youtube-dl-x",()) register(name="Youtube-dl path","protocol.youtube-dl-x.path","youtube-dl -x --audio-format wav --postprocessor-args \"-y\"") # Register the youtube-dl protocol, using youtube-dl. # Syntax: youtube-d-xl: # @flag hidden def youtube_dl_x_protocol(~rlog,~maxtime,arg) binary = get(default="youtube-dl","protocol.youtube-dl-x.path") log = log(label="protocol.youtube-dl-x") def log(~level,s) = rlog(s) log(level=level,s) end delay = maxtime - gettimeofday() cmd = "#{binary} -x --audio-format wav --get-title --get-filename -- #{quote(arg)}" log(level=4,"Executing #{cmd}") x = get_process_lines(timeout=delay,cmd) x = if list.length(x) >= 2 then x else ["",".osb"] end ext = "wav" title = list.hd(default="",x) cmd = "rm -f $(output) && #{binary} -x --audio-format wav -q -f bestaudio/best --no-playlist --exec \"mv {} $(output)\" -- #{quote(arg)}" process = process_uri(extname=ext,cmd) if title != "" then ["annotate:title=#{quote(title)}:#{process}"] else [process] end end add_protocol("youtube-dl-x", youtube_dl_x_protocol, doc="Resolve a request using youtube-dl.", syntax="youtube-dl-x:uri") def crossfade(a,b) add(normalize=false, [ sequence([ blank(duration=5.), fade.initial(duration=5.,b) ]), fade.final(duration=5.,a) ]) end live = audio_to_stereo( rewrite_metadata( [ ("title", "$(title) (LIVE - Dodsorfas Radio)"), ("comment", "http://www.radio.dodsorf.as") ], stretch( ratio=interactive.float("test", 1.00005), input.harbor( "dodsorfas.live", id="dodsorfas.live", port=5002, password=getenv("LIVE_PASSWORD"), user="source", logfile="/tmp/harbor.log" ) ) ) ) ## BEGIN PLAYLISTS # Joakim JoakimDiverse = "/playlists/Joakim/JoakimDiverse.m3u" AlternativeJoa = "/playlists/Joakim/AlternativeJoa.m3u" JoakimRemixes = "/playlists/Joakim/JoakimRemixes.m3u" # Daniel DanAwesome = "/playlists/Daniel/Dan - awesome.m3u" DanDontStarve1 = "/playlists/Daniel/Dan - dontstarve1.m3u" DanDubstepThingies = "/playlists/Daniel/Dan - dubstepthingies.m3u" DanEdgyMusicYT = "/playlists/Daniel/Dan - Edgy Music YT.m3u" DanElectronicRealMusic = "/playlists/Daniel/Dan - electronicrealmusic.m3u" # Artists TaylorSwift = "/playlists/artists/TaylorSwift.m3u" AstridS = "/playlists/artists/AstridS.m3u" Coldplay = "/playlists/artists/Coldplay.m3u" DemiLovato = "/playlists/artists/DemiLovato.m3u" KatyPerry = "/playlists/artists/KatyPerry.m3u" SelenaGomez = "/playlists/artists/SelenaGomez.m3u" ShawnMendes = "/playlists/artists/ShawnMendes.m3u" ZaraLarsson = "/playlists/artists/ZaraLarsson.m3u" # Genres Musicals = "/playlists/Musicals.m3u" Soundtracks = "/playlists/Soundtracks.m3u" #Events Halloween = "/playlists/events/Halloween.m3u" ## END PLAYLISTS randomsong = random(playlist(conservative=true, JoakimDiverse)) count = list.length(playlist.parse(JoakimDiverse)) randomsong = random(weights=[list.length(playlist.parse(AlternativeJoa)), count], [playlist(AlternativeJoa), randomsong]) count = count + list.length(playlist.parse(AlternativeJoa)) randomsong = random(weights=[list.length(playlist.parse(DanAwesome)), count], [playlist(DanAwesome), randomsong]) count = count + list.length(playlist.parse(DanAwesome)) randomsong = random(weights=[list.length(playlist.parse(DanDontStarve1)), count], [playlist(DanDontStarve1), randomsong]) count = count + list.length(playlist.parse(DanDontStarve1)) randomsong = random(weights=[list.length(playlist.parse(DanDubstepThingies)), count], [playlist(DanDubstepThingies), randomsong]) count = count + list.length(playlist.parse(DanDubstepThingies)) randomsong = random(weights=[list.length(playlist.parse(DanEdgyMusicYT)), count], [playlist(DanEdgyMusicYT), randomsong]) count = count + list.length(playlist.parse(DanEdgyMusicYT)) randomsong = random(weights=[list.length(playlist.parse(DanElectronicRealMusic)), count], [playlist(DanElectronicRealMusic), randomsong]) count = count + list.length(playlist.parse(DanElectronicRealMusic)) randomsong = random(weights=[list.length(playlist.parse(TaylorSwift)), count], [playlist(TaylorSwift), randomsong]) count = count + list.length(playlist.parse(TaylorSwift)) randomsong = random(weights=[list.length(playlist.parse(AstridS)), count], [playlist(AstridS), randomsong]) count = count + list.length(playlist.parse(AstridS)) randomsong = random(weights=[list.length(playlist.parse(Coldplay)), count], [playlist(Coldplay), randomsong]) count = count + list.length(playlist.parse(Coldplay)) randomsong = random(weights=[list.length(playlist.parse(DemiLovato)), count], [playlist(DemiLovato), randomsong]) count = count + list.length(playlist.parse(DemiLovato)) randomsong = random(weights=[list.length(playlist.parse(KatyPerry)), count], [playlist(KatyPerry), randomsong]) count = count + list.length(playlist.parse(KatyPerry)) randomsong = random(weights=[list.length(playlist.parse(SelenaGomez)), count], [playlist(SelenaGomez), randomsong]) count = count + list.length(playlist.parse(SelenaGomez)) randomsong = random(weights=[list.length(playlist.parse(ShawnMendes)), count], [playlist(ShawnMendes), randomsong]) count = count + list.length(playlist.parse(ShawnMendes)) randomsong = random(weights=[list.length(playlist.parse(ZaraLarsson)), count], [playlist(ZaraLarsson), randomsong]) count = count + list.length(playlist.parse(ZaraLarsson)) randomsong = random(weights=[list.length(playlist.parse(Musicals)), count], [playlist(Musicals), randomsong]) count = count + list.length(playlist.parse(Musicals)) randomsong = random(weights=[list.length(playlist.parse(Soundtracks)), count], [playlist(Soundtracks), randomsong]) count = count + list.length(playlist.parse(Soundtracks)) randomsong = random(weights=[list.length(playlist.parse(JoakimRemixes)), count], [playlist(JoakimRemixes), randomsong]) count = count + list.length(playlist.parse(JoakimRemixes)) randomsong = random(weights=[list.length(playlist.parse(Halloween)), count], [playlist(Halloween), randomsong]) count = count + list.length(playlist.parse(Halloween)) randomsong = audio_to_stereo(randomsong) ### requests = audio_to_stereo(drop_video(request.queue(id="request"))) mix = blank() mix = fallback(track_sensitive=false, [randomsong, mix]) mix = fallback(track_sensitive=true, transitions=[crossfade], [requests,mix]) mix = fallback(track_sensitive=false, transitions=[crossfade], [live, mix]) mix = normalize(mix) # OUTPUTS output.icecast( password=getenv("HARBOR_PASSWORD"), host=getenv("BROADCAST_PORT_5001_TCP_ADDR"), port=int_of_string(getenv("BROADCAST_PORT_5001_TCP_PORT")), %wav, mount="dodsorfas.main", mix )