annotate makeWebAudio.sh @ 1077:b3c7cdd58b5e build-default-392

Merge with site.
author Jim Hague <jim.hague@acm.org>
date Fri, 11 Mar 2022 16:14:55 +0000
parents 5bd2c1f0833e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
43
d92717f8130c First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff changeset
1 #!/bin/bash
d92717f8130c First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff changeset
2 #
223
0ef955669a9a Make transposed tunes use the original audio.
Jim Hague <jim.hague@acm.org>
parents: 197
diff changeset
3 # Make audio required for the website but not for the book.
43
d92717f8130c First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff changeset
4 # They go into web/<book>.
d92717f8130c First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff changeset
5 #
d92717f8130c First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff changeset
6
d92717f8130c First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff changeset
7 if [ $# != 1 ]; then
223
0ef955669a9a Make transposed tunes use the original audio.
Jim Hague <jim.hague@acm.org>
parents: 197
diff changeset
8 echo "Usage: makeWebAudio.sh <book dir name>"
43
d92717f8130c First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff changeset
9 exit 1
d92717f8130c First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff changeset
10 fi
d92717f8130c First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff changeset
11
d92717f8130c First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff changeset
12 dir=`pwd`
d92717f8130c First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff changeset
13
d92717f8130c First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff changeset
14 booke=$dir/$1
943
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
15 basewebdir=$dir/web
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
16 basetunedir=$basewebdir/tunes
43
d92717f8130c First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff changeset
17
400
f1c4abe4fc75 First go at adding the tune learner page.
Jim Hague <jim.hague@acm.org>
parents: 399
diff changeset
18 # Make MP3 and OGG files for the input .abc. Since we're listening to
f1c4abe4fc75 First go at adding the tune learner page.
Jim Hague <jim.hague@acm.org>
parents: 399
diff changeset
19 # a doorbell playing the tunes, go for lowest quality (and hence smallest)
943
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
20 # MP3 and OGG. $1 is the input filename, $2 is the output directory,
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
21 # $3 is optional args for timidity.
394
ae9c05d2aafd Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents: 393
diff changeset
22 makeaudiofiles()
ae9c05d2aafd Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents: 393
diff changeset
23 {
ae9c05d2aafd Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents: 393
diff changeset
24 name=`basename $1 .abc`
943
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
25 tunedir="$2"
394
ae9c05d2aafd Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents: 393
diff changeset
26
1033
c9d57876e249 Try and make audio generation less chatty.
Jim Hague <jim.hague@acm.org>
parents: 1031
diff changeset
27 abc2midi $1 -o $tunedir/${name}.tmp.mid -silent
943
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
28 mv $tunedir/${name}.tmp.mid $tunedir/${name}.mid
1033
c9d57876e249 Try and make audio generation less chatty.
Jim Hague <jim.hague@acm.org>
parents: 1031
diff changeset
29 timidity --quiet -OwM $3 -o $tunedir/${name}.wav $tunedir/${name}.mid
c9d57876e249 Try and make audio generation less chatty.
Jim Hague <jim.hague@acm.org>
parents: 1031
diff changeset
30 lame -m m -V 9 --silent $tunedir/${name}.wav $tunedir/${name}.tmp.mp3
943
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
31 mv $tunedir/${name}.tmp.mp3 $tunedir/${name}.mp3
394
ae9c05d2aafd Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents: 393
diff changeset
32 # Timidity can generate OGG directly. But we need to generate WAV
ae9c05d2aafd Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents: 393
diff changeset
33 # for lame, and oggenc produces smaller output. OGG is needed for
ae9c05d2aafd Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents: 393
diff changeset
34 # Firefox's audio tag. FF doesn't support MP3, some others support
ae9c05d2aafd Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents: 393
diff changeset
35 # MP3 but not OGG.
943
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
36 oggenc -Q -q 0 -o $tunedir/${name}.tmp.ogg $tunedir/${name}.wav
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
37 mv $tunedir/${name}.tmp.ogg $tunedir/${name}.ogg
394
ae9c05d2aafd Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents: 393
diff changeset
38
943
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
39 rm $tunedir/${name}.wav
394
ae9c05d2aafd Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents: 393
diff changeset
40 }
ae9c05d2aafd Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents: 393
diff changeset
41
943
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
42 # Make audio for a new tempo for the abc file $1, giving the output
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
43 # files the same name with a prefix $3 in output directory $2. The new
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
44 # tempo is the original tempo (120 used if not specified), multiplied
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
45 # by $4 and divided by $5. These audio files are for Learner use;
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
46 # I've found that having the chords thumping away can make it hard to
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
47 # distinguish the melody, so arrange for timidity to mute everything
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
48 # except the melody track.
399
aeef7b1ca0ad Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents: 394
diff changeset
49 makeaudiofortempo()
aeef7b1ca0ad Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents: 394
diff changeset
50 {
943
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
51 name=`basename $1 .abc`
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
52 tunedir="$2"
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
53 newspeedfilename="$3-${name}.abc"
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
54 mkdir -p $tunedir
399
aeef7b1ca0ad Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents: 394
diff changeset
55
aeef7b1ca0ad Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents: 394
diff changeset
56 # Prepare new speed audio files.
aeef7b1ca0ad Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents: 394
diff changeset
57 # The tempo is either a plain number, or <notelen>=<number>.
aeef7b1ca0ad Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents: 394
diff changeset
58 tempo=`$dir/abcfield.py --field Q $1`
aeef7b1ca0ad Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents: 394
diff changeset
59 if [ -z $tempo ]; then
aeef7b1ca0ad Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents: 394
diff changeset
60 echo "Warning: $1 has no tempo. Using 120."
aeef7b1ca0ad Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents: 394
diff changeset
61 tempo="120"
aeef7b1ca0ad Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents: 394
diff changeset
62 fi
1029
1139aa0eb0c2 Revist tempo change code when generating web audio.
Jim Hague <jim.hague@acm.org>
parents: 1026
diff changeset
63 numtempo=${tempo##*=}
1139aa0eb0c2 Revist tempo change code when generating web audio.
Jim Hague <jim.hague@acm.org>
parents: 1026
diff changeset
64 notelenprefix=${tempo%%=*}
1139aa0eb0c2 Revist tempo change code when generating web audio.
Jim Hague <jim.hague@acm.org>
parents: 1026
diff changeset
65 if [ "$notelenprefix" = "$numtempo" ]; then
1139aa0eb0c2 Revist tempo change code when generating web audio.
Jim Hague <jim.hague@acm.org>
parents: 1026
diff changeset
66 notelenprefix=
1139aa0eb0c2 Revist tempo change code when generating web audio.
Jim Hague <jim.hague@acm.org>
parents: 1026
diff changeset
67 else
1139aa0eb0c2 Revist tempo change code when generating web audio.
Jim Hague <jim.hague@acm.org>
parents: 1026
diff changeset
68 notelenprefix="${notelenprefix}="
1139aa0eb0c2 Revist tempo change code when generating web audio.
Jim Hague <jim.hague@acm.org>
parents: 1026
diff changeset
69 fi
399
aeef7b1ca0ad Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents: 394
diff changeset
70 # Calculate new tempo.
943
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
71 newtempo=$(( ( $numtempo * $4 ) / $5 ))
399
aeef7b1ca0ad Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents: 394
diff changeset
72 # Insert new tempo and delete old. Old may not exist,
aeef7b1ca0ad Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents: 394
diff changeset
73 # so do this rather than overwrite.
1029
1139aa0eb0c2 Revist tempo change code when generating web audio.
Jim Hague <jim.hague@acm.org>
parents: 1026
diff changeset
74 sed -e "/^Q:/d" -e "/^K:/a\\
1139aa0eb0c2 Revist tempo change code when generating web audio.
Jim Hague <jim.hague@acm.org>
parents: 1026
diff changeset
75 Q: ${notelenprefix}${newtempo}" $1 > $tunedir/$newspeedfilename
943
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
76 makeaudiofiles $tunedir/$newspeedfilename $tunedir --mute=0,-1
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
77 rm $tunedir/$newspeedfilename
399
aeef7b1ca0ad Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents: 394
diff changeset
78 }
aeef7b1ca0ad Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents: 394
diff changeset
79
394
ae9c05d2aafd Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents: 393
diff changeset
80 # Generate audio files and slow speed (currently half speed) audio files.
1031
18f0e45207ef Sort LC_ALL=C to get Linux sort to order Beginners as expected.
Jim Hague <jim.hague@acm.org>
parents: 1030
diff changeset
81 find $booke -maxdepth 1 -name "*.abc" |
43
d92717f8130c First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff changeset
82 while read filename
d92717f8130c First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff changeset
83 do
943
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
84 name=`basename $filename .abc`
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
85 tunedir=$basetunedir/$name
1026
e4d31e094d24 Changes to get Beginners booke building.
Jim Hague <jim.hague@acm.org>
parents: 943
diff changeset
86
943
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
87 mkdir -p $tunedir
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
88
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
89 makeaudiofiles $filename $tunedir
394
ae9c05d2aafd Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents: 393
diff changeset
90
399
aeef7b1ca0ad Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents: 394
diff changeset
91 # Now make 1/4, 1/2 and 3/4 speed audio.
943
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
92 makeaudiofortempo $filename $tunedir "veryslow" 1 4
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
93 makeaudiofortempo $filename $tunedir "slow" 2 4
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
94 makeaudiofortempo $filename $tunedir "littleslow" 3 4
d6e2a281cceb Change web page layout.
Jim Hague <jim.hague@acm.org>
parents: 753
diff changeset
95 makeaudiofortempo $filename $tunedir "normal" 4 4
43
d92717f8130c First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff changeset
96 done