Music Scripts

From CodeMonkeyWiki

Jump to: navigation, search

Ape to mp3

#!/bin/sh

for FILE in *.ape; do
  FILENAME=`echo $FILE | sed 's/\.ape//g'`
  mac "$FILE" "$FILENAME.wav" -d
done

for FILE in *.wav; do
  FILENAME=`echo $FILE | sed 's/\.wav//g'`
  lame -h -b 192 "$FILENAME.wav" "$FILENAME.mp3"
done

rm *.ape
rm *.wav

Mp3 Renamer (Ongoing)

#!/bin/bash

echo "MP3 Renamer v1.3"

# get default artist name & album from directory structure
DEFAULT_ARTIST=`pwd | rev | awk -F \/ '{print $2}' | rev`
DEFAULT_ALBUM=`pwd | rev | awk -F \/ '{print $1}' | rev`


#if album name starts with xxxx - (year) then remove it
DEFAULT_ALBUM=`echo $DEFAULT_ALBUM | sed 's/^[0-9][0-9][0-9][0-9]\ \-\ //g'`;

# artist from
read -p "1) Enter Artist To Replace (leave blank for none): " -e ARTIST_TO_REMOVE

# artist to
read -p "2) Enter Formatted Artist Name (leave blank for \"$DEFAULT_ARTIST\"): " -e ARTIST_TO_ADD
if [ "$ARTIST_TO_ADD" = "" ]; then
  ARTIST_TO_ADD=$DEFAULT_ARTIST;
fi

if [ "$ARTIST_TO_ADD" = "" ]; then
  echo "Blank Artist Name, exitting...";
  exit;
fi;

# album name
read -p "3) Enter Album Name (leave blank for \"$DEFAULT_ALBUM\"): " -e ALBUM_NAME_TO_ADD
if [ "$ALBUM_NAME_TO_ADD" = "" ]; then
  ALBUM_NAME_TO_ADD=$DEFAULT_ALBUM;
fi

if [ "$ALBUM_NAME_TO_ADD" = "" ]; then
  echo "Blank Album Name, exitting...";
  exit;
fi;

# filename pattern
if [ "$ARTIST_TO_REMOVE" != "" ]; then
  FILENAME_PATTERNS[1]="XX-"$ARTIST_TO_REMOVE"-track_name";
  FILENAME_PATTERNS[2]="XX_"$ARTIST_TO_REMOVE"_track_name";
  FILENAME_PATTERNS[3]="XX "$ARTIST_TO_REMOVE" track_name";
  FILENAME_PATTERNS[4]="[CD]XX-"$ARTIST_TO_REMOVE"-track_name";
  FILENAME_PATTERNS[5]="XX - "$ARTIST_TO_REMOVE" - Track Name";
else 
  FILENAME_PATTERNS[1]="XX-track_name";
  FILENAME_PATTERNS[2]="XX_track_name";
  FILENAME_PATTERNS[3]="XX track_name";
  FILENAME_PATTERNS[4]="[CD]XX-track_name";
  FILENAME_PATTERNS[5]="XX - Track Name";
