chiark / gitweb /
gremlin/gremlin.in: Use `https' scheme for Wikipedia link.
[autoys] / flaccrip / offset-album
1 #! /bin/bash
2
3 set -e
4 : ${JBDIR=/mnt/jb}
5
6 case $# in
7   3) ;;
8   *) echo >&2 "Usage: $0 OFFSET SOURCEDIR TARGETDIR"; exit 1 ;;
9 esac
10
11 offset=$1 sourcedir=$2 targetdir=$3
12 mkdir "$targetdir"
13 tmp="$targetdir"/_tmp; mkdir "$tmp"
14 trap 'rm -rf "$targetdir"' EXIT INT TERM
15
16 lens=""
17 for i in "$sourcedir"/*.flac; do
18   base=${i##*/}
19   metaflac --export-tags-to="$tmp/${base%.flac}.tags" "$i"
20   len=$(metaflac --show-total-samples "$i")
21   lens="${lens:+$lens }$len"
22 done
23
24 {
25   if ((offset < 0)); then
26     $JBDIR/bin/cat-prefix $((4 * -offset)) </dev/zero
27   fi
28   for i in "$sourcedir"/*.flac; do
29     flac -d -s -o- --force-raw-format --sign=signed --endian=little "$i"
30   done
31   if ((offset > 0)); then
32     $JBDIR/bin/cat-prefix $((4 * offset)) </dev/zero
33   fi
34 } | {
35   if ((offset > 0)); then
36     $JBDIR/bin/cat-prefix $((4 * offset)) >/dev/null
37   fi
38   set -- $lens
39   for i in "$sourcedir"/*.flac; do
40     base=${i##*/}
41     len=$1; shift
42     $JBDIR/bin/cat-prefix $((4 * len)) >"$tmp"/"${base%.flac}.pcm"
43     flac --force-raw-format --sign=signed --endian=little --channels=2 \
44       --bps=16 --sample-rate=44100 --best -o "$targetdir"/"$base" \
45       "$tmp"/"${base%.flac}.pcm"
46     metaflac --remove-all-tags \
47       --import-tags-from="$tmp"/"${base%.flac}.tags" \
48       "$targetdir"/"$base"
49   done
50   if ((offset < 0)); then
51     $JBDIR/bin/cat-prefix $((4 * -offset)) >/dev/null
52   fi
53 }
54
55 for i in "$sourcedir"/* "$sourcedir"/.[!.]*; do
56   if [ ! -e "$i" ]; then continue; fi
57   case "$i" in
58     *.flac) ;;
59     *) cp -r "$i" "$targetdir"/ ;;
60   esac
61 done
62
63 rm -rf "$tmp"
64 trap '' EXIT INT TERM