Mercurial > dottes
annotate makeWebAudio.sh @ 1029:1139aa0eb0c2
Revist tempo change code when generating web audio.
Now Mac friendly.
author | Jim Hague <jim.hague@acm.org> |
---|---|
date | Wed, 19 Feb 2020 10:33:55 +0000 |
parents | e4d31e094d24 |
children | 70e1ff83fe34 |
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 | 15 basewebdir=$dir/web |
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 | 20 # MP3 and OGG. $1 is the input filename, $2 is the output directory, |
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 | 25 tunedir="$2" |
394
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
26 |
943 | 27 abc2midi $1 -o $tunedir/${name}.tmp.mid |
28 mv $tunedir/${name}.tmp.mid $tunedir/${name}.mid | |
29 timidity -OwM $3 -o $tunedir/${name}.wav $tunedir/${name}.mid | |
30 lame -m m -V 9 --quiet $tunedir/${name}.wav $tunedir/${name}.tmp.mp3 | |
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 | 36 oggenc -Q -q 0 -o $tunedir/${name}.tmp.ogg $tunedir/${name}.wav |
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 | 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 | 42 # Make audio for a new tempo for the abc file $1, giving the output |
43 # files the same name with a prefix $3 in output directory $2. The new | |
44 # tempo is the original tempo (120 used if not specified), multiplied | |
45 # by $4 and divided by $5. These audio files are for Learner use; | |
46 # I've found that having the chords thumping away can make it hard to | |
47 # distinguish the melody, so arrange for timidity to mute everything | |
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 | 51 name=`basename $1 .abc` |
52 tunedir="$2" | |
53 newspeedfilename="$3-${name}.abc" | |
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 | 71 newtempo=$(( ( $numtempo * $4 ) / $5 )) |
1029
1139aa0eb0c2
Revist tempo change code when generating web audio.
Jim Hague <jim.hague@acm.org>
parents:
1026
diff
changeset
|
72 echo "Old tempo $tempo new tempo ${notelenprefix}${newtempo}" |
399
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
73 # 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
|
74 # 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
|
75 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
|
76 Q: ${notelenprefix}${newtempo}" $1 > $tunedir/$newspeedfilename |
943 | 77 makeaudiofiles $tunedir/$newspeedfilename $tunedir --mute=0,-1 |
78 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
|
79 } |
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
80 |
394
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
81 # Generate audio files and slow speed (currently half speed) audio files. |
753
b83b49f2a0a0
Correct Mac-ism. find -maxdepth n, not find -depth n.
Jim Hague <jim.hague@acm.org>
parents:
748
diff
changeset
|
82 find $booke -maxdepth 1 -name "*.abc" | sort | |
43
d92717f8130c
First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff
changeset
|
83 while read filename |
d92717f8130c
First go at producing a very simple website.
Jim Hague <jim.hague@laicatc.com>
parents:
diff
changeset
|
84 do |
943 | 85 name=`basename $filename .abc` |
86 tunedir=$basetunedir/$name | |
1026
e4d31e094d24
Changes to get Beginners booke building.
Jim Hague <jim.hague@acm.org>
parents:
943
diff
changeset
|
87 |
e4d31e094d24
Changes to get Beginners booke building.
Jim Hague <jim.hague@acm.org>
parents:
943
diff
changeset
|
88 # Already generated? |
e4d31e094d24
Changes to get Beginners booke building.
Jim Hague <jim.hague@acm.org>
parents:
943
diff
changeset
|
89 if [ -f $tunedir/${name}.mp3 ]; then |
e4d31e094d24
Changes to get Beginners booke building.
Jim Hague <jim.hague@acm.org>
parents:
943
diff
changeset
|
90 continue |
e4d31e094d24
Changes to get Beginners booke building.
Jim Hague <jim.hague@acm.org>
parents:
943
diff
changeset
|
91 fi |
e4d31e094d24
Changes to get Beginners booke building.
Jim Hague <jim.hague@acm.org>
parents:
943
diff
changeset
|
92 |
943 | 93 mkdir -p $tunedir |
94 | |
95 makeaudiofiles $filename $tunedir | |
394
ae9c05d2aafd
Make slow speed web audio files.
Jim Hague <jim.hague@acm.org>
parents:
393
diff
changeset
|
96 |
399
aeef7b1ca0ad
Make 1/4, 1/2 and 3/4 speed audio for tunes.
Jim Hague <jim.hague@acm.org>
parents:
394
diff
changeset
|
97 # Now make 1/4, 1/2 and 3/4 speed audio. |
943 | 98 makeaudiofortempo $filename $tunedir "veryslow" 1 4 |
99 makeaudiofortempo $filename $tunedir "slow" 2 4 | |
100 makeaudiofortempo $filename $tunedir "littleslow" 3 4 | |
101 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
|
102 done |