Files
2025-11-06 00:46:47 +01:00

83 lines
3.1 KiB
Bash

export MUSIC_DIR="$HOME/Music"
function music_get_song_info_from_file() {
local path="$1"
local mpd_path="$path"
if [[ ! -f "$path" && -f "$MUSIC_DIR/$path" ]]
then
path="$MUSIC_DIR/$path"
else
mpd_path="$(echo "$path" | tail -c+$(( $(echo "$MUSIC_DIR" | wc -c) + 1 )))"
fi
if [[ ! -f "$path" ]]
then
echo "ERROR: music_get_song_info_from_file: file not found: $path" >&2
exit 1
fi
if [[ "$(echo "${path}" | sed -e 's/^.*\.\([^\.]*\)$/\1/')" == "mp3" ]]
then
local metadata="mp3"
local data="$(id3v2 -l "${path}")"
local genre="$(echo "$data" | grep '^TCON' | sed -e 's/^.*: //' -e 's/ ([0-9]*)$//')"
local artist="$(echo "$data" | grep '^TPE2' | sed -e 's/^.*: //')"
local album="$(echo "$data" | grep '^TALB' | sed -e 's/^.*: //')"
local title="$(echo "$data" | grep '^TIT2' | sed -e 's/^.*: //')"
else
local metadata="flac"
local data="$(ffmpeg -i "${path}" 2>&1)"
local genre="$(echo "$data" | grep GENRE | sed -e 's/^.*: //')"
local artist="$(echo "$data" | grep ARTIST | sed -e 's/^.*: //')"
local album="$(echo "$data" | grep ALBUM | sed -e 's/^.*: //')"
local title="$(echo "$data" | grep TITLE | sed -e 's/^.*: //')"
fi
echo "{\"path\":{\"file\":\"$path\",\"mpd\":\"$mpd_path\"},\"title\":\"$title\",\"album\":\"$album\",\"artist\":\"$artist\",\"genre\":\"$genre\"}"
}
function music_process_genre() {
local song="$1"
local genre="$(echo "$song" | jq -c '.genre' || error_here)"
local likeLevel="2"
local blockLevel="0"
if [[ "$(echo "$genre" | grep --no-ignore-case 'L[0-3]')" != "" ]]
then
likeLevel="$(echo "$genre" | grep --no-ignore-case -o 'L[0-3]' | grep -o '[0-3]')"
genre="$(echo $genre | sed -e 's/L[0-3]//' -e 's/ / /g' -e 's/^" */"/' -e 's/ *"$/"/')"
fi
if [[ "$(echo "$genre" | grep --no-ignore-case 'B[0-3]')" != "" ]]
then
blockLevel="$(echo "$genre" | grep --no-ignore-case -o 'B[0-3]' | grep -o '[0-3]')"
genre="$(echo $genre | sed -e 's/B[0-3]//' -e 's/ / /g' -e 's/^" */"/' -e 's/ *"$/"/')"
fi
local playlist="all"
if [[ "${genre,,}" == "lofi" ]]
then
playlist="lofi"
elif [[ "$(echo ${genre} | grep --no-ignore-case LE)" != "" ]]
then
playlist="le"
genre="$(echo $genre | sed -e 's/LE//' -e 's/ / /g' -e 's/^" */"/' -e 's/ *"$/"/')"
elif [[ "$(echo ${genre} | grep --no-ignore-case ME)" != "" ]]
then
playlist="me"
genre="$(echo $genre | sed -e 's/ME//' -e 's/ / /g' -e 's/^" */"/' -e 's/ *"$/"/')"
elif [[ "$(echo ${genre} | grep --no-ignore-case HE)" != "" ]]
then
playlist="he"
genre="$(echo $genre | sed -e 's/HE//' -e 's/ / /g' -e 's/^" */"/' -e 's/ *"$/"/')"
elif [[ "$(echo ${genre} | grep --no-ignore-case DNP)" == "" ]]
then
playlist="dnp"
genre="$(echo $genre | sed -e 's/DNP//' -e 's/ / /g' -e 's/^" */"/' -e 's/ *"$/"/')"
fi
echo "$song {\"genre\":$genre,\"blockLevel\":$blockLevel,\"likeLevel\":$likeLevel,\"playlist\":\"$playlist\"}" \
| jq -c -s add || error_here
}