gremlin/gremlin.in: Fix things for new GI-based GStreamer etc. bindings.
[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