Skip to content
Snippets Groups Projects
settings.liq 8.68 KiB
Newer Older
#
# 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/>.


# READ INI FILE
%include "readini.liq"
default_config = "../config/engine-core.ini"
config = list.hd(default=default_config, process.read.lines("ls /etc/aura/engine-core.ini"))
log("Config file used: #{config}")
ini = read_ini(config)
engine_config_folder = string.split(separator="/engine-core.ini", config)
engine_config_folder = list.nth(default="../config/", engine_config_folder, 0)
# VERSION CHECK
liq_min_version = list.assoc(default="2.1", "liquidsoap_min_version", ini)
if not liquidsoap.version.at_least(liq_min_version) then
    print("AURA Engine Core requires at least Liquidsoap v#{liq_min_version}")
    exit(1)
end

# Retrieve a setting either bei 1.) environment variable or 2.) config prop.
# If none is available the default value is returned.
def get_setting(default_value, config_var, env_var) =
    log_level_config = list.assoc(default=default_value, config_var, ini)
    getenv(default=log_level_config, env_var)
end

# ALLOW LIQUIDSOAP RUN AS ROOT
lqs_allow_root = list.assoc(default="false", "liquidsoap_as_root", ini)

# BASICS
settings.console.colorize.set("always")
#settings.request.grace_time.set(2.)

# TELNET SETTINGS
server_timeout = float_of_string(list.assoc(default="60.", "server_timeout", ini))
settings.server.timeout.set(server_timeout)
settings.server.telnet.set(true)
settings.server.telnet.bind_addr.set("0.0.0.0")
settings.server.telnet.port.set(1234)
# LOGGING SETTINGS
settings.log.stdout.set(true)
settings.log.file.set(true)
log_level = get_setting("3", "log_level", "AURA_ENGINE_CORE_LOG_LEVEL")
settings.log.level.set(int_of_string(log_level))
log_dir = list.assoc(default="../logs", "log_dir", ini)
log_file = "#{log_dir}/engine-core.log"
settings.log.file.path.set(log_file)
print "\tLogging to '#{log_file}' with log level #{log_level}"

# SOCKET SETTINGS
settings.server.socket.set(true)
socket_dir = list.assoc(default="../socket", "socket_dir", ini)
socket_file = "#{socket_dir}/engine.sock"
settings.server.socket.path.set(socket_file)
# engine_control = list.assoc(default="localhost:1337", "engine_control_host", ini)

# SOUND CARD SETTINGS
# settings.audio.converter.samplerate.converters.set(["ffmpeg","libsamplerate","native"])
# settings.decoder.decoders.set(["META","WAV","AIFF","FLAC","AAC","MP4","OGG","MAD"])
#print(ini)
a0_in = list.assoc(default="", "input_device_0", ini)
a1_in = list.assoc(default="", "input_device_1", ini)
a2_in = list.assoc(default="", "input_device_2", ini)
a3_in = list.assoc(default="", "input_device_3", ini)
a4_in = list.assoc(default="", "input_device_4", ini)
a0_out = list.assoc(default="", "output_device_0", ini)
a1_out = list.assoc(default="", "output_device_1", ini)
a2_out = list.assoc(default="", "output_device_2", ini)
a3_out = list.assoc(default="", "output_device_3", ini)
a4_out = list.assoc(default="", "output_device_4", ini)

input_stream_max_buffer = float_of_string(list.assoc(default="5.0", "input_stream_max_buffer", ini))
input_stream_timeout = float_of_string(list.assoc(default="10.0", "input_stream_timeout", ini))
# AUDIO AND PLAYLIST SOURCES
audio_playlist_folder = "../audio/playlists"
audio_playlist_folder = list.assoc(default=audio_playlist_folder, "audio_playlist_folder", ini)

# FALLBACK SETTINGS
fallback_show_name = ref(list.assoc(default="Station Fallback", "fallback_show_name", ini))
fallback_show_id = ref(list.assoc(default="-1", "fallback_show_id", ini))
fallback_type = list.assoc(default="folder", "fallback_type", ini)
fallback_station_playlist_name = "station-fallback-playlist.m3u"
fallback_station_playlist_name = list.assoc(default=fallback_station_playlist_name, "fallback_music_playlist", ini)
fallback_station_playlist_path = "#{audio_playlist_folder}/#{fallback_station_playlist_name}"
fallback_station_dir = list.assoc(default="../audio/fallback", "fallback_music_folder", ini)
fallback_station_dir_reload = int_of_string(list.assoc(default="300", "fallback_music_folder_reload", ini))
fallback_max_blank = float_of_string(list.assoc(default="15.", "fallback_max_blank", ini))
fallback_min_noise = float_of_string(list.assoc(default="0.", "fallback_min_noise", ini))
fallback_threshold = float_of_string(list.assoc(default="-80.", "fallback_threshold", ini))

