diff --git a/acatcher/convert_audio.sh b/acatcher/convert_audio.sh index 71accdb..fc0dab3 100755 --- a/acatcher/convert_audio.sh +++ b/acatcher/convert_audio.sh @@ -3,62 +3,134 @@ # # use "play" command to play back audio -# store location that this script is in -D="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -RAW_DIR="$D/audio/raw" -COOKED_DIR="$D/audio/cooked" -FLAC_DIR="$D/audio/cooked/flac" -MP3_DIR="$D/audio/cooked/mp3" +#SOURCE_DIR="$D/audio/raw" +#OUTPUT_DIR="$D/audio/cooked" -if [ "$1" = "-m" ]; then - ENCODE_TO_MP3=YES +ENCODE_FLAC="NO" +ENCODE_MP3="NO" +FLAC_ARGS="-8" +LAME_ARGS="--preset studio" + +while getopts ":s:o:fmF:M:h" opt; do + case $opt in + s) + SOURCE_DIR="$OPTARG" + ;; + o) + OUTPUT_DIR="$OPTARG" + ;; + f) + ENCODE_FLAC="YES" + ;; + m) + ENCODE_MP3="YES" + ;; + h) + echo "Insert usage message here." >&2 + exit 0 + ;; + \?) + echo "Error: invalid option \`-$OPTARG'" >&2 + exit 1 + ;; + :) + echo "Error: option \`-$OPTARG' requires an argument" >&2 + exit 1 + ;; + esac +done + +if [ -z "$SOURCE_DIR" ]; then + echo "ERROR: source directory must be specified." + exit 1 else - ENCODE_TO_MP3=NO + # make into an absolute path + SOURCE_DIR="`cd \"$SOURCE_DIR\"; pwd`" + if [ ! -d "$SOURCE_DIR" ]; then + echo "ERROR: source dir \`$SOURCE_DIR' does not exist." >&2 + exit 1 + fi fi -cd "$RAW_DIR" +if [ -z "$OUTPUT_DIR" ]; then + echo "ERROR: output directory must be specified." + exit 1 +else + # make into an absolute path + OUTPUT_DIR="`cd \"$OUTPUT_DIR\"; pwd`" + if [ ! -d "$OUTPUT_DIR" ]; then + echo "ERROR: output dir \`$OUTPUT_DIR' does not exist." >&2 + exit 1 + fi +fi + +WAV_DIR="$OUTPUT_DIR/wav" +FLAC_DIR="$OUTPUT_DIR/flac" +MP3_DIR="$OUTPUT_DIR/mp3" + +echo "Source directory: $SOURCE_DIR" +echo "Output directory: $OUTPUT_DIR" + +echo -n "Encoding FLAC? $ENCODE_FLAC" +if [ "$ENCODE_FLAC" = "YES" ]; then + echo " (arguments: $FLAC_ARGS)" +else + echo +fi +echo -n "Encoding MP3? $ENCODE_MP3" +if [ "$ENCODE_MP3" = "YES" ]; then + echo " (arguments: $LAME_ARGS)" +else + echo +fi + +cd "$SOURCE_DIR" for DIR in *; do - if [ ! -d "$FLAC_DIR/$DIR" ]; then + if [ ! -d "$WAV_DIR" ]; then + mkdir -p "$WAV_DIR/$DIR" + fi + if [ "$ENCODE_FLAC" = "YES" -a ! -d "$FLAC_DIR/$DIR" ]; then mkdir -p "$FLAC_DIR/$DIR" fi - if [ "$ENCODE_TO_MP3" = "YES" ]; then - if [ ! -d "$MP3_DIR/$DIR" ]; then - mkdir -p "$MP3_DIR/$DIR" - fi + if [ "$ENCODE_MP3" = "YES" -a ! -d "$MP3_DIR/$DIR" ]; then + mkdir -p "$MP3_DIR/$DIR" fi cd "$DIR" - echo "working in $DIR" + echo "working in directory: $DIR" for INFILE in *.raw; do - echo "working on $INFILE" + echo "...working on file: $INFILE" FIX="`echo $INFILE | sed -e 's/^\[.*\] //g'`" BASENAME="`basename \"$FIX\" .raw`" - TEMP_OUTFILE="$BASENAME.wav" - echo "...converting to intermediate format $TEMP_OUTFILE" - #sox -r 44100 -e unsigned -b 8 -c 1  - sox -r 22050 -e signed -b 16 -L -c 1 "$INFILE" "$TEMP_OUTFILE" - if [ -f "$FLAC_DIR/$DIR/$BASENAME.flac" -o -f "$MP3_DIR/$DIR/$BASENAME.mp3" ] ; then + RAWNAME="$BASENAME.raw" + if [ -f "$RAWNAME" ]; then + echo "......filename conflict detected, adding some randomness" FUDGE="$RANDOM" - FLAC_FILE="$FLAC_DIR/$DIR/$BASENAME-$FUDGE.flac" - MP3_FILE="$MP3_DIR/$DIR/$BASENAME-$FUDGE.mp3" - else - FLAC_FILE="$FLAC_DIR/$DIR/$BASENAME.flac" - MP3_FILE="$MP3_DIR/$DIR/$BASENAME.mp3" + BASENAME="$BASENAME-$FUDGE" + RAWNAME="$BASENAME-$FUDGE.raw" fi - if [ ! -f "$FLAC_FILE" ]; then - echo "...converting it to FLAC: $FLAC_FILE" - flac -s -8 "$TEMP_OUTFILE" -o "$FLAC_FILE" - else - echo "...already converted" - fi - if [ "$ENCODE_TO_MP3" = "YES" ]; then - if [ ! -f "$MP3_FILE" ]; then - echo "...converting it to MP3: $MP3_FILE" - lame --quiet --preset studio "$TEMP_OUTFILE" "$MP3_FILE" + echo "......renaming to $RAWNAME" + mv "$INFILE" "$RAWNAME" + WAVNAME="$WAV_DIR/$DIR/$BASENAME.wav" + echo "......encoding to WAV: $BASENAME.wav" + sox -r 22050 -e signed -b 16 -L -c 1 "$RAWNAME" "$WAVNAME" + if [ "$ENCODE_FLAC" = "YES" ]; then + FLACNAME="$FLAC_DIR/$DIR/$BASENAME.flac" + if [ ! -f "$FLACNAME" ]; then + echo "......converting it to FLAC: $BASENAME.flac" + flac -s $FLAC_ARGS "$WAVNAME" -o "$FLACNAME" else - echo "...already converted" + echo "......HUH? already converted?" + fi + fi + if [ "$ENCODE_MP3" = "YES" ]; then + MP3NAME="$MP3_DIR/$DIR/$BASENAME.mp3" + if [ ! -f "$MP3NAME" ]; then + echo "......converting it to MP3: $BASENAME.mp3" + lame --quiet $LAME_ARGS "$WAVNAME" "$MP3NAME" + else + echo "......HUH? already converted" fi fi - rm -f "$TEMP_OUTFILE" done cd .. done