chiark / gitweb /
gremlin/gremlin.in: Use `https' scheme for Wikipedia link.
[autoys] / flaccrip / flaccrip-offset
CommitLineData
583b7e4a
MW
1#! /bin/bash
2
3set -e
4: ${JBDIR=/mnt/jb}
5
6zero_start=0 trim_end=0 offset=0
7while 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
18done
19
20shift $((OPTIND - 1))
21case $# in
22 1) ;;
23 *) echo >&2 "missing file argument" ;;
24esac
25file=$1
26
27len=$(metaflac --show-total-samples "$file")
28
29if ((offset < 0)); then
30 start=0
31 stop=$((stop + offset))
32elif ((offset >= 0)); then
33 start=$offset
34 stop=$len
35fi
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}