chiark / gitweb /
gremlin/gremlin.in: Use `https' scheme for Wikipedia link.
[autoys] / flaccrip / flaccrip-trackoffsets
1 #! /bin/bash
2
3 set -e
4 : ${JBDIR=/mnt/jb}
5
6 i0=0 zero_start=0 trim_end=0 span=$((588*5 - 1)) debug=""
7 while getopts flF:L:i:b:a:s:d 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     b) before=$OPTARG ;;
14     a) after=$OPTARG ;;
15     s) span=$OPTARG ;;
16     d) debug=-d ;;
17     *) exit 1 ;;
18   esac
19 done
20 shift $((OPTIND - 1))
21
22 case $# in
23   0 | 1)
24     echo >&2 "usage: $0 [-OPTIONS] FILE TARGET..."
25     exit 1
26     ;;
27 esac
28 file=$1; shift
29
30 ns=$(metaflac --show-total-samples "$file")
31
32 read ck tot < <(
33   {
34     if [ "${before+set}" ]; then
35       n=$(metaflac --show-total-samples "$before")
36       flac -d -s -o- --force-raw-format --sign=signed --endian=little \
37         --skip=$((n - span)) \
38         "$before"
39     else
40       $JBDIR/bin/cat-prefix $((4 * span)) </dev/zero
41     fi
42
43     flac -d -s -o- --force-raw-format --sign=signed --endian=little \
44       --until=$((ns - span - trim_end)) \
45       "$file"
46   } | {
47     if ((zero_start > 0)); then
48       $JBDIR/bin/cat-prefix $((4 * zero_start)) </dev/zero
49       $JBDIR/bin/cat-prefix $((4 * zero_start)) >/dev/null
50     fi
51     cat
52   } | $JBDIR/bin/flaccrip-compute -r
53 )
54
55 while read off ck; do
56   echo M $((off - span)) "$ck"
57 done < <(
58   $JBDIR/bin/flaccrip-slide \
59     -i "$zero_start" $debug \
60     $((ns - trim_end)) $ck $tot \
61     <(
62       if ((span > zero_start)); then
63         tail=$((span - zero_start))
64         if [ "${before+set}" ]; then
65           n=$(metaflac --show-total-samples "$before")
66           flac -d -s -o- --force-raw-format --sign=signed --endian=little \
67             --skip=$((n - tail)) \
68             "$before"
69         else
70           $JBDIR/bin/cat-prefix $((4 * tail)) </dev/zero
71         fi
72       fi
73       flac -d -s -o- --force-raw-format --sign=signed --endian=little \
74         --until=$((span + zero_start)) \
75         "$file"
76     ) \
77     <(
78       if ((span > trim_end)); then
79         flac -d -s -o- --force-raw-format --sign=signed --endian=little \
80           --skip=$((ns - span - trim_end)) \
81           "$file"
82         head=$((span - trim_end))
83         if [ "${after+set}" ]; then
84           flac -d -s -o- --force-raw-format --sign=signed --endian=little \
85             --until=$head \
86             "$after"
87         else
88           $JBDIR/bin/cat-prefix $((4 * head)) </dev/zero
89         fi
90       else
91         flac -d -s -o- --force-raw-format --sign=signed --endian=little \
92           --skip=$((ns - span - trim_end)) \
93           --until=$((ns + span - trim_end)) \
94           "$file"
95       fi
96     ) \
97     "$@"
98 )