#! /bin/bash set -e : ${JBDIR=/mnt/jb} case $# in 3) ;; *) echo >&2 "Usage: $0 OFFSET SOURCEDIR TARGETDIR"; exit 1 ;; esac offset=$1 sourcedir=$2 targetdir=$3 mkdir "$targetdir" tmp="$targetdir"/_tmp; mkdir "$tmp" trap 'rm -rf "$targetdir"' EXIT INT TERM lens="" for i in "$sourcedir"/*.flac; do base=${i##*/} metaflac --export-tags-to="$tmp/${base%.flac}.tags" "$i" len=$(metaflac --show-total-samples "$i") lens="${lens:+$lens }$len" done { if ((offset < 0)); then $JBDIR/bin/cat-prefix $((4 * -offset)) 0)); then $JBDIR/bin/cat-prefix $((4 * offset)) 0)); then $JBDIR/bin/cat-prefix $((4 * offset)) >/dev/null fi set -- $lens for i in "$sourcedir"/*.flac; do base=${i##*/} len=$1; shift $JBDIR/bin/cat-prefix $((4 * len)) >"$tmp"/"${base%.flac}.pcm" flac --force-raw-format --sign=signed --endian=little --channels=2 \ --bps=16 --sample-rate=44100 --best -o "$targetdir"/"$base" \ "$tmp"/"${base%.flac}.pcm" metaflac --remove-all-tags \ --import-tags-from="$tmp"/"${base%.flac}.tags" \ "$targetdir"/"$base" done if ((offset < 0)); then $JBDIR/bin/cat-prefix $((4 * -offset)) >/dev/null fi } for i in "$sourcedir"/* "$sourcedir"/.[!.]*; do if [ ! -e "$i" ]; then continue; fi case "$i" in *.flac) ;; *) cp -r "$i" "$targetdir"/ ;; esac done rm -rf "$tmp" trap '' EXIT INT TERM