Skip to content
Snippets Groups Projects
in_soundcard.liq 3.21 KiB
Newer Older
  • Learn to ignore specific revisions
  • #
    # 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/>.
    
    
    
    
    in_line_insert_callbacks = ref([])
    
    
    
    #####################################
    #            FUNCTIONS              #
    #####################################
    
    usage_set_track_metadata = "set_track_metadata { \
            \"show_name\": \"Analog Ambient\", \
    
            \"show_id\": 111, \
            \"timeslot_id\": 222, \
            \"playlist_id\": 333, \
    
            \"playlist_item\": \"\", \
            \"track_type\": 2, \
            \"track_start\": \"2022/02/22 22:02:22\", \
            \"track_duration\": 808, \
            \"track_title\": \"Lorem Ipsum\", \
            \"track_album\": \"\", \
            \"track_artist\": \"\" \
        }"
    
    
    def get_input_line(source_id, device) =
    
        if use_alsa == true then
    
            input.alsa(id=source_id, device=device, bufferize=!alsa_buffered_input)
    
        elsif use_jack == true then
    
            input.jack(id=source_id)
    
            input.pulseaudio(id=source_id, client="aura_engine_#{source_id}")
    
    
    def create_input_line(source_id, device) =
        in_line = get_input_line(source_id, device)
    
        # Enable metadata insertion and store callbacks
        in_line = insert_metadata(id=source_id, in_line)
        in_line_insert_callbacks := list.append([("#{source_id}", in_line.insert_metadata)], !in_line_insert_callbacks)
    
        # Old Liquidsoap approach:
        # in_line.on_metadata(on_metadata_notification)
        # New Liquidsoap 2.1 approach, which should not trigger when inactive:
        in_line = source.on_metadata(id=source_id, in_line, on_metadata_notification)
        inputs := list.append([in_line], !inputs)
    
        server.register(namespace=source.id(in_line),
            description="Sets the current track metadata for a channel",
            usage=usage_set_track_metadata,
            "set_track_metadata",
    
            fun (json_string) -> begin
                log("Received JSON to set track metadata on channel \
    
                    'in_line_0' to:\n #{json_string}")
    
                metadata = build_metadata(json_string)
                insert_callback = list.assoc(source_id, !in_line_insert_callbacks)
                insert_callback(metadata)
                "OK"
            end
        )
    
    end
    
    
    #####################################
    #             SOURCES               #
    #####################################
    
    
    if a0_in != "" then
    
        create_input_line("in_line_0", a0_in)
    
    end
    
    if a1_in != "" then
    
        create_input_line("in_line_1", a1_in)
    
    end
    
    if a2_in != "" then
    
        create_input_line("in_line_2", a2_in)
    
    end
    
    if a3_in != "" then
    
        create_input_line("in_line_3", a3_in)
    
    end
    
    if a4_in != "" then
    
        create_input_line("in_line_4", a4_in)