#!/bin/bash #----------------------------------------------------------------------------------------------------------------------------------- # # Album MetaData Save # # Copyright (C) 2016-2026 Arnaud G. GIBERT # mailto:arnaud@rx3.net # # This is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; If not, see # . # #----------------------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------------------- # Includes #----------------------------------------------------------------------------------------------------------------------------------- : "${RX3_LIB_DIR:=/usr/lib/rx3}" . "${RX3_LIB_DIR}/music_tools.bash" #----------------------------------------------------------------------------------------------------------------------------------- # Global Variables #----------------------------------------------------------------------------------------------------------------------------------- declare -g VERSION="1.0.0" declare -g NAME="album_metadata_save" declare -g HELP="usage: [-h | --help] | [-V | --version] | [-T | --test] [-v | --verbose] [-f | --factoring] [-s | --standardising] " declare -g FACTORING="FALSE" declare -g STANDARDISING="FALSE" declare -g SOURCE_DIR="" declare -g METADATA_FILE="" declare -g MODE="DEFAULT" declare -g VERBOSE="FALSE" declare -g DRY_RUN="FALSE" #----------------------------------------------------------------------------------------------------------------------------------- # Version Print #----------------------------------------------------------------------------------------------------------------------------------- ams_version_print() { version_print } #----------------------------------------------------------------------------------------------------------------------------------- # Help Print #----------------------------------------------------------------------------------------------------------------------------------- ams_help_print() { ams_version_print help_print } #----------------------------------------------------------------------------------------------------------------------------------- # Arg Parse #----------------------------------------------------------------------------------------------------------------------------------- ams_args_parse() { tmp_args=$(getopt -o ThVvfs --long test,help,version,verbose,factoring,standardising -n "${NAME}" -- "$@") if [ $? != 0 ]; then echo "Terminating..." >&2; exit 1; fi eval set -- "${tmp_args}" while true do case "$1" in # Mode switches -T|--test) MODE="TEST"; shift;; -h|--help) MODE="EXIT"; ams_help_print; shift;; -V|--version) MODE="EXIT"; ams_version_print; shift;; # Global options -v|--verbose) VERBOSE="TRUE"; shift;; -f|--factoring) FACTORING="TRUE"; shift;; -s|--standardising) STANDARDISING="TRUE"; shift;; --) shift; break;; *) echo_error "args_parse internal error [$1]!"; exit 1;; esac done if [[ "${MODE}" != "EXIT" ]] then if [[ "${#}" != "2" ]] then if [[ "${#}" -lt "2" ]] then echo_error "Not enough args!" else echo_error "Too many args!" fi MODE="EXIT" ams_help_print else SOURCE_DIR="$1" METADATA_FILE="$2" fi fi } #----------------------------------------------------------------------------------------------------------------------------------- # Main #----------------------------------------------------------------------------------------------------------------------------------- ams_args_parse "$@" if [[ "${MODE}" == "EXIT" ]] then exit 0 else if [[ "${MODE}" == "TEST" ]] then DRY_RUN="TRUE" fi fi echo_error "${NAME}: Mode: [${MODE}] Verbose: [${VERBOSE}] Factoring: [${FACTORING}] Standardising: [${STANDARDISING}] Source_Dir: [${SOURCE_DIR}] MetaData_File: [${METADATA_FILE}]" find "${SOURCE_DIR}" -maxdepth 1 -name '*.flac' -o -name '*.mp3' | sort | ( nb_track=0 mt_tagtab_alloc while read track_file do nb_track=$((nb_track + 1)) if [[ "${FACTORING}" == "TRUE" ]] then mt_tagtab_read "${nb_track}" "${track_file}" "FACTORING" else mt_tagtab_read "${nb_track}" "${track_file}" "NOFACTORING" fi done track_id=0 while [[ "${track_id}" -le "${nb_track}" ]] do if [[ "${track_id}" == 0 ]] then echo "DEF" else echo "SOT" fi if [[ "${STANDARDISING}" == "TRUE" ]] then mt_tagtab_dump "${track_id}" "STANDARD" else mt_tagtab_dump "${track_id}" "PASSTHROUGH" fi echo "EOT" track_id=$((track_id + 1)) done echo "EOA" echo 1>&2 "NB Track dumped: [${nb_track}]" ) | ( if [[ "${DRY_RUN}" == "TRUE" ]] then cat else tee "${METADATA_FILE}" fi ) | ( if [[ "${VERBOSE}" == "TRUE" ]] then cat else cat >/dev/null fi )