#!/bin/bash
# ---------------------------------------------------------------------------- #
## \file mp3gain.sh
## \author Sebastien Beaugrand
## \sa http://beaugrand.chez.com/
## \copyright CeCILL 2.1 Free Software license
# ---------------------------------------------------------------------------- #
mp3d=/tmp/mp3d.tmp
mp3g=/tmp/mp3g.tmp
mp3s=/tmp/mp3s.tmp
find . -type d -print | LC_ALL=C sort >$mp3d
ndir=`cat $mp3d | wc -l`
trap "rm $mp3d $mp3g $mp3s; echo; exit 0" SIGINT
if [ "$1" = "-f" ]; then
force=1
fi
# ---------------------------------------------------------------------------- #
# rdexec
# ---------------------------------------------------------------------------- #
rdexec()
{
for ((rj = 1; rj <= ndir; ++rj)); do
rd=`head -n $rj $mp3d | tail -n 1`
eval $1 \""$rd"\" \""$2"\"
done
}
# ---------------------------------------------------------------------------- #
# gain
# ---------------------------------------------------------------------------- #
gain()
{
cd "$1"
if [ -n "$force" ]; then
mp3gain -r -k *.mp3 | grep Applying
return
fi
mp3gain -x -p *.mp3 >$mp3g
find . -maxdepth 1 -name "*.mp3" -print | LC_ALL=C sort >$mp3s
nmp3=`cat $mp3s | wc -l`
clip=0
noclip=0
for ((ri = 1; ri <= nmp3; ++ri)); do
rf=`head -n $ri $mp3s | tail -n 1 | sed 's@^./@@'`
if grep "file $rf" $mp3g >/dev/null; then
clip=1
if [ $noclip = 1 ]; then
break;
fi
else
noclip=1
if [ $clip = 1 ]; then
break;
fi
fi
done
if [ $clip = 1 ] && [ $noclip = 1 ]; then
echo "$1"
for ((ri = 1; ri <= nmp3; ++ri)); do
rf=`head -n $ri $mp3s | tail -n 1 | sed 's@^./@@'`
if grep "file $rf" $mp3g >/dev/null; then
echo -n "* "
else
echo -n " "
fi
echo "$rf"
done
echo -n "(O/n) ? "
read ret
if [ "$ret" != n ]; then
mp3gain -r -k *.mp3 | grep Applying
fi
fi
rm $mp3s
rm $mp3g
cd - >/dev/null 2>&1
}
rdexec gain
rm $mp3d
exit 0