mirror of
				https://github.com/KrumpetPirate/AAXtoMP3.git
				synced 2025-11-03 12:30:42 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			160 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/usr/bin/env bash
 | 
						|
 | 
						|
# ===Note for contributors========================================================================================================================
 | 
						|
 | 
						|
# This script interactively asks the user for the options to call AAXtoMP3 with. This first version does not include all options of AAXtoMP3
 | 
						|
# since I tried to keep the dialog short, but I added an --advanced option, which is unused right now, but might be used in the future to add
 | 
						|
# more options which only show up if explicitely wanted.
 | 
						|
# If you want to add functionality please consider, whether the functionality you add might belong to the advanced options.
 | 
						|
 | 
						|
# ===Variables====================================================================================================================================
 | 
						|
 | 
						|
# Help message
 | 
						|
help=$'\nUsage: interactiveAAXtoMP3 [--advanced] [--help]\n
 | 
						|
--advanced	More options
 | 
						|
--help		Print this message\n'
 | 
						|
summary=""         # This will contain a summary of the options allready set.
 | 
						|
call="./AAXtoMP3"  # This will contain the call for AAXtoMP3.
 | 
						|
advanced=0         # Toggles advanced options on or off.
 | 
						|
 | 
						|
# ===Options======================================================================================================================================
 | 
						|
 | 
						|
while true; do
 | 
						|
  case "$1" in
 | 
						|
                     # Advanced options.
 | 
						|
    -a | --advanced  ) advanced=1;      shift ;;
 | 
						|
                     # Command synopsis.
 | 
						|
    -h | --help      ) echo -e "$help"; exit ;;
 | 
						|
                     # Anything else stops command line processing.
 | 
						|
    *                )                  break ;;
 | 
						|
  esac
 | 
						|
done
 | 
						|
 | 
						|
# ===Cross platform compatible use grep and sed===================================================================================================
 | 
						|
 | 
						|
# ===Detect which annoying version of grep we have===
 | 
						|
GREP=$(grep --version | grep -q GNU && echo "grep" || echo "ggrep")
 | 
						|
if ! [[ $(type -P "$GREP") ]]; then
 | 
						|
  echo "$GREP (GNU grep) is not in your PATH"
 | 
						|
  echo "Without it, this script will break."
 | 
						|
  echo "On macOS, you may want to try: brew install grep"
 | 
						|
  exit 1
 | 
						|
fi
 | 
						|
 | 
						|
# ===Detect which annoying version of sed we have===
 | 
						|
SED=$(sed --version 2>&1 | $GREP -q GNU && echo "sed" || echo "gsed")
 | 
						|
if ! [[ $(type -P "$SED") ]]; then
 | 
						|
  echo "$SED (GNU sed) is not in your PATH"
 | 
						|
  echo "Without it, this script will break."
 | 
						|
  echo "On macOS, you may want to try: brew install gnu-sed"
 | 
						|
  exit 1
 | 
						|
fi
 | 
						|
 | 
						|
# ===Get options from last time===================================================================================================================
 | 
						|
 | 
						|
# ===Set default values===
 | 
						|
lastcodec="mp3"
 | 
						|
lastcompression="4"
 | 
						|
lastchapters="yes"
 | 
						|
lastauthcode=""
 | 
						|
lastloglevel="1"
 | 
						|
 | 
						|
# ===Get Values from last time===
 | 
						|
if [ -f ".interactivesave" ]; then
 | 
						|
  for ((i=1;i<=$(wc -l .interactivesave | cut -d " " -f 1);i++)) do
 | 
						|
    line=$(head -$i .interactivesave | tail -1)
 | 
						|
    case $(echo $line | cut -d " " -f 1 | $SED 's/.$//') in
 | 
						|
      codec        ) lastcodec="$(echo $line | cut -d " " -f 2)";;
 | 
						|
      compression  ) lastcompression="$(echo $line | cut -d " " -f 2)";;
 | 
						|
      chapters     ) lastchapters="$(echo $line | cut -d " " -f 2)";;
 | 
						|
      authcode     ) lastauthcode="$(echo $line | cut -d " " -f 2)";;
 | 
						|
      loglevel     ) lastloglevel="$(echo $line | cut -d " " -f 2)";;
 | 
						|
      *            ) rm .interactivesave; exit 1;;
 | 
						|
    esac
 | 
						|
  done
 | 
						|
fi
 | 
						|
 | 
						|
# ===Get options for AAXtoMP3=====================================================================================================================
 | 
						|
 | 
						|
# ===Codec===
 | 
						|
