gremlin/gremlin.in: Fix things for new GI-based GStreamer etc. bindings.
[autoys] / flaccrip / flaccrip-offset
1 #! /bin/bash
2
3 set -e
4 : ${JBDIR=/mnt/jb}
5
6 zero_start=0 trim_end=0 offset=0
7 while getopts flF:L:o:b:a: opt; do
8 case "$opt" in
9 f) zero_start=$((588 * 5 - 1)) ;;
10 l) trim_end=$((588 * 5)) ;;
11 F) zero_start=$OPTARG ;;
12 L) trim_end=$OPTARG ;;
13 o) offset=$OPTARG ;;
14 b) before=$OPTARG ;;
15 a) after=$OPTARG ;;
16 *) exit 1 ;;
17 esac
18 done
19
20 shift $((OPTIND - 1))
21 case $# in
22 1) ;;
23 *) echo >&2 "missing file argument" ;;
24 esac
25 file=$1
26
27 len=$(metaflac --show-total-samples "$file")
28
29 if ((offset < 0)); then
30 start=0
31 stop=$((stop + offset))
32 elif ((offset >= 0)); then
33 start=$offset
34 stop=$len
35 fi
36
37 {
38 if ((offset < 0)); then
39 if [ "${before+set}" ]; then
40 n=$(metaflac --show-total-samples "$before")
41 flac -d -s -o- --force-raw-format --sign=signed --endian=little \
42 --skip=$((n + offset)) --until=$n \
43 "$before"
44 else
45 $JBDIR/bin/cat-prefix $((4 * -offset)) </dev/zero
46 fi
47 fi
48
49 flac -d -s -o- --force-raw-format --sign=signed --endian=little \
50 --skip=$start --until=$stop \
51 "$file"
52
53 if ((offset > 0)); then
54 if [ "${after+set}" ]; then
55 flac -d -s -o- --force-raw-format --sign=signed --endian=little \
56 --skip=0 --until=$offset \
57 "$after"
58 else
59 $JBDIR/bin/cat-prefix $((4 * offset)) </dev/zero
60 fi
61 fi
62 } | {
63 if ((zero_start > 0)); then
64 $JBDIR/bin/cat-prefix $((4 * zero_start)) </dev/zero
65 $JBDIR/bin/cat-prefix $((4 * zero_start)) >/dev/null
66 len=$((len - zero_start))
67 fi
68 if ((trim_end > 0)); then
69 $JBDIR/bin/cat-prefix $((4 * (len - trim_end)))
70 $JBDIR/bin/cat-prefix $((4 * trim_end)) </dev/zero
71 cat >/dev/null
72 else
73 cat
74 fi
75 }