# FADING SETTINGS
# fade_in_time = list.assoc(default="", "fade_in_time", ini) #int_of_string(list.assoc(default="", "fade_in_time", ini))
# fade_out_time = list.assoc(default="", "fade_out_time", ini) #int_of_string(list.assoc(default="", "fade_out_time", ini))

# ALSA / pulse settings
soundsystem = list.assoc(default="", "soundsystem", ini)
use_alsa = soundsystem == "alsa"
use_jack = soundsystem == "jack"
engine_version = process.read("cat ../VERSION")
print("######################################################################################")
print("AURA Engine:Core v#{engine_version} starting ...")
print("######################################################################################")
print("System Settings:")

if lqs_allow_root == "true" then
    print("\tAllow Liquidsoap running as root user")
    settings.init.allow_root.set(true)
end

if socket_dir != "" then
    print("\tSocket location: #{socket_file}")
else
    print("\tCRITICAL: No socket directory set!")
end

print("\nAudio Settings:")

# ReplayGain Settings
enable_replaygain_resolver = bool_of_string(list.assoc(default="false", "enable_replaygain_resolver", ini))
if enable_replaygain_resolver == true then
    enable_replaygain_metadata()
    print("\tReplayGain resolver enabled")
end

# Frame Settings
frame_audio_sample_rate = int_of_string(list.assoc(default="", "frame_audio_sample_rate", ini))
frame_duration = float_of_string(list.assoc(default="", "frame_duration", ini))
frame_audio_size = int_of_string(list.assoc(default="", "frame_audio_size", ini))

if frame_audio_sample_rate > 0 then
    print("\tframe.audio.samplerate = #{frame_audio_sample_rate} Hz")
    settings.frame.audio.samplerate.set(frame_audio_sample_rate)
end
if frame_duration > 0.0 then
    print("\tframe.duration = #{frame_duration} seconds")
    settings.frame.duration.set(frame_duration)
end
if frame_audio_size > 0 then
    print("\tframe.audio.size = #{frame_audio_size} ticks")
    settings.frame.audio.size.set(frame_audio_size)
end
alsa_buffered_input = ref (true)
alsa_buffered_output = ref (true)
if use_alsa then
    print("\n\nALSA Settings:")
    alsa_buffered_input := bool_of_string(list.assoc(default="true", "alsa_buffered_input", ini))
    alsa_buffered_output := bool_of_string(list.assoc(default="true", "alsa_buffered_output", ini))
    alsa_buffer = int_of_string(list.assoc(default="", "alsa_buffer", ini))
    alsa_buffer_length = int_of_string(list.assoc(default="", "alsa_buffer_length", ini))
    alsa_periods = int_of_string(list.assoc(default="", "alsa_periods", ini))
    print("\talsa_buffered_input = #{!alsa_buffered_input}")
    print("\talsa_buffered_output = #{!alsa_buffered_output}")

    if alsa_buffer > 0 then
        print("\tInternal buffer size (alsa.alsa_buffer) = #{alsa_buffer}")
        settings.alsa.alsa_buffer.set(alsa_buffer)
    if alsa_buffer_length > 0 then
        print("\tBuffer size, in frames (alsa.buffer_length) = #{alsa_buffer_length}")
        settings.alsa.buffer_length.set(alsa_buffer_length)
    end
    if alsa_periods > 0 then
        print("\tPeriods (alsa.periods) = #{alsa_periods}")
        settings.alsa.periods.set(alsa_periods)
print("\nOther Settings:")

print("\tengine_config_folder = '#{engine_config_folder}'")
print("\tfallback_station_playlist_path = '#{fallback_station_playlist_path}'")
print("\tfallback_station_dir = '#{fallback_station_dir}'")

# Metadata Configuration
engine_meta_key_show_id = list.assoc(default="show_id", "meta_key_show_id", ini)
engine_default_track_type = list.assoc(default="0", "default_track_type", ini)
engine_api_playlog = list.assoc(default="http://127.0.0.1:8008/api/v1/playlog", "api_url_playlog", ini)
engine_id = list.assoc(default="1", "engine_id", ini) # "1" or "2" used for HA setups
print("\n######################################################################################")