while true; do
 | 
						|
  clear;
 | 
						|
  read -e -p "codec (mp3/m4a/m4b/flac/aac/opus): " -i "$lastcodec" codec
 | 
						|
  case "$codec" in
 | 
						|
    mp3   ) summary="$summary""codec: $codec"; call="$call -e:mp3"; break;;
 | 
						|
    m4a   ) summary="$summary""codec: $codec"; call="$call -e:m4a"; break;;
 | 
						|
    m4b   ) summary="$summary""codec: $codec"; call="$call -e:m4b"; break;;
 | 
						|
    flac  ) summary="$summary""codec: $codec"; call="$call --flac"; break;;
 | 
						|
    aac   ) summary="$summary""codec: $codec"; call="$call --aac";  break;;
 | 
						|
    opus  ) summary="$summary""codec: $codec"; call="$call --opus"; break;;
 | 
						|
  esac
 | 
						|
done
 | 
						|
 | 
						|
# ===Compression===
 | 
						|
while true; do
 | 
						|
  clear; echo -e "$summary"
 | 
						|
  case "$codec" in
 | 
						|
    mp3   ) maxlevel=9;;
 | 
						|
    flac  ) maxlevel=12;;
 | 
						|
    opus  ) maxlevel=10;;
 | 
						|
    *     ) break;;
 | 
						|
  esac
 | 
						|
  read -e -p "compression level (0-$maxlevel): " -i "$lastcompression" compression
 | 
						|
  if [[ $compression =~ ^[0-9]+$ ]] && [[ "$compression" -ge "0" ]] && [[ "$compression" -le "$maxlevel" ]]; then
 | 
						|
    summary="$summary""\ncompression level: $compression"
 | 
						|
    call="$call --level $compression"
 | 
						|
    break
 | 
						|
  fi
 | 
						|
done
 | 
						|
 | 
						|
# ===Chapters===
 | 
						|
while true; do
 | 
						|
  clear; echo -e "$summary"
 | 
						|
  read -e -p "chapters (yes/no/chapternumber to continue with): " -i "$lastchapters" chapters
 | 
						|
  case "$chapters" in
 | 
						|
    ^[0-9]+$  ) summary="$summary""\nchapters: $chapters"; call="$call -c --continue ${chapters}"; break;;
 | 
						|
    yes       ) summary="$summary""\nchapters: $chapters"; call="$call -c"; break;;
 | 
						|
    no        ) summary="$summary""\nchapters: $chapters"; call="$call -s"; break;;
 | 
						|
  esac
 | 
						|
done
 | 
						|
 | 
						|
# ===Authcode===
 | 
						|
if ! [ -r .authcode ] || [ -r ~/.authcode ]; then
 | 
						|
  clear; echo -e "$summary"
 | 
						|
  read -e -p "Authcode: " -i "$lastauthcode" authcode
 | 
						|
  summary="$summary""\nauthcode: $authcode"
 | 
						|
  call="$call -A $authcode"
 | 
						|
fi
 | 
						|
 | 
						|
# ===Loglevel===
 | 
						|
while true; do
 | 
						|
  clear; echo -e "$summary"
 | 
						|
  read -e -p "loglevel (0/1/2/3): " -i "$lastloglevel" loglevel
 | 
						|
  if [[ $loglevel =~ ^[0-9]+$ ]] && [[ "$loglevel" -ge "0" ]] && [[ "$loglevel" -le "3" ]]; then
 | 
						|
    summary="$summary""\nloglevel: $loglevel"
 | 
						|
    call="$call -l $loglevel"
 | 
						|
    break
 | 
						|
  fi
 | 
						|
done
 | 
						|
 | 
						|
# ===File===
 | 
						|
clear; echo -e "$summary"
 | 
						|
read -p "aax-file: " file
 | 
						|
file="${file%\'}" #remove suffix ' if file is given via drag'n'drop
 | 
						|
file="${file#\'}" #remove prefix ' if file is given via drag'n'drop
 | 
						|
savefile="$summary"
 | 
						|
summary="$summary""\naax-file: $file"
 | 
						|
call="$call $(echo $file | $SED "s;~;$HOME;")"
 | 
						|
 | 
						|
# ===Summerize chosen options and call AAXtoMP3===================================================================================================
 | 
						|
 | 
						|
# ===Summary===
 | 
						|
clear; echo -e "$summary\n"
 | 
						|
echo -e "$call\n"
 | 
						|
 | 
						|
# ===Save chosen options===
 | 
						|
echo -e $savefile | $SED "s;\ level:;:;" > .interactivesave
 | 
						|
 | 
						|
# ===Call AAXtoMP3===
 | 
						|
$call
 |