Commit | Line | Data |
---|---|---|
583b7e4a MW |
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 |