Files
sh-goodies/mus.sh
T

36 lines
1.1 KiB
Bash
Raw Normal View History

2026-04-25 19:48:49 +03:00
#!/bin/sh
# Musmaster: find and play music in any directory
# Depends on find and fzf
# Created by Luxferre in 2026, released into the public domain
[ -z "$PLAYER" ] && PLAYER='mpg123'
[ -z "$FTYPES" ] && FTYPES='mp3 MP3'
2026-04-25 22:02:45 +03:00
if [ -z "$TAGDUMP" ]; then
TAGDUMP='mpg123-id3dump -n {} | grep -E "^(Title|Artist|Album|Year|Comment|Genre):" | sort -u'
fi
2026-04-25 19:48:49 +03:00
mdir="$1"
[ -z "$mdir" ] && mdir='.'
set --
for ext in $FTYPES; do
if [ $# -eq 0 ]; then
set -- -name "*.$ext"
else
set -- "$@" -o -name "*.$ext"
fi
done
cd "$mdir"
muslist="$(find . -type f \( "$@" \))"
dirlist="$(find . -type f \( "$@" \) -print0 | xargs -0 dirname | sort -u)"
muslist="$(printf '%s\n%s' "$muslist" "$dirlist" | sort -u)"
2026-04-25 22:02:45 +03:00
PREVIEWCMD="[ -d {} ] && ls -1 {} || ([ {} != 'Quit' ] && $TAGDUMP)"
2026-04-25 19:48:49 +03:00
while true; do
2026-04-26 09:36:21 +03:00
src="$(printf '%s\nQuit' "$muslist" | grep . | fzf --tac --preview="$PREVIEWCMD" -0 -1)"
2026-04-25 19:48:49 +03:00
[ -d "$src" ] && src="$(find "$src" -type f \( "$@" \) | sort -u)"
[ "$src" = 'Quit' ] && break
if [ -n "$src" ]; then
2026-04-25 19:58:29 +03:00
printf '%s\n' "$src" | while read -r track; do
2026-04-25 19:48:49 +03:00
$PLAYER "$track"
done
fi
done