soapdish/scripts/system/system-update_hardware_audi...

93 lines
3.3 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# SYSTEM: UPDATE AUDIO FRAME SIZE
# Run debug then search log for instance of frame size. Assgn to variable then write to anonradio-config.json
# Includes and Declarations (global variables, formatting, and functions)
source "${APPLICATION_ROOT}/scripts/system/system-functions"
source "${APPLICATION_ROOT}/scripts/system/system-declarations"
# Kill process (as a safeguard)
sudo pkill "liquidsoap";
# Get active config name, construct path to streamable config file (for validation)
CURRENTLY_ACTIVE_CONFIG_NAME=$(<"$CONFIG_FILE_IDENTIFIER_PATH")
STREAMABLE_CONFIG_FILE_PATH="$CONFIG_DIRECTORY/config-$CURRENTLY_ACTIVE_CONFIG_NAME.json"
# Check if config file exists
if [[ -f "$STREAMABLE_CONFIG_FILE_PATH" ]];
# If exists
then
# Set up timestamp formatting, path, then create file and set permission for coming log-dump
TIMESTAMP_FILENAME="log-$(date +%s)"
CURRENT_CHOWN_USER=$(whoami)
FULL_LOG_FILE_PATH="$LOG_FOLDER_PATH/buffer_evaluation_$TIMESTAMP_FILENAME"
sudo touch "$FULL_LOG_FILE_PATH"
sudo chmod 755 "$FULL_LOG_FILE_PATH"
sudo chown "$CURRENT_CHOWN_USER" "$FULL_LOG_FILE_PATH"
# Log color formatting of log, then export log to specified log file (butter_evaluation_log-[timestamp])
printf "${COLOR_GRAY}";
liquidsoap -v --debug 'input.alsa(bufferize=false)' >> $FULL_LOG_FILE_PATH & sleep 3;
sudo pkill "liquidsoap";
sleep 2
printf "${COLOR_DEFAULT}"
# Notification of command edecution
confirmation_message "[H] Review Hardware Audio Frame Size:"
# sed to strip away just want
# Example log line (for reference):
# 2019/11/09 19:11:09 [frame:3] Frame size must be a multiple of 1764 ticks = 1764 audio samples = 1 video samples.
BUFFER_RECOMMENDED=$(sed -e s/"^.*ticks = "// -e s/" audio samples.*$"// <<< $(sed -n "s/Frame size must be a multiple of//p" $FULL_LOG_FILE_PATH))
BUFFER_DECLARED=$(sed -e s/'[ \t]*\"\"\:\"'// -e s/'".*'// <<< $(sed -n "s/"hardware_audio_frame_size"//p" $STREAMABLE_CONFIG_FILE_PATH))
# Check if declared AFS buffer size is a multiple of recommended AFS buffer (using bc)
# Then, if checked result has 8 decimal places of zeroes, then echo appropriate notice
BUFFER_MULTIPLE_CHECK=`echo "scale=8; $BUFFER_DECLARED/$BUFFER_RECOMMENDED" | bc -l`
if [[ $BUFFER_MULTIPLE_CHECK == *".00000000"* ]]; then
NOTICE="${COLOR_GREEN}${SYMBOL_CHECKMARK}${COLOR_DEFAULT} ${FONT_BOLD}Config settings OK! (config AFS is multiple of recommended AFS)${FONT_DEFAULT}"
else
NOTICE="${FONT_BOLD}${COLOR_YELLOW}${SYMBOL_HAZARD}${COLOR_DEFAULT} Warning: Config AFS is not a multiple of recommended AFS${FONT_DEFAULT}"
fi
# Output / Reporting:
printf "\n"
printf "\n"
printf "${FONT_BOLD} HARDWARE, AUDIO FRAME SIZE (AFS):${FONT_DEFAULT}\n"
printf "\n"
# printf " • Default system frame size - $BUFFER_OBSERVED\n"
printf " Recommended frame size - $BUFFER_RECOMMENDED\n"
printf " Your current config's frame size - $BUFFER_DECLARED\n"
printf "\n"
printf " $NOTICE\n"
printf "\n"
printf "\n"
printf "\n"
# Unset Variables
IDENTIFYING_STRING=""
BUFFER_LINE=""
EVALUATED_SAMPLES=""
BUFFER_OBSERVED=""
NOTICE=""
# If no config file exists
else
error_message "[H] Review Hardware Audio Frame Size: No config file to reference. Please specify."
echo ""
fi