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 }