音楽ファイル用のコードを書く

前に検討したとおり、FLACによる圧縮をする。
しかしFLACを試したときにcmpコマンドで元のファイルとFLACでエンコード→デコードしたファイルを比較すると一致しないときがあったから、こういうときはアラートを出すようにした。

ファイル名: music2fla.sh
#!/bin/sh

echo "Usage : sh $0 (option)[(0|1):force]"

DIR0="/Music" # 変換元のファイルがあるディレクトリ
DIR1="/FLAC" # 圧縮したファイルを入れるディレクトリ
TMP="/tmp"
FORCE=0

if [ $1 = 1 ]; then
 FORCE=1
fi

if [ ! -d "$DIR1" ]; then
 mkdir -p "$DIR1"
fi

main() {
 IFS_BACKUP=$IFS
 IFS=$'\n'
 cd "$DIR0"
 FILES=`find \( -name *.WAV -o -name *.Wav -o -name *.wav \)`
 cd "$DIR1"
 for FILE in ${FILES}; do
  if [ -f "$DIR0/$FILE" ]; then
   FLAC="$DIR1/${FILE%.*}.fla"
   if [ $FORCE -eq 1 -o ! -e "$FLAC" ]; then
    DIR=`dirname "$FLAC"`
    if [ ! -d "$DIR" ]; then
     mkdir -p "$DIR"
    fi
    echo "Encoding '$DIR0/$FILE' to '$FLAC'"
    `flac -s -8 "$DIR0/$FILE" -o "$FLAC"`
    MD5=`md5sum -b "$FLAC" | cut -d " " -f 1`
    WAV="$TMP/$MD5"
    `flac -s -d "$FLAC" -o "$WAV"`
    ERR=`cmp "$DIR0/$FILE" "$WAV"`
    if [ $ERR ]; then
     echo " [Alert!] Decoded file of '$FLAC' differs from '$DIR0/$FILE'"
    fi
    rm -f "$WAV"
   fi
  fi
 done
 IFS=$IFS_BACKUP
 return 0
}

main $@ || exit $?
使い方は
sh ./music2fla.sh
2013/03/12 22:32
タグ