#!/usr/bin/liquidsoap # # Aura Engine (https://gitlab.servus.at/aura/engine) # # Copyright (C) 2017-2020 - The Aura Engine Team. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # Initialize icecast_vorbis_metadata = false inputs = ref ([]) engine_state = { is_fallback = ref(false) } # Load settings from ini file %include "settings.liq" # Include library functions %include "library.liq" # Include dependency-free functions %include "functions.liq" ##################################### # EVENTS # ##################################### # Updates the playout state def on_playout_state_change(source_type) = if source_type == "fallback" then engine_state.is_fallback := true else engine_state.is_fallback := false end end # Called when some new metadata info is available def on_metadata_notification(meta) = # FIXME For some reason stream channels do not pass the `source` property in meta channel_name = meta["source"] source_type = eval_source_type(channel_name) on_playout_state_change(source_type) log(level=3, label="metadata", "Raw metadata before POST:\n\n #{meta}\n\n") show_name = ref(list.assoc(default="", "show_name", meta)) show_id = ref(list.assoc(default="", "show_id", meta)) timeslot_id = list.assoc(default="-1", "timeslot_id", meta) playlist_id = list.assoc(default="-1", "playlist_id", meta) playlist_track_num = list.assoc(default="", "playlist_item", meta) track_start = list.assoc(default=meta["track_start"], "on_air", meta) track_duration = get_meta_track_duration(meta) track_type = eval_track_type(meta["track_type"], meta["source"]) track_artist = list.assoc(default=meta["track_artist"], "artist", meta) track_album = list.assoc(default=meta["track_album"], "album", meta) track_title = list.assoc(default=meta["track_title"], "title", meta) if source_type == "fallback" then log(level=3, label="metadata", "Detected FALLBACK channel `#{channel_name}` playing \ (Show ID: #{!fallback_show_id})") show_name := !fallback_show_name show_id := !fallback_show_id end playlog = [ ("log_source", engine_id), ("show_name", !show_name), ("show_id", !show_id), ("timeslot_id", timeslot_id), ("playlist_id", playlist_id), ("track_type", track_type), ("track_start", track_start), ("track_duration", "#{track_duration}"), ("track_title", track_title), ("track_album", track_album), ("track_artist", track_artist), ("track_num", playlist_track_num) ] if playlog["show_id"] == "" then log(level=3, label="metadata", "Skip posting playlog because of missing show ID!") else post_playlog(engine_api_playlog, playlog) end end ##################################### # INPUTS # ##################################### # Enable queue sources %include "in_queue.liq" # Enable fallback sources %include "in_fallback.liq" # Enable stream overtakes %include "in_stream.liq" # Enabled line in from soundcard %include "in_soundcard.liq" ##################################### # ROUTING # ##################################### mixer = mix(id="mixer", list.append( [ input_filesystem_0, input_filesystem_1, input_http_0, input_http_1 ], !inputs ) ) stripped_stream = blank.strip( id="stripped_stream", track_sensitive=false, max_blank=fallback_max_blank, min_noise=fallback_min_noise, threshold=fallback_threshold, mixer ) output_source = attach_fallback_source(stripped_stream) ##################################### # OUTPUTS # ##################################### # create soundcard output %include "out_soundcard.liq" # stream output %include "out_stream.liq" # enable socket functions %include "serverfunctions.liq"