dotfiles/.config/shell/music

108 lines
2.8 KiB
Plaintext
Raw Normal View History

export AUDIO="$DATA/audio"
MUSIC_RAW="$AUDIO/songs/_raw"
2021-10-13 17:15:26 +00:00
alias scbra='scpr zebra "/srv/funkwhale/data/music${PWD/$MUSIC}"'
findsongs() {
2021-11-16 09:20:13 +00:00
find -regextype posix-extended -maxdepth 1 -type f \
2022-11-09 11:45:38 +00:00
-iregex "${1:-.*\.(mp3|flac|wav|m4a)}" -printf "%P\n"
}
addtopl() {
pl=$1
shift
playlists=$MUSIC/Playlists
realpath --relative-to $playlists "$@" | tee -a $playlists/$pl*
}
addmix() {
mv -v "$1.cue" "$AUDIO/recordings/cues"
addsong "$1.flac" Mixes
}
addsong() {
test "$1" = "-q" && shift && quick="true"
local raw="${1%.*}"
local isflac=$(case "$1" in *.flac) echo "true";; esac)
test "$isflac" || (echo "Converting to flac..." && flac "$1" --totally-silent)
test "$quick" || (echo "Press ENTER when the metadata of the flac file is correct..." && read)
echo "Converting to mp3..."
lame -V0 "$1" --silent
mkdir -p "$MUSIC/$2"
mkdir -p "$MUSIC_RAW/$2"
local destination="$MUSIC/$2/$raw.mp3"
echo "Moving mp3 with metadata to $destination"
ffmpeg -i "$raw.mp3" -i "$raw.flac" -c copy -map_metadata 1 "$destination" -v warning "${@:3}" && rm "$raw.mp3"
test ! "$PWD" -ef "$MUSIC_RAW/$2" && mv -v "$raw.flac" "$MUSIC_RAW/$2" && (test "$isflac" || rm -v "$1")
}
addalbum() {
mkdir -p "$MUSIC/$1"
mkdir -p "$MUSIC_RAW/$1"
2022-11-09 11:45:38 +00:00
f1 -regextype posix-extended -type f -iregex "\./(cover|folder)\.(png|jpg|jpeg)" |
2021-11-16 09:20:13 +00:00
while read cover; do
foundcover="true"
cp -v "$cover" "$MUSIC/$1" &&
mv -v "$cover" "$MUSIC_RAW/$1"
done
2022-11-09 11:45:38 +00:00
test "$foundcover" || f1 -regextype posix-extended -type f -iregex ".*\.(png|jpg|jpeg)" |
2021-11-16 09:20:13 +00:00
while read cover; do
cp -v "$cover" "$MUSIC/$1" &&
mv -v "$cover" "$MUSIC_RAW/$1"
done
IFS=$'\n'
for s in $(findsongs ".*\.(flac|wav)"); do
highlight "$s"
addsong -q "$s" "$1" "${@:2}"
done
unset IFS
}
formatsongs() {
2021-11-16 09:20:13 +00:00
(
find -maxdepth 1 -type d | formatin
find "$@" "$PWD" -type d | while read d;
2023-01-09 23:47:53 +00:00
do builtin cd "$d" && findsongs | formatin
2021-11-16 09:20:13 +00:00
done
)
2022-01-05 17:42:20 +00:00
# fd --no-ignore-vcs --type f --extension opus --exec opusdec --quiet "{}" "{.}.wav" \; ".*" "$@"
2022-11-09 11:45:38 +00:00
find "$@" -type f -iname "*.wav" -exec sh -c '
2022-01-05 17:42:20 +00:00
f="{}" &&
echo "Converting $f to ${f%.*}.flac" &&
ffmpeg -i "$f" "${f%.*}.flac" -v warning &&
mv -v "$f" /tmp' \;
}
2021-11-19 11:01:04 +00:00
# Normalize filenames for files given from stdin
2021-11-16 09:20:13 +00:00
formatin() {
while read song; do
new="$(formatsong "$song")"
test "$new" && test "$new" != "$song" && mv -iv "$song" "$new"
done
}
2021-11-19 11:01:04 +00:00
# Normalize the given filename
formatsong() {
2021-11-16 09:20:13 +00:00
echo "$1" | sed -e 's/\b\(ft\|Ft\|Feat\|featuring\)\([ .]\)/feat\2/;
s/\bfeat /feat. /;
2023-01-09 23:47:53 +00:00
s/)(/) (/g;
2022-02-01 10:35:28 +00:00
s/ [[(]\(Free Download\|Original Mix\|Original\|Full Stream\|NCS Release\)[])]//i;
2023-01-09 23:47:53 +00:00
s/ (\(Acoustic\|Live|.* Remix\))/ [\1]/i;
2021-04-11 20:47:51 +00:00
s/ \[\(feat.*\)\]/ (\1)/i;
2021-11-14 13:25:34 +00:00
s/^\([A-z]\+\) The \([^-]\+\)$/\1, the \2/g;
2021-03-20 10:02:53 +00:00
s/ \(\..\{2,4\}\)$/\1/;
s/---/ - /;
2022-06-13 13:47:47 +00:00
s/-LLS\././;
2021-03-20 10:02:53 +00:00
s/^[0-9]\{6\}_//;
2022-01-05 17:42:20 +00:00
s/\([^/]\)_/\1 /g;
2021-11-14 13:25:34 +00:00
s/ \././g;
s/ / /g;
2021-03-20 10:02:53 +00:00
s/\(\w\)+\(\w\)/\1 \2/g' -
}