fi;
FILENAME_PATTERNS[6]="XX. Track Name";
FILENAME_PATTERNS[7]="XX Track Name";
FILENAME_PATTERNS[8]="EXX - Track Name";
FP_LEN=${#FILENAME_PATTERNS[*]}

for ((i=1; i<=$FP_LEN;i+=1));
do 
  echo "  $i) ${FILENAME_PATTERNS[$i]}.mp3";
done
read -p "4) Choose Filename Pattern To Rename From (see list above): " -e FP_IDX
FP=${FILENAME_PATTERNS[$FP_IDX]};

#suffix
read -p "5) Enter Suffix (Leave blank for none): " -e FILENAME_SUFFIX

#continue confirmation
if [ "$FILENAME_SUFFIX" = "" ]; then
  RENAME_FROM="$FP.mp3";
else 
  RENAME_FROM="$FP$FILENAME_SUFFIX.mp3";
fi

if [ $FP_IDX != 4 ]; then 
  echo "Renaming from \"$RENAME_FROM\" to $ARTIST_TO_ADD - $ALBUM_NAME_TO_ADD - XX - Track Name.mp3";
else 
  echo "Renaming from \"$RENAME_FROM\" to $ARTIST_TO_ADD - $ALBUM_NAME_TO_ADD - CD[CD] - XX - Track Name.mp3";
fi

read -p "Is this OK [y/n]:" -e CONFIRM

# user confirmed rename
if [ "$CONFIRM" = "y" ]; then
  # declare sed regex
  EXT="s/\.MP3/\.mp3/g";
  UNDERLINE="s/\_/\ /g";
  DECAPITALISE="s/\ [A-Z]*/\L&/g;";
  CAPITALISE="s/\ [a-z]/\U&/g; s/([a-z]/\U&/g";

  for MP3 in *.[Mm][Pp]3
  do
    # remove filename extension
    LEN=`expr length "$MP3"`
    REM_LEN=`expr $LEN - 4`;
    STEP0="${MP3:0:$REM_LEN}"

    # strip out suffix
    if [ "$FILENAME_SUFFIX" != "" ]; then
      STEP1=`echo $STEP0 | sed "s/$FILENAME_SUFFIX//g"`;
    else 
      STEP1="$STEP0";
    fi

    STEP2=`echo $STEP1 | sed "s/\.mp3//g"`;
    

    # use pattern to process filename
    case $FP_IDX in 
      # "XX-"$ARTIST_TO_REMOVE"-track_name" / "XX-track_name"
      1) if [ "$ARTIST_TO_REMOVE" != "" ]; then
           REGEX="s/\-$ARTIST_TO_REMOVE\-/\ \-\ /g";
         else 
           REGEX="s/^\([0-9][0-9]\)\-/\1\ \-\ /g";
         fi;;

      # "XX_"$ARTIST_TO_REMOVE"_track_name" / "XX_track_name"
      2) if [ "$ARTIST_TO_REMOVE" != "" ]; then
           REGEX="s/\_$ARTIST_TO_REMOVE\_/\ \-\ /g";
         else 
           REGEX="s/^\([0-9][0-9]\)\_/\1\ \-\ /g";
         fi;;

      # "XX "$ARTIST_TO_REMOVE" track_name" / "XX track_name"
      3) if [ "$ARTIST_TO_REMOVE" != "" ]; then
           REGEX="s/\ $ARTIST_TO_REMOVE\ /\ \-\ /g";
         else 
           REGEX="s/^\([0-9][0-9]\)\-/\1\ \-\ /g";
         fi;;

      # "[CD]XX-"$ARTIST_TO_REMOVE"-track_name" / "[CD]XX-track_name"
      4) if [ "$ARTIST_TO_REMOVE" != "" ]; then
           REGEX="s/^\([0-9]\)\([0-9][0-9]\)\-$ARTIST_TO_REMOVE\-/CD\1\ \-\ \2\ \-\ /g";
         else
           REGEX="s/^\([0-9]\)\([0-9][0-9]\)\-/CD\1\ \-\ \2\ \-\ /g";
         fi;;

      # "XX - "$ARTIST_TO_REMOVE" - Track Name" / "XX - Track Name"
      5) if [ "$ARTIST_TO_REMOVE" != "" ]; then
           REGEX="s/^\([0-9][0-9]\)\ \-\ $ARTIST_TO_REMOVE\ \-\ //g";
         else
           REGEX="s/^\([0-9][0-9]\)\ \-\ //g";
         fi;;

      # "XX. Track Name"
      6) REGEX="s/^\([0-9][0-9]\)\. /\1\ \-\ /g";;

      # "XX Track Name"
      7) REGEX="s/^\([0-9][0-9]\)\ /\1\ \-\ /g";;

      # "EXX - Track Name"
      8) REGEX="s/^E//g";;
 
      *) echo "Unknown pattern choice, exitting..."; exit;;
    esac

   if [ "$REGEX" != "" ]; then
     STEP3=`echo $STEP2 | sed "$REGEX"`;
   else
     STEP3="$STEP2";
  fi
  
   # normalise filename 
   STEP4=`echo $STEP3 | sed "$UNDERLINE; $DECAPITALISE"`;
   STEP4=`echo $STEP4 | sed "$CAPITALISE"`;

   # now add formatted artist name and album title
   STEP5="$ARTIST_TO_ADD - $ALBUM_NAME_TO_ADD - $STEP4";

   echo "Moving \"$MP3\" to \"$STEP5.mp3\"";
   mv "$MP3" "$STEP5.mp3"
  done
else
  echo Cancelled
fi
Personal tools