chiark / gitweb /
gremlin/gremlin.in: Use `https' scheme for Wikipedia link.
[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 }