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"
)
)
print(
"\tConfig file: '#{config}'"
)
engine_config_folder = string.split(separator="/engine-core.ini", config)
engine_config_folder = list.nth(default="../config/", engine_config_folder, 0)
print(
"\tengine_config_folder = '#{engine_config_folder}'"
)
# Retrieve a setting either bei 1.) environment variable or 2.) config property.
# If none is available the default value is returned.
def get_setting(default_value, config_prop, env_var) =
dv = list.assoc(default=default_value, config_prop, ini)
environment.get(default=dv, env_var)
# 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)
lqs_allow_root =
get_setting("false", "liquidsoap_as_root", "AURA_ENGINE_RUN_AS_ROOT")
if
lqs_allow_root == "true"
then
print(
"\tAllow Liquidsoap running as root user: true"
)
settings.init.allow_root.set(true)
print(
"\tAllow Liquidsoap running as root user: false"
)
settings.init.allow_root.set(false)
server_timeout =
float_of_string(
get_setting("16380.", "server_timeout", "AURA_ENGINE_SERVER_TIMEOUT")
)
settings.server.timeout.set(server_timeout)
telnet_server_enable =
get_setting("true", "telnet_server_enable", "AURA_ENGINE_TELNET_ENABLE")
telnet_server_host =
get_setting("127.0.0.1", "telnet_server_host", "AURA_ENGINE_TELNET_HOST")
telnet_server_port =
int_of_string(
get_setting("1234", "telnet_server_port", "AURA_ENGINE_TELNET_PORT")
)
if
telnet_server_enable != "true"
then
print(
"\tLiquidsoap Telnet Server: disabled"
)
settings.server.telnet.set(false)
print(
"\tLiquidsoap Telnet Server at #{telnet_server_host}:#{telnet_server_port} (#{
server_timeout
}s timeout)"
)
settings.server.telnet.bind_addr.set(telnet_server_host)
settings.server.telnet.port.set(telnet_server_port)
settings.server.telnet.set(true)
settings.console.colorize.set("always")
#settings.request.grace_time.set(2.)
engine_version =
process.read(
"cat ../VERSION"
)
log(
"######################################################################################"
)
log(
"AURA Engine:Core v#{engine_version} starting ..."
)
log(
"######################################################################################"
)
log(
"System 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 = get_setting("../logs", "log_dir", "AURA_ENGINE_CORE_LOG_DIR")
log_file = "#{log_dir}/engine-core.log"
settings.log.file.path.set(log_file)
print(
"\tLogging to '#{log_file}' with log level #{log_level}"
)
log(
"\tLog level #{log_level}"
)
log(
"\tConfig file: '#{config}'"
)
socket_dir = get_setting("../socket", "socket_dir", "AURA_ENGINE_SOCKET_DIR")
socket_file = "#{socket_dir}/engine.sock"
if
socket_dir != ""
then
log(
"\tSocket location: '#{socket_file}'"
)
settings.server.socket.path.set(socket_file)
settings.server.socket.set(true)
log(
"\tCRITICAL: No socket directory set!"
)
# settings.audio.converter.samplerate.converters.set(["ffmpeg","libsamplerate","native"])
# settings.decoder.decoders.set(["META","WAV","AIFF","FLAC","AAC","MP4","OGG","MAD"])
a0_in = get_setting("", "input_device_0", "AURA_ENGINE_INPUT_DEVICE")
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 = get_setting("", "output_device_0", "AURA_ENGINE_OUTPUT_DEVICE")
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)
# ALSA / pulse settings
soundsystem = get_setting("alsa", "soundsystem", "AURA_ENGINE_SOUNDSYSTEM")
use_alsa = soundsystem == "alsa"
use_jack = soundsystem == "jack"
log(
"\nAudio Settings:"
)
log(
"\tOutput device: #{a0_out}"
)
log(
"\tInput device: #{a0_in}"
)
enable_replaygain_resolver =
bool_of_string(
get_setting(
"false",
"enable_replaygain_resolver",
"AURA_ENGINE_ENABLE_REPLAYGAIN_RESOLVER"
)
)
if
enable_replaygain_resolver == true
then
enable_replaygain_metadata()
log(
"\tReplayGain resolver enabled"
)
frame_audio_sample_rate =
int_of_string(
get_setting(
"0.0", "frame_audio_sample_rate", "AURA_ENGINE_FRAME_SAMPLERATE"
)
)
frame_duration =
float_of_string(
get_setting("0.0", "frame_duration", "AURA_ENGINE_FRAME_DURATION")
int_of_string(get_setting("0", "frame_audio_size", "AURA_ENGINE_FRAME_SIZE"))
if
frame_audio_sample_rate > 0
then
log(
"\tframe.audio.samplerate = #{frame_audio_sample_rate} Hz"
)
settings.frame.audio.samplerate.set(frame_audio_sample_rate)
if
frame_duration > 0.0
then
log(
"\tframe.duration = #{frame_duration} seconds"
)
settings.frame.duration.set(frame_duration)
if
frame_audio_size > 0
then
log(
"\tframe.audio.size = #{frame_audio_size} ticks"
)
settings.frame.audio.size.set(frame_audio_size)
alsa_buffered_input = ref(true)
alsa_buffered_output = ref(true)
if
use_alsa
then
log(
"\nALSA Settings:"
)
alsa_buffered_input :=
bool_of_string(
get_setting(
"true", "alsa_buffered_input", "AURA_ENGINE_ALSA_BUFFERED_INPUT"
)
)
alsa_buffered_output :=
bool_of_string(
get_setting(
"true", "alsa_buffered_output", "AURA_ENGINE_ALSA_BUFFERED_OUTPUT"
)
)
alsa_buffer =
int_of_string(get_setting("0", "alsa_buffer", "AURA_ENGINE_ALSA_BUFFER"))
alsa_buffer_length =
int_of_string(
get_setting("0", "alsa_buffer_length", "AURA_ENGINE_ALSA_BUFFER_LENGTH")
int_of_string(get_setting("0", "alsa_periods", "AURA_ENGINE_ALSA_PERIODS"))
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
log(
"\talsa_buffered_input = #{alsa_buffered_input()}"
)
log(
"\talsa_buffered_output = #{alsa_buffered_output()}"
)
if
alsa_buffer > 0
then
log(
"\tInternal buffer size (alsa.alsa_buffer) = #{alsa_buffer}"
)
settings.alsa.alsa_buffer.set(alsa_buffer)
end
if
alsa_buffer_length > 0
then
log(
"\tBuffer size, in frames (alsa.buffer_length) = #{alsa_buffer_length}"
)
settings.alsa.buffer_length.set(alsa_buffer_length)
end
if
alsa_periods > 0
then
log(
"\tPeriods (alsa.periods) = #{alsa_periods}"
)
settings.alsa.periods.set(alsa_periods)
end
log(
"\nStream Settings:"
)
input_stream_max_buffer =
float_of_string(
get_setting(
"5.0", "input_stream_max_buffer", "AURA_ENGINE_STREAM_INPUT_MAX_BUFFER"
)
)
input_stream_timeout =
float_of_string(
get_setting(
"10.0", "input_stream_timeout", "AURA_ENGINE_STREAM_INPUT_TIMEOUT"
)
)
log(
"\tInput stream max buffer: #{input_stream_max_buffer}"
)
log(
"\tInput stream timeout: #{input_stream_timeout}"
)
s0_enable =
get_setting("false", "stream_0", "AURA_ENGINE_STREAM_OUTPUT_ENABLE") == "true"
# s1_enable = list.assoc(default="false", "stream_1", ini) == "true"
# s2_enable = list.assoc(default="false", "stream_2", ini) == "true"
# s3_enable = list.assoc(default="false", "stream_3", ini) == "true"
# s4_enable = list.assoc(default="false", "stream_4", ini) == "true"
log(
"\tOutput stream enabled: #{s0_enable}"
)
log(
"\nOther Settings:"
)
audio_playlist_folder =
get_setting(
"../audio/playlists", "audio_playlist_folder", "AURA_ENGINE_PLAYLIST_FOLDER"
)
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
fallback_show_name =
ref(
get_setting(
"Station Fallback",
"fallback_show_name",
"AURA_ENGINE_FALLBACK_SHOW_NAME"
)
)
fallback_show_id =
ref(get_setting("-1", "fallback_show_id", "AURA_ENGINE_FALLBACK_SHOW_ID"))
fallback_type =
get_setting("folder", "fallback_type", "AURA_ENGINE_FALLBACK_TYPE")
fallback_station_playlist_name =
get_setting(
"station-fallback-playlist.m3u",
"fallback_music_playlist",
"AURA_ENGINE_FALLBACK_PLAYLIST"
)
fallback_station_playlist_path =
"#{audio_playlist_folder}/#{fallback_station_playlist_name}"
fallback_station_dir =
get_setting(
"../audio/fallback", "fallback_music_folder", "AURA_ENGINE_FALLBACK_FOLDER"
)
fallback_station_dir_reload =
int_of_string(
get_setting(
"300",
"fallback_music_folder_reload",
"AURA_ENGINE_FALLBACK_FOLDER_RELOAD"
)
)
fallback_max_blank =
float_of_string(
get_setting("15.", "fallback_max_blank", "AURA_ENGINE_FALLBACK_MAX_BLANK")
)
fallback_min_noise =
float_of_string(
get_setting("0.", "fallback_min_noise", "AURA_ENGINE_FALLBACK_MIN_NOISE")
)
fallback_threshold =
float_of_string(
get_setting("-80.", "fallback_threshold", "AURA_ENGINE_FALLBACK_THRESHOLD")
)
log(
"\tfallback_station_playlist_path = '#{fallback_station_playlist_path}'"
)
log(
"\tfallback_station_dir = '#{fallback_station_dir}'"
)
# 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))
# Metadata Configuration
engine_meta_key_show_id =
get_setting("show_id", "meta_key_show_id", "AURA_ENGINE_META_KEY_SHOW_ID")
engine_default_track_type =
get_setting("0", "default_track_type", "AURA_ENGINE_DEFAULT_TRACK_TYPE")
engine_api_playlog =
get_setting(
"http://127.0.0.1:8008/api/v1/playlog",
"api_url_playlog",
"AURA_ENGINE_API_URL_PLAYLOG"
)
# "1" or "2" used for HA setups
engine_id = get_setting("1", "engine_id", "AURA_ENGINE_ID")
log(
"\n######################################################################################"
)