1
0

Recreate repository

This commit is contained in:
ami 2025-01-10 22:44:45 -05:00
parent 44c67afc9a
commit 772d5a76a0
No known key found for this signature in database
6 changed files with 243 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
artwork
songs
metadata

49
Makefile Normal file
View File

@ -0,0 +1,49 @@
INSTALL_DIR = ./install
SONGS_DIR = ./data/raw/songs
ARTWORK_DIR = ./data/raw/artwork
METADATA_DIR = ./data/processed/01__metadata
ENCODE_DIR = ./data/processed/02__encode
METADATA_FILE = ./data/raw/metadata.tsv
SONG_FILES = $(wildcard $(SONGS_DIR)/*)
METADATA_FILES = $(addsuffix .txt, $(addprefix $(METADATA_DIR)/, $(basename $(notdir $(SONG_FILES)))))
ENCODE_FILES = $(addsuffix .flac, $(addprefix $(ENCODE_DIR)/, $(basename $(notdir $(SONG_FILES)))))
.PHONY: install all encode metadata clean
# **** Step 01 - Metadata Generation ****
metadata: $(METADATA_FILES)
$(METADATA_FILES): $(METADATA_FILE) ./src/01__metadata.sh
@./src/01__metadata.sh \
-i $(METADATA_FILE) \
-o $(METADATA_DIR)
# **** Step 02 - Encode ****
encode: $(ENCODE_FILES)
$(ENCODE_FILES): $(ENCODE_DIR)/%.flac: $(SONGS_DIR)/% $(METADATA_FILES) ./src/02__encode.sh
@./src/02__encode.sh \
-i $< \
-m $(addsuffix .txt, $(addprefix $(METADATA_DIR)/, $(basename $(notdir $<)))) \
-a $(ARTWORK_DIR) \
-o $@
# **** Step 03 - Install ****
install:
@./src/install.sh \
-r $(ENCODE_DIR) \
-m $(METADATA_DIR) \
-i "$(INSTALL_DIR)"
all: metadata encode
clean:
rm -rf $(ENCODE_DIR)
rm -rf $(METADATA_DIR)
mkdir $(ENCODE_DIR)
mkdir $(METADATA_DIR)

27
scripts/flac.sh Normal file
View File

@ -0,0 +1,27 @@
#!/bin/bash
# Variables for color print.
GREEN="\e[32m"
CYAN="\e[36m"
END="\e[0m"
# Get filename and extension.
name="${snakemake_input[0]##*/}"
ext="${name##*.}"
printf "%b: %s\r" "${CYAN}[ i ]${END} Encoding file" "${name}"
if [[ "${ext}" != ".flac" ]]
then
ffmpeg \
-i "${snakemake_input[0]}" \
-vn \
-c:a flac \
-hide_banner \
-loglevel error \
"${snakemake_output[0]}"
else
cp "${snakemake_input[0]}" "${snakemake_output[0]}"
fi
printf "%b: %s\r" "${GREEN}[ ✓ ]${END} Finished encoding file" "${name}"

47
src/01__metadata.sh Executable file
View File

@ -0,0 +1,47 @@
#!/bin/bash
# Variables for color print.
GREEN="\e[32m"
RED="\e[31m"
CYAN="\e[36m"
END="\e[0m"
# Get command line arguments.
while getopts i:o: flag
do
case "${flag}" in
i) input_metadata=${OPTARG};;
o) output_dir=${OPTARG};;
*) printf "%b\n" "${RED}[ ! ]${END} Invalid Argument"
exit 1;;
esac
done
{
# Skip header line of .tsv.
read -r
while IFS=$'\t' read -r code extension track title artist album year disc artwork
do
file_path="${output_dir}/${code}.txt"
printf "%b: %s\r" "${CYAN}[ i ]${END} Processing file" "${code}${extension}"
# Create metadata file.
touch "${file_path}"
# Write metadata to file.
{
printf "%s\t" "${extension}"
printf "%s\t" "${track}"
printf "%s\t" "${title}"
printf "%s\t" "${artist}"
printf "%s\t" "${album}"
printf "%s\t" "${year}"
printf "%s\t" "${disc}"
printf "%s" "${artwork}"
} >> "${file_path}"
printf "%b: %s\n" "${GREEN}[ ✓ ]${END} Generated metadata file for" "${code}${extension}"
done
} < "${input_metadata}"

