view makeCello.sh @ 738:69a7499817c8 build-default-284

On Nook and A5 prints, start a new page with each tune and centre vertically.. A5 mostly did, but ran into trouble with longer comments on a tune. This may give blank space after tunes where a long comment overflows onto another page, but I think for now it's better to have each tune at the top of the page. Or rather, and this is the other change, in the middle of the page. Centre the page content for A5 and Nook.
author Jim Hague <jim.hague@acm.org>
date Thu, 12 Oct 2017 14:50:51 +0100
parents cf2fe741a582
children ce5c7214f9aa
line wrap: on
line source

#!/bin/bash
#
# Copy a booke to cello-friendly form. Bass clef, transposed down
# 1 or 2 octaves.
#
# It would be easier to do with transpose in dottes.fmt, but I can't get
# that to work properly for a 2 octave downward transpose.
#
# This relies on abcm2ps >= 6.0 but does not check for it.

if [ $# != 1 ]; then
    echo "Usage: makeCello.sh <book dir name>"
    exit 1
fi

# Return 0 if we should transpose down 2 octaves, 1 if just one
# octave. $2 is highest note, $3 is lowest note.
#
# If range is G to d', transpose down 2 octaves.
# Otherwise calculate the distance above d for the highest note on a one
# octave transposition, and the distance below C on a two octave
# transposition. Find the smallest, and use the corresponding
# transposition, preferring 2 octaves in case of a tie.
transposedowntwo()
{
    if (($3 >= 104 && $2 <= 115)); then
        return 0;
    fi
    over=$(($2 - 108))
    if (($over < 0)); then
        over=0
    fi
    under=$((100 - $3))
    if (($under < 0)); then
        under=0
    fi
    if (($over < $under)); then
        return 1;
    fi

    return 0;
}

dir=`pwd`

booke=$dir/$1
outdir=$dir/$1-Cello

mkdir -p $outdir

# Copy book component items.
cp $booke/*.txt $outdir

echo "Cello" > $outdir/instrument.txt

find $booke -name "*.abc" | sort |
    while read filename
    do
        name=`basename $filename .abc`
        range=`./abcrange.py $filename`

        # Move down either one octave or two, depending on the range
        # of the tune.
        middle="D"
        if transposedowntwo $range; then
            middle="d"
        fi

        sed -e "/^ *K:/s/$/ clef=bass middle=$middle/" $filename > $outdir/$name.abc
    done