85 lines
3.1 KiB
Bash
85 lines
3.1 KiB
Bash
|
|
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
|
|
}
|
|
|
|
|