Mercurial > dottes
annotate makeWebAudio.sh @ 399:aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Name them 'veryslow', 'slow' and 'littleslow'.
| author | Jim Hague <jim.hague@acm.org> |
|---|---|
| date | Mon, 02 Sep 2013 10:15:56 +0100 |
| parents | ae9c05d2aafd |
| children | f1c4abe4fc75 |
| 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 |
|
d92717f8130c
First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff
changeset
|
15 builddir=$dir/web/$1 |
|
d92717f8130c
First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff
changeset
|
16 |
|
d92717f8130c
First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff
changeset
|
17 mkdir -p $builddir |
|
d92717f8130c
First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff
changeset
|
18 |
|
394
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
19 # Make MP3 and OGG files for the input .abc. In case we're generating |
|
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
20 # to a live site (which we won't be), do this to temp files and rename |
|
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
21 # into place to make updates as atomic as possible. |
|
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` |
|
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
25 tmpname=${name}.tmp |
|
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
26 |
|
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
27 abc2midi $1 -o $builddir/${tmpname}.mid |
|
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
28 timidity -OwM -o $builddir/${tmpname}.wav $builddir/${tmpname}.mid |
|
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
29 lame -m m -V 9 --quiet $builddir/${tmpname}.wav $builddir/${tmpname}.mp3 |
|
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
30 # 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
|
31 # 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
|
32 # 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
|
33 # MP3 but not OGG. |
|
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
34 oggenc -Q -q 0 -o $builddir/${tmpname}.ogg $builddir/${tmpname}.wav |
|
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
35 |
|
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
36 mv $builddir/${tmpname}.mid $builddir/${name}.mid |
|
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
37 mv $builddir/${tmpname}.mp3 $builddir/${name}.mp3 |
|
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
38 mv $builddir/${tmpname}.ogg $builddir/${name}.ogg |
|
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
39 rm $builddir/${tmpname}.wav |
|
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 |
|
399
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
42 # Make audio for a new tempo for the abc file $1, giving the output files |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
43 # the same name with a prefix $2. The new tempo is the original tempo |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
44 # (120 used if not specified), multiplied by $3 and divided by $4. |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
45 makeaudiofortempo() |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
46 { |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
47 name=`basename $filename .abc` |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
48 newspeedfilename="$2-${name}.abc" |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
49 |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
50 # 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
|
51 # 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
|
52 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
|
53 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
|
54 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
|
55 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
|
56 fi |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
57 pos=`expr index $tempo '='` |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
58 numtempo=${tempo:pos} |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
59 notelenprefix=${tempo:0:pos} |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
60 # Calculate new tempo. |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
61 newtempo=$(( ( $numtempo * $3 ) / $4 )) |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
62 # 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
|
63 # so do this rather than overwrite. |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
64 sed -e "/^Q:/d" -e "/^K:/aQ: ${notelenprefix}${newtempo}" $1 > $builddir/$newspeedfilename |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
65 makeaudiofiles $builddir/$newspeedfilename |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
66 rm $builddir/$newspeedfilename |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
67 } |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
68 |
|
394
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
69 # Generate audio files and slow speed (currently half speed) audio files. |
|
43
d92717f8130c
First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff
changeset
|
70 find $booke -name "*.abc" | sort | |
|
d92717f8130c
First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff
changeset
|
71 while read filename |
|
d92717f8130c
First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff
changeset
|
72 do |
|
394
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
73 makeaudiofiles $filename |
|
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
74 |
|
399
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
75 # Now make 1/4, 1/2 and 3/4 speed audio. |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
76 makeaudiofortempo $filename "veryslow" 1 4 |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
77 makeaudiofortempo $filename "slow" 1 2 |
|
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
78 makeaudiofortempo $filename "littleslow" 3 4 |
|
43
d92717f8130c
First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff
changeset
|
79 done |