68
src/02__encode.sh Executable file
View File

@ -0,0 +1,68 @@
#!/bin/bash
# Variables for color print.
GREEN="\e[32m"
RED="\e[31m"
CYAN="\e[36m"
END="\e[0m"
# Get command line arguments.
while getopts i:m:a:o: flag
do
case "${flag}" in
i) input_file=${OPTARG};;
m) input_metadata=${OPTARG};;
a) artwork_dir=${OPTARG};;
o) output_file=${OPTARG};;
*) printf "%b\n" "${RED}[ ! ]${END} Invalid Argument"
exit 1;;
esac
done
printf "%b: %s\r" "${CYAN}[ i ]${END} Encoding file" "${input_file}"
# Read file metadata.
IFS=$'\t' read -r extension track title artist album year disc artwork < "${input_metadata}"
if [[ "${extension}" != ".flac" ]]
then
ffmpeg \
-i "${input_file}" \
-vn\
-c:a flac \
-hide_banner \
-loglevel error \
"${output_file}"
else
cp "${input_file}" "${output_file}"
fi
# Remove any exsiting metadata.
metaflac \
--remove-all-tags \
"${output_file}"
# Remove any album artwork.
metaflac \
--remove \
--block-type=PICTURE,PADDING \
--dont-use-padding \
"${output_file}"
metaflac \
--remove-tag=COVERART \
--dont-use-padding \
"${output_file}"
# Write new metadata.
metaflac \
--set-tag=ALBUM="${album}" \
--set-tag=ARTIST="${artist}" \
--set-tag=TITLE="${title}" \
--set-tag=TRACKNUMBER="${track}" \
--set-tag=DATE="${year}" \
--set-tag=DISCNUMBER="${disc}" \
--import-picture-from="${artwork_dir}/${artwork}" \
"${output_file}"
printf "%b: %s\n" "${GREEN}[ ✓ ]${END} Succesfully encoded file" "${input_file}"

49
src/install.sh Executable file
View File

@ -0,0 +1,49 @@
#!/bin/bash
# Variables for color print.
GREEN="\e[32m"
RED="\e[31m"
CYAN="\e[36m"
END="\e[0m"
# Get command line arguments.
while getopts r:m:i: flag
do
case "${flag}" in
r) encode_dir=${OPTARG};;
m) metadata_dir=${OPTARG};;
i) install_dir=${OPTARG};;
*) printf "%b\n" "${RED}[ ! ]${END} Invalid Argument"
exit 1;;
esac
done
# Create install directory (if it does not exist).
mkdir -p "${install_dir}"
for file in "${metadata_dir}"/*.txt
do
# Read file metadata.
IFS=$'\t' read -r extension track title artist album year disc artwork < "${file}"
# Get filename without extension.
filename=$(basename "${file}" ".txt")
# Replace any '/' with '-' in the song title.
title="${title//\//-}"
# Add leading zeroes to disc number.
disc_num=$(printf "%02d" "${disc}")
# Add leading zeroes to track number.
track_num=$(printf "%02d" "${track}")
# Create album directory (if it does not exist).
mkdir -p "${install_dir}/${album}"
# Copy file to installation directory and rename.
cp "${encode_dir}/${filename}.flac" \
"${install_dir}/${album}/${disc_num}-${track_num} - ${title}.flac"
printf "%b: %s\n" "${GREEN}[ ✓ ]${END} Succesfully installed file" "${filename}"
done