raspberrypi/acatcher/convert_audio.sh

136 lines
3.2 KiB
Bash
Executable file

#!/bin/bash
# Signed 16 bit Little Endian, Rate 22050 Hz, Mono
#
# use "play" command to play back audio
#SOURCE_DIR="$D/audio/raw"
#OUTPUT_DIR="$D/audio/cooked"
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
# 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
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 "$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_MP3" = "YES" -a ! -d "$MP3_DIR/$DIR" ]; then
mkdir -p "$MP3_DIR/$DIR"
fi
cd "$DIR"
echo "working in directory: $DIR"
for INFILE in *.raw; do
echo "...working on file: $INFILE"
FIX="`echo $INFILE | sed -e 's/^\[.*\] //g'`"
BASENAME="`basename \"$FIX\" .raw`"
RAWNAME="$BASENAME.raw"
if [ -f "$RAWNAME" ]; then
echo "......filename conflict detected, adding some randomness"
FUDGE="$RANDOM"
BASENAME="$BASENAME-$FUDGE"
RAWNAME="$BASENAME-$FUDGE.raw"
fi
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 "......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
done
cd ..
done